4.防火墙--匹配数据包(iptables)
4.1通用条件匹配
可直接使用,不依赖于其他的条件或扩展模块,包括网络协议、IP地址、网络接口等匹配方式。
(1)协议匹配
使用“-p 协议名”的形式,协议名可使用在“/etc/protocols”文件中定义的名称。常用的协议包括tcp、udp、icmp等。
(2)地址匹配
使用“-s 源地址”、“-d 目标地址”的形式,地址可以是单个IP地址、网络地址(带掩码长度)。
(3)接口匹配
使用“-i 网络接口名”、“-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口。
(4)端口匹配
使用“--sport 源端口”、“--dport 目标端口”的形式 ,采用“端口1:端口2”的形式可以指定一个范围的端口。
例:使特定IP可以访问此服务器上的网站。
命令:netstat -anpt | grep httpd #查看httpd的端口
iptables -R INPUT 1 -p tcp -s 192.168.0.100 --dport 80 -j ACCEPT
4.2隐含条件匹配
一般需要以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等匹配方式。
(1)ICMP类型匹配
使用“--icmp-type ICMP类型”的形式,ICMP类型可以使用字符串或对应的数值,如:Echo-Reply(0)、Echo-Request(8)。
命令:
iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Request -j ACCEPT
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
(2)TCP标记匹配
使用“--tcp-flags 检查范围 被设置的标记”的形式,如“--tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件。
4.3显式条件匹配
需要使用“-m 扩展模块”的形式明确指定匹配方式,包括多端口、MAC地址、IP地址范围、数据包状态等匹配方式。
(1)MAC地址匹配
使用“-m mac”结合“--mac-source MAC地址”的形式。
(2)多端口匹配
使用“-m multiport”结合“--sports 源端口列表”或者“--dports 目标端口列表”的形式。多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔。
(3)IP地址范围匹配
使用“-m iprange”结合“--src-range 源IP范围”或者“--dst-range 目标IP范围” 的形式。以“-”符号连接起始IP地址、结束IP地址
命令:
iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
(4)数据包状态匹配
使用“-m state”结合“--state 状态类型”的形式,同时表示多种状态时以逗号“,”分隔。常见的数据包状态包括:NEW、ESTABLISHED、RELATED、INVALID。