1.在Linux是使用内核内建的Netfilter这个机制来进行数据包过滤,而Netfilter提供了iptables这个软件来作为防火墙数据包过滤的命令。
2.防火墙的规则,根据数据包的分析资料“比对”预先定义的规则内容,若数据包数据与规则内容相同则进行动作,而不管后续的规则如何,否则就继续下一条规则的比对,直到规则比对完毕,则按照默认规则进行动作。因此防火墙添加的规则顺序十分重要。
在iptables的处理过程中,最好将相关文件写入脚本中。由于linux内核对网络功能也有和很多相关的攻击阻挡机制,这些设置数据主要是放置在/proc/sys/net/ipv4这个目录下,在设置iptables前可先将这些设置启动(也可写入/etc/sysctl.conf中):
----写入/etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf..... = 1(将conf内的所有选项设置成1)
----直接启动:
echo "1">/proc/sys/net/ipv4/tcp_syncookies
echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo.......(参考附件中鸟哥的iptables.rule)
3.iptables内有多个表格,每个表格都定义出自己的默认策略和规则,且每个表格的用途不相同。
默认情况下,iptables有至少有三个表格:
管理本机进出的Filter
管理后端主机的NAT
管理特殊标志使用的Managle(较少使用)。
另外还可以自定义额外的链。
4.表格table与链chain的关系(以下主要对Filter和NAT进行讲解)。
----Filter(过滤器):主要跟进出Linux本机的数据包有关,是默认的table:
INPUT:主要与想要进入Linux本机的数据包有关
OUPUT:主要与Linux本机所要送出的数据包有关
FORWORD:与Linux本机没有关系,它可以传递数据包到后端的计算机中,与NAT的table相关性较高。
----NAT(网络地址转换):主要用于来源与目的地的IP或port的转换,与Linux本机无关,主要与Linux主机后的局域网计算机有关
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT:与发送出去的数据包有关
5.iptables规则的处理:
----iptables的查看:
iptables -t nat -L -n
iptables-save //能列出完整的防火墙规则,推荐
----iptables的清除:
iptables -t tables-F(清除所要的已制定的规则)
iptables -t tables -X(清除自定义的chain)
iptables -t tables -Z(将所要的chain的计数和流量统计归零)
----定义默认策略:
iptables -t [filter/nat] -P [INPUT/OUTPUT/FORWORD] [DROP/ACCEPT]
----Filter表规则的添加:
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 源IP或源网络] [--sport 源端口范围] [-d 目标IP或网络] [--dport 目标端口范围]
[-m state] [--state 状态] -j [ACCEPT|DROP|REJECT|LOG]
选项参数说明:
-A:在链中新增一条规则,放在最后面。
-I:在链中插入一条规则,放在最前面。
链名:INPUT/OUT/FORWORD,同时与-io有关
-i:数据包要进入的网络接口
-o:数据包所传出的那个网络接口
-p:主要的数据包格式有:tcp.udp.icmp,all
-s:来源IP或网络,若规范为“不许”,则加上“!”即可
-d:目标IP或网络,同-s
-j:后面接的操作,主要为接受,丢弃(直接丢弃,不通知),拒绝(丢弃,同时通知客户端)及记录(记录在日志/messages中,这是唯一一个能够在规则匹配的情况下,继续往后比对的情况)
--sport/dport:其格式可以为20,21(20和21端口)或 20:25(20到25端口)
当-p为icmp时,可以针对其类型进行设置:。。。。。-p icmp --icmp-type 0/3/4/5/8 。。。。。。
-m:一些iptables的外挂模块,常见的有:state、mac等
--state:当-m设置成state时,采用此参数来设置数据包的状态:
INVALID:无效的数据包
ESTABLISHED:已经成功的连接状态
NEW:想要新建立连接的数据包状态
RELATED:这个是最常见的,表示这个数据包是主机发送出去的数据包相关
----NAT表的添加:
----IP分享器:让-s中的IP伪装成数据包出去(-o)的那款设备上的IP
echo "1" > /proc/sys/net/ipv4/ip_forward //让Linux具有route的功能
iptables -t nat -A POSTROUTING -s 来源IP/网络 -o 网络接口 -j MASQUERADE
----直接修改来源数据包的IP
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source xxxxxxxx //可以是固定IP,也可以是一个范围
----将外部数据包通过NAT机制传到到内网中的主机上
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 //可以传导到其他ip及其其他端口
--在本机上面继续port转换,只适用于PREROUTING和OUTPUT链
iptables -t nat -A PREROUTING -p tcp -dport 80 -j REDIRECT --to-ports 8080
##PREROUTING与DNAT有关,POSTROUTING与SNAT有关
整理自:鸟哥的linux私房菜服务器篇
另外可参看:http://wenku.baidu.com/view/19bca0235901020207409c84.html
附:
iptables.rule