实例简释iptables + l7-filter配置及使用

本文将以实例分析的方式简单介绍iptables实现防火墙,源/目的地址转换,iptables拓展模块,以及通过重新编译内核凭借l7-filter模块过滤QQ、迅雷等应用程序通信等内容。 52b*[tZ  
iptables是linux中的一款强大的防火墙工具,它通过设置定义规则来实现控制网页通信的作用。由其访问控制的实现,主要是依靠filter表、nat表和mangle表配合五条netfilter链的协同作用,下面简单介绍一下他们作用以及对应关系: 
filter用于一般的ip数据包过滤,包含input链、output链和forward链; 
nat表的作用转发ip数据包,包含prerouting链、postrouting链和output链。 
forward:通过防火墙转发数据; 
input:外部访问本机应用程序; 
output:本机应用程序向外部发起的访问; 
prerouting:定义数据包在进入防火墙且在控制规则生效之前; 
postrouting:定义数据包进入防火墙在向外转发之前。 
实例简释iptables + l7-filter配置及使用_第1张图片 
由于iptables本身带有强大的说明文档,命令的具体使用细节这几就不在赘述,只对几个常用的命令进行介绍:
cZ(elZ0~ 2-"0 ^n{ @^;j)%F} s TOa DhX#E& M;0]u.D*= v^ /Q 8Q :> &�fV kPQtQh]y%
  1. iptables -t {filter|nat} -L -n
  2. #查看当前{filter|nat}表
  3. iptables -t {filter|nat}t -L  -n
  4. #查看当前{filter|nat}表;若后跟--line-number可以查看行号
  5. iptables -t {filter|nat} -F
  6. #清空所有{filter|nat}表规则
  7. iptables -t {filter|nat} -D num
  8. #删除{filter|nat}表中的第num条规则

  9. iptables -P {INPUT|OUTPUT|FORWARD|PREROUTING|POSTROUING}  {DROP|REJECT|ACCEPT}
  10. #设置5种链的的3中策略

  11. service iptables save
  12. #保存当前iptables,保存路径为/etc/sysconfig/iptables
Qj3a_p$)P  
一、访问控制简单实例分析 
首先开启防火墙的路由功能 
方法1:
!r`,�=jK" 7},)]da>,'
  1. echo 1 > /pro/sys/net/ipv4/ip_forward
  2. #此法重启后失效
2DB7+aZ*  
方法2:
  1. vim /etc/sysctl
  2. net.ipv4.ip_forward = 1
  3. #将此项值设置成1
  4. service network restart
  5. #此法永久生效
4O:W#bx  
实例1:允许192.168.0.0/24访问防火墙的SSH服务
  1. iptables -t filter -A INPUT    -s 192.168.0.0/24 -d 192.168.0.71 -p tcp --dport 22 -j ACCEPT  
  2. #filter表,INPUT链,从192.168.0.0/24网段,到192.168.0.71主机,基于tcp协议,目标端口22,采取动作ACCEPT  
  3. iptables -t filter -A OUTPUT -s 192.168.0.71 -d 192.168.0.0/24 -p tcp --sport 22 -j ACCEPT
  4. #filter表,OUTPUT链,从192.168.0.70主机,到192.168.0.0/24网段,基于tcp协议,源端口22,采取动作ACCEPT A/7X9ir  
  5. iptables -P INPUT DROP  
  6. #设置INPUT策略:DROP
  7. iptables -P OUTPUT DROP
  8. #设置OUTPUT策略:DROP
tX!n sm1  
实例2:允许状态是new和established的访问web服务
  1. iptables -R INPUT 2 -s 192.168.0.0/24 -d 192.168.0.70 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  2. #此时改写链使用-R(replace)设置状态为established的响应请求全部放行  
  3. intables -R OUTPUT 1 -p tcp -m state --state ESTABLISHED -j ACCEPT
  4. #响应状态 -s源地址 -d目的地址 不做限定(即只要是established状态的包output一律放行)
`]LSbS  
实例3:拒绝所有192.168.0.0/16网段client来访问DNS解析服务的用户
  1. iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dprot 53 -j DROP          
  2. #filter表,INPUT链,来自172.160.0.0/16网段,使用UDP协议,目标端口号53,采取动作 DROP
