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

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

iptables是linux中的一款强大的防火墙工具,它通过设置定义规则来实现控制网页通信的作用。由其访问控制的实现,主要是依靠filter表、nat表和mangle表配合五条netfilter链的协同作用,下面简单介绍一下他们作用以及对应关系:

filter用于一般的ip数据包过滤,包含input链、output链和forward链;

nat表的作用转发ip数据包,包含prerouting链、postrouting链和output链。

forward:通过防火墙转发数据;

input:外部访问本机应用程序;

output:本机应用程序向外部发起的访问;

prerouting:定义数据包在进入防火墙且在控制规则生效之前;

postrouting:定义数据包进入防火墙在向外转发之前。

由于iptables本身带有强大的说明文档,命令的具体使用细节这几就不在赘述,只对几个常用的命令进行介绍:

iptables-t{filter|nat}-L-n#查看当前{filter|nat}表iptables-t{filter|nat}t-L-n#查看当前{filter|nat}表;若后跟--line-number可以查看行号iptables-t{filter|nat}-F#清空所有{filter|nat}表规则iptables-t{filter|nat}-Dnum#删除{filter|nat}表中的第num条规则iptables-P{INPUT|OUTPUT|FORWARD|PREROUTING|POSTROUING}{DROP|REJECT|ACCEPT}#设置5种链的的3中策略serviceiptablessave#保存当前iptables,保存路径为/etc/sysconfig/iptables

一、访问控制简单实例分析

首先开启防火墙的路由功能

方法1:

echo1 /pro/sys/net/ipv4/ip_forward#此法重启后失效

方法2:

vim/etc/sysctlnet.ipv4.ip_forward=1#将此项值设置成1servicenetworkrestart#此法永久生效

实例1:允许192.168.0.0/24访问防火墙的SSH服务

iptables-tfilter-AINPUT-s192.168.0.0/24-d192.168.0.71-ptcp--dport22-jACCEPT#filter表,INPUT链,从192.168.0.0/24网段,到192.168.0.71主机,基于tcp协议,目标端口22,采取动作ACCEPTiptables-tfilter-AOUTPUT-s192.168.0.71-d192.168.0.0/24-ptcp--sport22-jACCEPT#filter表,OUTPUT链,从192.168.0.70主机,到192.168.0.0/24网段,基于tcp协议,源端口22,采取动作ACCEPTiptables-PINPUTDROP#设置INPUT策略:DROPiptables-POUTPUTDROP#设置OUTPUT策略:DROP

实例2:允许状态是new和established的访问web服务

iptables-RINPUT2-s192.168.0.0/24-d192.168.0.70-ptcp--dport80-mstate--stateNEW,ESTABLISHED-jACCEPT#此时改写链使用-R(replace)设置状态为established的响应请求全部放行intables-ROUTPUT1-ptcp-mstate--stateESTABLISHED-jACCEPT#响应状态-s源地址-d目的地址不做限定(即只要是established状态的包output一律放行)

实例3:拒绝所有192.168.0.0/16网段client来访问DNS解析服务的用户

iptables-tfilter-AINPUT-s172.16.0.0/16-pudp--dprot53-jDROP#filter表,INPUT链,来自172.160.0.0/16网段,使用UDP协议,目标端口号53,采取动作DROP

实例4:让内网用户可以相互发邮件

iptables-APREROUTING ptcp--dport110 jACCEPTiptebles-APREROUTING ptcp--dport25 jACCEPTiptables-AFORWARD ptcp--dport110 jACCEPTiptables-AFORWARD ptcp--sport110 jACCEPTiptables-AFORWARD ptcp--dport25 jACCEPTiptables-AFORWARD ptcp--sport25 jACCEPT#邮件接收使用TCP110接口;邮件发送使用TCP25,放行数据转发。

二、iptables实现源地址转换以及目的地址转换

源地址转换:

作用:实现多个内网主机共同使用一个公网IP地址与公网通信。

iptables-tnat-APOSTROUTING-s192.168.0.0/24-jSNAT--to-source123.1.1.123#将192.168.0.0/24网段的地址作为源地址转换成123.1.1.123

地址伪装源地址转换:

作用:使用ADSL拨号上网用户的IP都是由ISP随即分配,所以上述固定外网IP的情况就不在适用了,使用地址伪装能够自动匹配外网ip并实现源地址转换。

iptables-tnat-APOSTROUTING-s192.168.0.0/24-jMASQUERADE#将192.168.0.0/24网段的所有地址作为源地址转换成公网地址

目的地址转换:

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

iptables-tnat-APREROUTING-d123.1.1.123-ptcp--dport80-jDNAT--to-destination192.168.0.72#将外网的web访问请求(80端口)通过DNAT转发至内网web服务器192.168.0.72iptables-tnat-APREROUTING-d123.1.1.123-ptcp--dport22-jDNAT--to-destination192.168.0.73#将外网的ssh访问请求(22端口)通过DNAT转发至内网ssh服务器192.168.0.73iptables-tnat-APREROUTING-d123.1.1.123-pudp--dport53-jDNAT--to-destination192.168.0.74#将外网的DNS解析请求(53端口)通过DNAT转发至内网DNS服务器192.168.0.74iptables-AFORWARD-mstate--stateESTABLISHED-jACCEPT#转发所有状态为ESTABLISHED的数据包

