本文将以实际例子的方式简单介绍iptables实现防火墙,源IP/目的IP地址转换,iptables拓展模块,以及通过重新编译内核凭借l7-filter模块过滤QQ、迅雷等应用程序通信等内容。

一、通过防火墙实现访问控制简单实例:
首先开启防火墙的路由功能:
法1:
#echo 1 > /pro/sys/net/ipv4/ip_forward
注:此法在操作系统重新启动后将会失效

法2:
#vim /etc/sysctl
net.ipv4.ip_forward = 0
将此项值设置成1,即:
net.ipv4.ip_forward = 1
此法永久生效

实例1:允许192.168.0.0/24访问防火墙的SSH服务
#iptables -t filter -A INPUT -s 192.168.0.0/24 -d 172.16.4.1 -p tcp --dport 22 -j ACCEPT 
在filter表,INPUT链,添加允许192.168.0.0、24网络内的主机基于TCP协议的22号端口访问172.16.4.1主机
  
iptables -t filter -A OUTPUT -s 192.168.0.71 -d 192.168.0.0/24 -p tcp --sport 22 -j ACCEPT
filter表,OUTPUT链,添加允许从172.16.4.1主机的TCP协议的22号端口传送出192.168.0.0/24网段的数据传输

#iptables -P INPUT DROP  
将INPUT默认策略设置为DROP

#iptables -P OUTPUT DROP
将OUTPUT默认策略设置为DROP


实例2:允许状态是new和established的访问web服务
#iptables -R INPUT 2 -s 192.168.0.0/24 -d 172.16.4.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
修改INPUT链上的第二条规则,允许来自192.168.0.0/24网络内的主机访问172.16.4.1主机上的TCP协议的80端口上的新请求和已经建立的传输


#iptables -R OUTPUT 1 -d 172.16.4.1 -p tcp -m state --state ESTABLISHED -j ACCEPT
修改OUTPUT链上的第一条规则,放行任何主机访问172.16.4.1主机上的TCP协议的80端口上的已经建立的传输


实例3:拒绝所有192.168.0.0/16网段的主机来访问172.16.4.1的DNS解析服务
#iptables -t filter -A INPUT -s 192.168.0.0/24 -d 172.16.4.1 -p udp --dprot 53 -j DROP          
在filter表,INPUT链添加一条规则,拒绝来自192.168.0.0/24网段的主机访问172.16.4.1主机的UDP协议的53号端口上的服务



二、iptables实现源地址转换以及目的地址转换
源地址转换:
作用:实现多个内网IP地址共同使用一个公网IP地址访问Internet。

#iptables -t nat -A POSTROUTING -s 172.16.4.0/16 -j SNAT --to-source 202.192.25.48
将172.16.4.0/16网段的地址作为源地址转换成202.192.25.48

地址伪装源地址转换:
作用:使用ADSL拨号上网用户的IP都是由ISP随即分配,如果还按照上述方法进行配置就不在适用了,就必须使用使用地址伪装来进行配置

#iptables -t nat -A POSTROUTING -s 172.16.4.0/16 -j MASQUERADE

将172.16.4.0/16网段的所有地址作为源地址转换成公网地址

目的地址转换:
作用:实现公网用户通过公网地址,访问内网服务器。

#iptables -t nat -A PREROUTING -d 202.192.25.48 -p tcp --dport 80 -j DNAT --to-destination 172.16.4.1    
将外网的web访问请求(80端口)通过DNAT转发至内网web服务器172.16.4.1
#iptables -t nat -A PREROUTING -d 202.192.25.48 -p tcp --dport 22 -j DNAT --to-destination 172.16.4.1   
将外网的ssh访问请求(22端口)通过DNAT转发至内网ssh服务器172.16.4.1 
#iptables -t nat -A PREROUTING -d 202.192.25.48 -p udp --dport 53 -j DNAT --to-destination 172.16.4.1     
将外网的DNS解析请求(53端口)通过DNAT转发至内网DNS服务器172.16.4.1
#iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
转发所有状态为ESTABLISHED的数据包

其他的设置均可仿照该例进行响应的设置


三、借助l7-filter模块过滤QQ、迅雷等应用程序通信等内容:

#iptables -A INPUT -d 172.16.4.1 -p tcp -dport 22 -m time --timestart 09:00 --timestop 18:00 ! -days sat,sun -j ACCEPT
在INPUT的链上添加一条规则:允许在每周的周1-周5的早上9点到晚上的6点访问172.16.4.1主机的TCP协议的22号端口的服务
#iptables -A FORWARD -s 192.168.0.0/24 -m layerl7 --l7proto qq -j REJECT
禁止转发来自于192.168.0.0/24网段的主机发起的关于QQ的传输
#iptables -A FORWARD -s 192.168.0.0/24 -m layerl7 --l7proto edonkey -j REJECT
禁止转发来自于192.168.0.0/24网段的主机发起的关于电驴的传输
#iptables -A FORWARD -s 192.168.0.0/24 -m layerl7 --l7proto bittorrent -j REJECT
禁止转发来自于192.168.0.0/24网段的主机发起的关于bt的传输
#iptables -A FORWARD -s 192.168.0.0/24 -m layerl7 --l7proto xunlei -j REJECT
禁止转发来自于192.168.0.0/24网段的主机发起的关于迅雷的传输
#iptables -A FORWARD -s 192.168.0.0/24 -m layerl7 --l7proto msnmessenger -j REJECT
禁止转发来自于192.168.0.0/24网段的主机发起的关于MSN的传输
#iptables -A FORWARD -s 192.168.0.0/24 -m layerl7 --l7proto pplive -j REJECT
禁止转发来自于192.168.0.0/24网段的主机发起的关于pplive的传输

保存iptables
#service iptables save