/m( =`aRt  
实例4:让内网用户可以相互发邮件
  1. iptables -A  PREROUTING –p tcp --dport 110 –j ACCEPT
  2. iptebles -A  PREROUTING –p tcp --dport 25 –j ACCEPT
  3. iptables -A  FORWARD –p tcp --dport 110 –j ACCEPT
  4. iptables -A  FORWARD –p tcp --sport 110 –j ACCEPT
  5. iptables -A  FORWARD –p tcp --dport 25 –j ACCEPT
  6. iptables -A  FORWARD –p tcp --sport 25 –j ACCEPT
  7. #邮件接收使用TCP110接口;邮件发送使用TCP25,放行数据转发。
,-+"^>  
二、iptables实现源地址转换以及目的地址转换 
源地址转换: 
作用:实现多个内网主机共同使用一个公网IP地址与公网通信。
cpt<WK} ?:|-Dq,
  1. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 123.1.1.123
  2. #将192.168.0.0/24网段的地址作为源地址转换成123.1.1.123
T6pLoaKu  
地址伪装源地址转换: 
作用:使用ADSL拨号上网用户的IP都是由ISP随即分配,所以上述固定外网IP的情况就不在适用了,使用地址伪装能够自动匹配外网ip并实现源地址转换。
v+e|o:o#
  1. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
  2. #将192.168.0.0/24 网段的所有地址作为源地址转换成公网地址
;. wX@  
目的地址转换: 
作用:实现公网用户通过公网地址,访问内网服务器。
M(d6Z2ibh
  1. iptables -t nat -A PREROUTING -d 123.1.1.123 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.72    
  2. #将外网的web访问请求(80端口)通过DNAT转发至内网web服务器192.168.0.72
  3. iptables -t nat -A PREROUTING -d 123.1.1.123 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.73    
  4. #将外网的ssh访问请求(22端口)通过DNAT转发至内网ssh服务器192.168.0.73  
  5. iptables -t nat -A PREROUTING -d 123.1.1.123 -p udp --dport 53 -j DNAT --to-destination 192.168.0.74    
  6. #将外网的DNS解析请求(53端口)通过DNAT转发至内网DNS服务器192.168.0.74
  7. iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
  8. #转发所有状态为ESTABLISHED的数据包
7O`o ovW$  
 
三、常用模块扩展 
iprange:地址范围匹配
)2DQ>cm Z+pom7A"E
  1. iptables -A FORWARD -m iprange --src-range 162.168.0.1-192.168.0.100 --dst-range 172.16.0.1-172.16.0.100 -j ACCEPT
  2. #限制源地址与目的地址的区间
'cNKjL;  
multipoint:多端口匹配
  1. iptables -A FORWARD -p tcp -m multipoint --destination-ports 22,25,80,110 -m state --state NEW,ESTABLISHED -j ACCEPT
  2. #凡是目的端口匹配,状态匹配的就允许传输
5efxEt>U  
string:传输内容中字符串匹配
  1. iptableis -A FORWARD -m string --string "xxxx.com" --algo bm -j REJECT
  2. #屏蔽含有xxxx.com的内容
m,')&{Rd  
传输日志功能启用:日志的向磁盘的写入会大大消耗系统资源,建议生产环境中关闭此功能。
  1. iptables -A INPUT -d 192.168.0.1 -p tcp --dport 22 -j LOG --log-prefix "SSH LOG:"
  2. #开启日志功能,并在每条日志前加上关机字符串
  3. iptables -A INPUT -d 192.168.0.1 -p tcp --dport 22 -m limit 6/minute -j LOG --log-prefix "SSH LOG:"
  4. #限制写入日志的频率每分钟6个
Jdy <w&S  
四、使用l7-filter模块控制特定的应用程序访问网络 
下面的内容旨在通过编译内核加入l7-filter模块,从而使iptables按照应用程序的特征来实现控制功能。 
1.解压内核并创建软连接
=2y8 CgLj i#X!#vyc Fg/dS6=n`?  
  1. tar xvf linux-2.6.28.10.tar.gz -C /usr/src
  2. cd /usr/src
  3. ln -vs linux-2.6.28.10 linux
  4. cd linux
e75UMWaeC  
2.给内核打入netfilter补丁
  1. tar xvf netfilter-layer7-v2.22.tar.gz  -C /usr/src
  2. cd /usr/src/linux
  3. patch -p1 < /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch  
a;$P:C{gj?  
3.配置内核编译选项
dSIH9D  
Je4Z(kj 0  
若您不清楚内核的基本配置选择策略,建议复制当前系统配置文件,并以此为蓝本完成本次内核编译。
  1. cp /boot/config-您当前内核版本  /usr/src/linux/.config  
  1. make menuconfig
  2. #打开配置界面  
>EXb|vw  
 
【Networking support】 → 【Networking Options】 → 【Network packet filtering framework】 →【Code Netfilter Configuration】 
<M>  Netfilter connection tracking support  
<M>  “layer7” match support 
<M>  “string” match support 
<M>  “time”  match support 
<M>  “iprange”  match support 
<M>  “connlimit”  match support 
<M>  “state”  match support 
<M>  “conntrack”  connection  match support 
<M>  “mac”  address  match support 
<M>   "multiport" Multiple port match support 
【Networking support】 → 【Networking Options】 →【Network packet filtering framework】 → 【IP: Netfilter Configuration】 
<M> IPv4 connection tracking support (required for NAT) 
<M> Full NAT 
<M> MASQUERADE target support                                                        
<M> NETMAP target support                                                          
<M> REDIRECT target support  
上述模块配置完成后保存退出配置界面
+Ra3bj�l [ neXFp}S gLL-VvJ[ 5 waw`F >+cVs: }tST)=M` h5|.Et YpdNX.P, c\cZ]RZ f?Bj _z NWmtwS+@ OIaYHA U;�xF#e }dSFAKI2dM ^E>CGGS4 sDiHXDI_m Edt}",s7 �S;@ay/*~
  1. make
  2. make modules_install
  3. make install
0.(<'!"y  
编译安装完成后,重启在grub界面会出现新内核Title,选择并进入新内核系统。 
4.备份iptables的配置文件和服务脚本
X} JOX9pK
  1. cp /etc/init.d/iptables ~/
  2. cp /etc/sysconfig/iptables-config ~/
  3. #全部备份到root目录方便查找
-rY 7)=  
5.卸载原有的iptables软件包
  1. rpm -e --nodeps iptables-ipv6 iptables iptstate  
  2. #忽略关联形式卸载原iptables
):6 -  
6.安装新的iptables
  1. tar xvf iptables-1.4.6.tar.gz -C /usr/src
  2. #解压iptables文件到指定目录
  3. cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* /usr/src/iptables-1.4.6/extensions/
  4. #将之前解压的netfilter中的两个文件复制到对应iptables的目录中去
  5. cd /usr/src/iptables-1.4.6
  6. ./configure --prefix=/usr --with-ksource=/usr/src/linux
  7. #编译iptables
  8. make  
  9. make install
QocQowz  
 
7.安装l7-protocol 
它用于定义iptables可以识别哪些应用程序的特征
H/cTJ9zz jMpa?Jp�1
  1. tar xvf l7-protocols.tar.gz  
  2. cd l7-protocols
  3. make install  
  4. #解压并安装
*v #/Y9}  
/etc/l7-protocols/protocols定义了所有能够限制的应用程序 
实例简释iptables + l7-filter配置及使用_第2张图片 
8.将备份的服务控制脚本复制回去
T |"`8mG 3o8\/-*<
  1. cp /root/iptables /etc/init.d/
  2. vim /etc/init.d/iptables
  3. :%s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g
  4. #全局正则表达式查找替换将原路径换成新路径
$B _Nc*_e  
9.复制iptables的配置文件
  1. cp /root/iptables-config /etc/sysconfig/
f$D@*33ft  
重启服务
  1. service iptables restart
79ZxqvB\  
添加控制
  1. iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto qq -j REJECT
  2. #禁止内网用户使用qq通信
  3. iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto edonkey -j REJECT
  4. #禁止内网用户使用电驴
  5. iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto bittorrent -j REJECT
  6. #禁止内网用户使用bt
  7. iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto xunlei -j REJECT
  8. #禁止内网用户使用迅雷
  9. iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto msnmessenger -j REJECT
  10. #禁止内网用户使用MSN
  11. iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto pplive -j REJECT
  12. #禁止内网用户使用pplive
-0|K,k  
保存iptables
  1. *TnzkNN_,  
    service iptables save  
    @ ^. *$E5
关于iptables的配置和使用就先写到这里,以上内容在您实现过程中出现的任何问题,欢迎在此交流; 并请各位高手前辈大神达人予以批评指正,谢谢! 
本文出自 “ 远 飏 ” 博客,请务必保留此出处http://evolution.blog.51cto.com/3343305/648181
\|q-+4]@,

你可能感兴趣的:(实例简释iptables + l7-filter配置及使用)