三、常用模块扩展

iprange:地址范围匹配

iptables-AFORWARD-miprange--src-range162.168.0.1-192.168.0.100--dst-range172.16.0.1-172.16.0.100-jACCEPT#限制源地址与目的地址的区间

multipoint:多端口匹配

iptables-AFORWARD-ptcp-mmultipoint--destination-ports22,25,80,110-mstate--stateNEW,ESTABLISHED-jACCEPT#凡是目的端口匹配,状态匹配的就允许传输

string:传输内容中字符串匹配

iptableis-AFORWARD-mstring--string xxxx.com --algobm-jREJECT#屏蔽含有xxxx.com的内容

传输日志功能启用:日志的向磁盘的写入会大大消耗系统资源,建议生产环境中关闭此功能。

iptables-AINPUT-d192.168.0.1-ptcp--dport22-jLOG--log-prefix SSHLOG: #开启日志功能,并在每条日志前加上关机字符串iptables-AINPUT-d192.168.0.1-ptcp--dport22-mlimit6/minute-jLOG--log-prefix SSHLOG: #限制写入日志的频率每分钟6个

四、使用l7-filter模块控制特定的应用程序访问网络

下面的内容旨在通过编译内核加入l7-filter模块,从而使iptables按照应用程序的特征来实现控制功能。

1.解压内核并创建软连接

tarxvflinux-2.6.28.10.tar.gz-C/usr/srccd/usr/srcln-vslinux-2.6.28.10linuxcdlinux

2.给内核打入netfilter补丁

tarxvfnetfilter-layer7-v2.22.tar.gz-C/usr/srccd/usr/src/linuxpatch-p1 /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch

3.配置内核编译选项

若您不清楚内核的基本配置选择策略,建议复制当前系统配置文件,并以此为蓝本完成本次内核编译。

cp/boot/config-您当前内核版本 /usr/src/linux/.config 

makemenuconfig #打开配置界面

【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

上述模块配置完成后保存退出配置界面

makemakemodules_installmakeinstall

编译安装完成后,重启在grub界面会出现新内核Title,选择并进入新内核系统。

4.备份iptables的配置文件和服务脚本

cp/etc/init.d/iptables~/cp/etc/sysconfig/iptables-config~/#全部备份到root目录方便查找

5.卸载原有的iptables软件包

rpm-e--nodepsiptables-ipv6iptablesiptstate#忽略关联形式卸载原iptables

6.安装新的iptables

tarxvfiptables-1.4.6.tar.gz-C/usr/src#解压iptables文件到指定目录cp/usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/*/usr/src/iptables-1.4.6/extensions/#将之前解压的netfilter中的两个文件复制到对应iptables的目录中去cd/usr/src/iptables-1.4.6./configure--prefix=/usr--with-ksource=/usr/src/linux#编译iptablesmakemakeinstall

7.安装l7-protocol

它用于定义iptables可以识别哪些应用程序的特征

tarxvfl7-protocols.tar.gzcdl7-protocolsmakeinstall#解压并安装

/etc/l7-protocols/protocols定义了所有能够限制的应用程序

8.将备份的服务控制脚本复制回去

cp/root/iptables/etc/init.d/vim/etc/init.d/iptables:%s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g#全局正则表达式查找替换将原路径换成新路径

9.复制iptables的配置文件

cp/root/iptables-config/etc/sysconfig/

重启服务

serviceiptablesrestart

添加控制

iptables-AFORWARD-s192.168.10.0/24-mlayerl7--l7protoqq-jREJECT#禁止内网用户使用qq通信iptables-AFORWARD-s192.168.10.0/24-mlayerl7--l7protoedonkey-jREJECT#禁止内网用户使用电驴iptables-AFORWARD-s192.168.10.0/24-mlayerl7--l7protobittorrent-jREJECT#禁止内网用户使用btiptables-AFORWARD-s192.168.10.0/24-mlayerl7--l7protoxunlei-jREJECT#禁止内网用户使用迅雷iptables-AFORWARD-s192.168.10.0/24-mlayerl7--l7protomsnmessenger-jREJECT#禁止内网用户使用MSNiptables-AFORWARD-s192.168.10.0/24-mlayerl7--l7protopplive-jREJECT#禁止内网用户使用pplive

保存iptables

serviceiptablessave

关于iptables的配置和使用就先写到这里,以上内容在您实现过程中出现的任何问题,欢迎在此交流; 并请各位高手前辈大神达人予以批评指正,谢谢!

融入银河,就安谧地和明月为伴照亮长天;没入草莽,

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

相关文章:

你感兴趣的文章:

标签云: