您的位置:首页 > 运维架构 > Linux

linux的防火墙学习笔记

2012-07-11 07:10 253 查看
防火墙最重要的任务就是规划出:

1、切割被信任(如子域)与不被信任(如internet)的网段。
2、划分出可提供Internet的服务与必须受保护的服务。
3、分析出可接受与不可接受的封包状态。

linux系统上防火墙的主要分为封包过滤性的Netfilter(网络过滤器)和一句服务软件程序作为分析的TCP Wrappers(TCP封装器)。

Netfilter(网络过滤器):封包过滤机制

主要是分析进入主机的网络封包,将封包的标头数据进行分析,以决定该联机为方形或抵挡的机制,主要分析OSI七层协议的2.3.4层,包括mac、IP、tcp、udp、icmp等封包信息都可以进行过滤分析。

Netfilter机制可以进行的分析工作主要有:
1、拒绝让Internet的封包进入主机的某些端口
2、拒绝让某些来源IP的封包进入
3、拒绝让带有某些特殊旗标(如syn)的封包进入
4、分析硬件地址决定是否联机

当一个网络封包进入主机之前,会先经由Netfilter进行检查(iptables的规则),检查通过则接受(ACCEPT)进入本机取得资源,如果检查不通过,则予以丢弃(DROP)
iptables的规则有排列顺序,会顺序检测,如规则排序错误会差生无法访问等情况。

Netfilter提供了iptables指令进行设置

iptables的表格(table)与链(chain)

iptables有许多表格,每个表格都定义出自己的默认政策和规则,每个表格的用途都不相同。

linux下的iptables至少就要三个表格,分别为管理本机进出的filter、管理后端主机的nat、管理特殊旗标使用的mangle,每个表格与其中链的用途分别是:

filter(过滤器):主要跟进入linux本机的封包有关,这个是预设的table。
INPUT:主要跟进入linux本机的封包有关
OUTPUT:主要与linux本机送出的封包有关
FORWARD:可以传递封包到后端的计算机,与nat table相关性较高。

nat(地址转换):主要在进行来源与目的之IP或端口的转换,与本机无关,主要与linux主机后的局域网络内计算机相关。
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT:与发送出去的封包有关

mangle(破坏者):主要与特殊的封包的路由旗标有关,较少适用这个表格。

封包进入linux主机使用资源:
在路由判断后确定是向linux主机要求数据的封包,主要是透过filter的INPUT链来进行控管。

NAT PRE-路由判断-filter input-linux本机资源

封包进入linux主机的传递,没有使用主机资源,而是向后端主机流动:
主要经过filter的FORWARD以及nat的POSTROUTING、PREROUTING。

NAT PRE-路由判断-filter output-NAT POST-发送给下一个

封包由linux本机发送出去:
相应客户端的要求,或者是linux本机主动送出的封包。透过路由判断,决定了输出的路径后,透过filter的OUTPUT链来传送,最终过nat的POSTROUTING链

Linux本机资源-路由判断-NAT output-filter output-NAT POST-传出

iptables-save 查看当前iptables列表的所有规则
-t:针对某些表格输出

iptables命令用法:

iptables-save 查看当前iptables列表的所有规则
-t:针对某些表格输出

-t(table):后面接table,例如nat或 filter(不加参数默认)
-L(list):列出目前的table的规则
-n:不进行IP与hostname的反查
-v(version):列出更多信息,规则的封包总位数、相关的网络接口等

-F(flush):清除所有已订定的规则
-X:杀掉所有使用者自定义的链
-Z(zero):将所有链的计数与流量统计归零

-P(policy政策):顶级策略ACCEPT为接受、DROP为丢弃(-p为设置默认规则)

-AI 链名:针对某个链进行规则的插入或累加
-A(add):新增加一条规则,该规则在原本规则的最后面
-I(insert):插入一条规则,如没指定顺序,默认变成第一条

