上一篇文章“iptables之语法初步”(见 )有说到iptables的基本命令,配合实际的操作指令应该可以实现基本的iptables操作。那么如果要实现将规则应用于实际的生产环境中,还需要了解以下的内容。
匹配注意:
? Ip地址或者主机名(主机名必须可以解析)
? 端口号码或者是服务名字22 or ssh( 对应到/etc/service )
? 排除可以用“!”
iptables –A INPUT –s ! 192.168.1.254 –j REJECT
? 一段端口可以用“:” 比如‘0:1024’
? 子网掩码可以使用vlsn或者cidr的方式
cidr: 10.0.1.0/24 vlsn :10.0.1.0/255.255.255.0
一:按网络接口匹配
-i <匹配数据进入的网络接口>
例如:
-i eth0 匹配是否从网络接口 eth0 进来
-i ppp0 匹配是否从网络接口 ppp0 进来
-o 匹配数据流出的网络接口
例如:
-o eth0
-o ppp0
二:按来源目的地址匹配
-s <匹配来源地址>
可以是 IP、NET、DOMAIN,也可空(任何地址)
例如:
-s 192.168.0.1 匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
-s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包
-d <匹配目的地址>
可以是 IP、NET、DOMAIN,也可以空
例如:
-d 202.106.0.20 匹配去往 202.106.0.20 的数据包
-d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
-d 匹配去往域名 的数据包
三:按协议类型匹配
-p <匹配协议类型>
可以是 TCP、UDP、ICMP 等,也可为空
例如:
-p tcp
-p udp
-p icmp --icmp-type 类型
ping: type 8 pong: type 0
四:按来源目的端口匹配
--sport <匹配源端口>
可以是个别端口,可以是端口范围
例如:
--sport 1000 匹配源端口是 1000 的数据包
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
--sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)
--dport <匹配目的端口>
可以是个别端口,可以是端口范围
例��:
--dport 80 匹配源端口是 80 的数据包
--dport 6000:8000 匹配源端口是 6000-8000 的数据包(含6000、8000)
--dport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--dport 1000: 匹配源端口是 1000 以上的数据包(含 1000)
例1、端口匹配
-p udp --dport 53
匹配网络中目的地址是 53 的 UDP 协议数据包
例2、地址匹配
-s 10.1.0.0/24 -d 172.17.0.0/16
匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包
例3、端口和地址联合匹配
-s 192.168.0.1 -d -p tcp --dport 80
匹配来自 192.168.0.1,去往 的 80 端口的 TCP 协议数据包。
注意:
1、--sport、--dport 必须联合 -p 使用,必须指明协议类型是什么
2、条件写的越多,匹配越细致,匹配范围越小
一:-j ACCEPT
通过,允许数据包通过本链而不拦截它, 类似 Cisco 中 ACL 里面的 permit 。
例如:
iptables -A INPUT -j ACCEPT
允许所有访问本机 IP 的数据包通过
二:-j DROP
丢弃,阻止数据包通过本链而丢弃它,类似 Cisco 中 ACL 里的 deny。
例如:
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止来源地址为 192.168.80.39 的数据包通过本机