IT系统技术分享–Iptables配置

一、总体介绍
iptables是 Linux内置防火墙 ,功能非常强大,iptables内置了filter,nat和mangle三张表。
filter负责过滤数据包,包括的规则链有,input,output和forward;
nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;
input匹配目的IP是本机的数据包,forward匹配流经本机的数据包,prerouting用来修改目的地址用来做DNAT,postrouting用来修改源地址用来做SNAT。

二、使用实例
iptables [-t table] CMD [chain] [rule-matcher] [-j target]
表(table)
使用的三个表(filter、nat、mangle)而得名, 对包过滤只使用 filter 表, filter还是默认表
常用的CMD:
-A 或 -append 在所选链尾加入一条或多条规则
-D 或 -delete 在所选链尾部删除一条或者多条规则
-R 或 -replace 在所选链中替换一条匹配规则
-I 或 -insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头部.
-L 或 -list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则.
-F 或 -flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空.
-N 或 -new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同.
-X 或 -delete-chain 删除指定的用户定义帘,必需保证链中的规则都不在使用时才能删除,若没有指定链,则删除所有用户链.
-P 或 -policy 为永久链指定默认规则(内置链策略)
-C 或 -check 检查给定的包是否与指定链的规则相匹配.
-Z 或 -zero 将指定帘中所由的规则包字节(BYTE)计数器清零.
-h 显示帮助信息.
常用匹配规则器:
-p , [!] protocol 指出要匹配的协议,可以是tcp, udp, icmp, all, 前缀!为逻辑非,表示除该协议外的所有协议.
-s [!] address[/mask] 指定源地址或者地址范围.
-sport [!] port[:port] 指定源端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-d [!] address[/mask] 指定目的地址或者地址范围.
-dport [!] port[:port] 指定目的端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-icmp-type [!] typename 指定匹配规则的ICMP信息类型(可以使用 iptables -p icmp -h 查看有效的ICMP类型名)
-i [!] interface name[+] 匹配单独或某种类型的接口,此参数忽略时,默认符合所有接口,接口可以使用”!”来匹配捕食指定接口来的包.参数interface是接口名,如 eth0, eht1等,指定一个目前不存在的接口是完全合法的,规则直到接口工作时才起作用。”+”表示匹配所有此类型接口.该选项只针对于INPUT,FORWARD和PREROUTING链是合法的.
-o [!] interface name[+] 匹配规则的对外网络接口,该选项只针对于OUTPUT,FORWARD,POSTROUTING链是合法的.
[!] –syn 仅仅匹配设置了SYN位, 清除了ACK, FIN位的TCP包. 这些包表示请求初始化的TCP连接.阻止从接口来的这样的包将会阻止外来的TCP连接请求.但输出的TCP连接请求将不受影响.这个参数仅仅当协议类型设置为了TCP才能使用. 此参数可以使用”!”标志匹配已存在的返回包,一般用于限制网络流量,即只允许已有的,向外发送的连接所返回的包。
链(chain) 对于包过滤可以针对filter表中的INPUT、OUTPUT、FORWARD链,也可以操作用户自定义的链。
动作目标(target) 目标动作:当规则匹配一个包时,真正要执行的任务,常用的有:
ACCEPT 允许包通过
DROP 丢弃包
一些扩展的目标还有: REJECT 拒绝包,丢弃包同时给发送者发送没有接受的通知;LOG 包有关信息记录到日志;TOS 改写包的TOS值;

三、实例:
1、禁止本机对外发送UDP包
iptables -A OUTPUT -p udp -j DROP

2、禁止任何主机ping我们的服务器
在filter 表中的 INPUT 规则链中插入一条规则,所有源地址不为 127.0.0.1 的 icmp 包都被抛弃。
iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP

3、禁止访问21端口(ftp)和80端口(web)
iptables -A INPUT -i eth1 -p tcp –dport 21 -j DROP
iptables -A INPUT -i eth0 -p tcp –dport 21 -j DROP
iptables -A INPUT -i eth1 -p tcp –dport 80 -j DROP
iptables -A INPUT -i eth0 -p tcp –dport 80 -j DROP

4、禁止外部邮件通信,内部允许(禁止pop3,110和smtp,25)
iptables -A INPUT -i eth0 -p tcp –dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –dport 110 -j ACCEPT
iptables -A OUTPUT -i eth1 -p tcp –sport 25 -j DROP
iptables -A OUTPUT -i eth1 -p tcp –sport 110 -j DROP

5、测试防火墙配置
第一步: netstat -tulpn | grep :80
第二步:如果80端口未打开,使用下面命令启动apache进程
$APACHE_HOME/bin/apachectl restart
第三步:检查防火墙配置是否允许访问服务器80端口
iptables -L INPUT -v -n | grep 80
第四步:如果不允许,使用如下命令修改防火墙配置
iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT
第五步:保存防火墙配置
iptables-save > /etc/sysconfig/iptables

6、保存执行过的iptables命令
iptables-save > /etc/sysconfig/iptables

7、恢复原来的规则库
iptables-restore < /etc/sysconfig/iptables

iptables –help 查看usage和参数;
iptabls规则是从上往下应用,当找到能通过的规则,不管下面是否有规则冲突,也一样通过;
iptables的高级用法后续补充

发表评论