封包的基础设置
-io :网络接口:设定封包进出的接口
-i:封包所进入的那个网络接口,需和INPUT链配合
-o:封包所传出的那个网络接口,与OUTPUT配合
-p协定:设定此规则适用于那种封包格式
-s:来源IP/网域设定此规则指封包的来源项目,可指定单纯的IP和网域
-d:同上,目标IP
-j:后面接动作,主要的动作有ACCEPT接受、DROP丢弃、REJECT拒绝、LOG记录
--sport 端口范围:限制来源的端口号、端口可以连续,如1024:44444
--dport :限制目标的端口范围

iptables 外挂模块:mac state
-m 指定iptables的外挂模块
state:状态模块
mac:网卡硬件地址

--state:一些封包的状态:
INVALID:破损无效的封包状态
ESTABLISHED:已经联机成功的联机状态
NEW:新建立的封包状态
RELATED:表示这个封包是与我们主机发送出去的封包有关

mac:物理地址
--mac-source:来源主机的MAC

chain指的是每个链
target:代表进行的动作,ACCEPT是放行、REJECT是拒绝,DROP丢弃
prot:使用的封包协议,tcp/udp/icmp三种
opt:额外说明
source:此规则是针对哪个来源IP进行限制
destination:针对目标IP

ACCEPT :接受匹配条件的数据包(应用于I NPUT ,OUTPUT ,FORWARD )

DROP :丢弃匹配的数据包(应用于INPUT ,OUTPUT ,FORWARD

REJECT :丢弃匹配的数据包且返回确认的数据包

MASQUERADE :伪装数据包的源地址(应用于POSTROUTING且外网地址为动态地址,作用于NAT )

REDIRECT :包重定向 (作用于NAT表中PREROUTING ,OUTPUT,使用要加上--to-port 端口号 )

TOS : 设置数据包的TOS字段(应用于MANGLE,要加上--set-tos 值)

SNAT : 伪装数据包的源地址(应用于NAT表中POSTROUTING链,要加上--to-source ip地址 [ip地址] )

DNAT : 伪装数据包的目标地址(应用于NAT表中PREROUTING链,要加上--to-destination ip地址 )

LOG :使用syslog记录的日志

RETURN :直接跳出当前规则链

service iptables start 启动iptables

chkconfig --level 3 iptables on 开机自动开启iptables
service iptables save 将内存中的规则保存到/etc/sysconfig/iptables
iptables-save>/etc/sysconfig/iptables 同上

例:

iptables -t filter -L --line-numbers
查看filter链的所有规则,--line-numbers 可以查看规则级别。

iptables -D INPUT 1
删除INPUT表内第一条规则

iptables -I INPUT 3 -j DROP
插入一条规则到第三运行级别上 丢弃所有进入本机的包

iptables -R INPUT 3 -j ACCEPT
修改INPUT表内第三表规则 接受所有进入本机的包

iptables -t filter -A INPUT -p icmp --icmp-type 8 -s 192.168.2.10 -j DROP
来自192.168.2.10的所有icmp包到达主机时全部被丢弃

echo "1" > /proc/sys/net/ipv4/ip_forward
开启路由转发功能
iptables -t nat -A POSTROUTING -s 192.168.2.10/24 -j SNAT --to-source 192.168.8.10
NAT,伪装内网192.168.2.0网段的的主机地址为外网192.168.8.10,这个公有地址,使内网通过NAT上网,前提是启用了路由转发。

TCP Wrappers:程序控制管理

主要是透过服务器程序的外挂(tcpd)来处置的。这种机制主要是分析该服务器程序是否能够联机,透过分析服务器程序来控管,与启动的端口无关,至于启动的程序名称有关,如vsftpd,而不会分析21号端口。

TCP Wrappers主要是透过/etc/hosts.allow 、/etc/hosts.deny这两个文件来管理,只有xinetd所管理的服务和支持libwrap.so模块(利用ldd $(which rsyslogd sshd xinted httpd)查询)的服务能够管理TCP Wrappers防火墙规则。

/etc/hosts.allow(允许) 、/etc/hosts.deny(拒绝)设定方式:

<服务 (程序名称)>:<ip、域、主机名>
如:rsync:192.168.1.0/24

/etc/hosts.allow 等级优先于 /etc/hosts.deny,若不在这两个档案内,就是规则都不符合,给予放行。

本文出自 “Linux学习历程” 博客,请务必保留此出处http://aixia.blog.51cto.com/4605660/926743
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: