案例1:
允许任意的客户端范文服务器主机提供的日常服务(HTTP,HTTPS,DNS,NTP,SMTP,POP3,SSH),在Linux中,/etc/services文件可以找到各种服务所对应的标准端口信息。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许22端口(SSH)数据包通过
iptables -A INPUT -p udp --dport 25 -j ACCEPT #允许25端口(SMTP)数据包通过
iptables -A INPUT -p udp --dport 53 -j ACCEPT #允许53端口(DNS)数据包通过
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许80端口(HTTP)数据包通过
iptables -A INPUT -p tcp --dport 110 -j ACCEPT #允许110端口(POP3)数据包通过
iptables -A INPUT -p tcp --dport 443 -j ACCEPT #允许443端口(HTTPS)数据包通过
iptables -A INPUT -p tcp --dport 123 -j ACCEPT #允许123端口(NTP)数据包通过
iptables -P INPUT DROP #设置INPUT链的默认规则为丢弃数据包
iptables -P OUTPUT ACCEPT #设置OUTPUT链的默认规则为允许数据包通过
案例2:
数据包因为太大无法一次完成数据的传输,此时数据包将被分割为数据片段再发送出去。接收端接收完数据后,将把这些数据片段重新组合成完成的数据包。但问题在于当数据被分割后,只有前面的初始数据片段包含全部的数据头部信息(TCP,IP,UDP,ICMP等),后续的数据片段仅包含数据包头部信息的一部分。这时候再去检查后续数据片段的头部信息是不可能的。当然了,如果想要匹配第二个及后面被分片的数据,可以用 -f 选项。
iptables -A OUTPUT -f -d 192.168.0.1 -j DROP #丢弃发送至192.168.0.1的所有数据以及分片数据
案例3:
目前网络攻击有很多种形式,但多数攻击会以发送大量无效的数据包给服务器,造成服务器无法响应正常的请求包。但iptables提供了limit的功能,可以限制单位时间内数据包的个数。
#当每秒钟数据包个数为500时接收入站,否则拒绝连接
iptables -I INPUT -m limit --limit 500/sec -j ACCRPT
iptables -P INPUT DROP
案例4:
iptables本身属于三层包过滤防火墙,也提供了string功能,通过--string也可以根据关键词限制网络连接。下面的两条记录写入基于Linux的软路由服务器防火墙规则中,实现拒绝转发包含有关键词/etc/passwd以及qq的数据包,也就是防止将密码文件复制出局域网,并防止内部员工访问QQ网站
iptables -I FORWARD -m string --algo bm --string "/etc/passwd" -j DROP
iptables -I FORWARD -m string --algo bm --string "qq" -j DROP
案例5:
根据数据连接状态设置防火墙规则,放行所有的出站数据包。拒绝入站的新连接请求与无效连接,放行入站的回应请求。
iptables -F
iptables -A INPUT -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT
案例6:
企业采用基于Linux的软路由设备,要求在路由设备上设置防火墙规则,记录192.168.0.1至192.168.0.50地址段内所有的主机发送给路由要求转发的数据包,并允许转发这些数据包
iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.25 -p tcp --dport 80 -j LOG
iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.25 -p tcp --dport 80 -j ACCEPT