查看: 1885|回复: 13

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

  [复制链接]

9

主题

532

帖子

3653

积分

实习版主

Rank: 12Rank: 12Rank: 12

贡献
0
技术
2
活跃
608
在线时间
67 小时
发表于 2014-8-24 15:11:18 | 显示全部楼层 |阅读模式

本文将以实例分析的方式简单介绍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} -D num
  • #删除{filter|nat}表中的第num条规则
  • iptables -P {INPUT|OUTPUT|FORWARD|PREROUTING|POSTROUING}  {DROP|REJECT|ACCEPT}
  • #设置5种链的的3中策略
  • service iptables save
  • #保存当前iptables,保存路径为/etc/sysconfig/iptables

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

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

方法1:

  • echo 1 > /pro/sys/net/ipv4/ip_forward
  • #此法重启后失效

方法2:

  • vim /etc/sysctl
  • net.ipv4.ip_forward = 1
  • #将此项值设置成1
  • service network restart
  • #此法永久生效

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

  • iptables -t filter -A INPUT    -s 192.168.0.0/24 -d 192.168.0.71 -p tcp --dport 22 -j ACCEPT  
  • #filter表,INPUT链,从192.168.0.0/24网段,到192.168.0.71主机,基于tcp协议,目标端口22,采取动作ACCEPT   
  • iptables -t filter -A OUTPUT -s 192.168.0.71 -d 192.168.0.0/24 -p tcp --sport 22 -j ACCEPT
  • #filter表,OUTPUT链,从192.168.0.70主机,到192.168.0.0/24网段,基于tcp协议,源端口22,采取动作ACCEPT
  • 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 192.168.0.70 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  • #此时改写链使用-R(replace)设置状态为established的响应请求全部放行  
  • intables -R OUTPUT 1 -p tcp -m state --state ESTABLISHED -j ACCEPT
  • #响应状态 -s源地址 -d目的地址 不做限定(即只要是established状态的包output一律放行)

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

  • iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dprot 53 -j DROP           
  • #filter表,INPUT链,来自172.160.0.0/16网段,使用UDP协议,目标端口号53,采取动作 DROP

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

  • iptables -A  PREROUTING –p tcp --dport 110 –j ACCEPT
  • iptebles -A  PREROUTING –p tcp --dport 25 –j ACCEPT
  • iptables -A  FORWARD –p tcp --dport 110 –j ACCEPT
  • iptables -A  FORWARD –p tcp --sport 110 –j ACCEPT
  • iptables -A  FORWARD –p tcp --dport 25 –j ACCEPT
  • iptables -A  FORWARD –p tcp --sport 25 –j ACCEPT
  • #邮件接收使用TCP110接口;邮件发送使用TCP25,放行数据转发。

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

源地址转换:

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

  • iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 123.1.1.123
  • #将192.168.0.0/24网段的地址作为源地址转换成123.1.1.123

地址伪装源地址转换:

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

  • iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
  • #将192.168.0.0/24 网段的所有地址作为源地址转换成公网地址

目的地址转换:

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

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

三、常用模块扩展

iprange:地址范围匹配

  • 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
  • #限制源地址与目的地址的区间

multipoint:多端口匹配

  • iptables -A FORWARD -p tcp -m multipoint --destination-ports 22,25,80,110 -m state --state NEW,ESTABLISHED -j ACCEPT
  • #凡是目的端口匹配,状态匹配的就允许传输

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

  • iptableis -A FORWARD -m string --string "xxxx.com" --algo bm -j REJECT
  • #屏蔽含有xxxx.com的内容

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

  • iptables -A INPUT -d 192.168.0.1 -p tcp --dport 22 -j LOG --log-prefix "SSH LOG:"
  • #开启日志功能,并在每条日志前加上关机字符串
  • iptables -A INPUT -d 192.168.0.1 -p tcp --dport 22 -m limit 6/minute -j LOG --log-prefix "SSH LOG:"
  • #限制写入日志的频率每分钟6个

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

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

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

  • tar xvf linux-2.6.28.10.tar.gz -C /usr/src
  • cd /usr/src
  • ln -vs linux-2.6.28.10 linux
  • cd linux

2.给内核打入netfilter补丁

  • tar xvf netfilter-layer7-v2.22.tar.gz  -C /usr/src
  • cd /usr/src/linux
  • patch -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   
  • make menuconfig
  • #打开配置界面

【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

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

  • make
  • make modules_install
  • make install

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

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

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

5.卸载原有的iptables软件包

  • rpm -e --nodeps iptables-ipv6 iptables iptstate  
  • #忽略关联形式卸载原iptables

6.安装新的iptables

  • tar xvf iptables-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
  • #编译iptables
  • make  
  • make install

7.安装l7-protocol

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

  • tar xvf l7-protocols.tar.gz  
  • cd l7-protocols
  • make install  
  • #解压并安装

/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/

重启服务

  • service iptables restart

添加控制

  • iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto qq -j REJECT
  • #禁止内网用户使用qq通信
  • iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto edonkey -j REJECT
  • #禁止内网用户使用电驴
  • iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto bittorrent -j REJECT
  • #禁止内网用户使用bt
  • iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto xunlei -j REJECT
  • #禁止内网用户使用迅雷
  • iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto msnmessenger -j REJECT
  • #禁止内网用户使用MSN
  • iptables -A FORWARD -s 192.168.10.0/24 -m layerl7 --l7proto pplive -j REJECT
  • #禁止内网用户使用pplive

保存iptables

  • service iptables save

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

3

主题

266

帖子

1515

积分

Gib

Rank: 5Rank: 5

贡献
0
技术
0
活跃
365
在线时间
33 小时
发表于 2014-8-25 08:28:22 | 显示全部楼层
谢谢谢谢谢谢谢谢谢谢谢谢

9

主题

6098

帖子

4万

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
6
技术
32
活跃
6770
在线时间
1443 小时
发表于 2014-8-26 11:03:19 | 显示全部楼层
不错,写的很详细,学习了

1

主题

128

帖子

839

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
0
技术
0
活跃
99
在线时间
19 小时
擅长技术
思科华为
发表于 2014-12-29 15:14:17 | 显示全部楼层
虚拟化,据库,程学习就在www.santongit.com

1

主题

739

帖子

4956

积分

论坛贵宾VIP-永久权限

Rank: 8Rank: 8

贡献
0
技术
0
活跃
716
在线时间
109 小时
发表于 2017-9-22 10:56:47 | 显示全部楼层
三通IT是个好地方!

0

主题

4866

帖子

3万

积分

Cib

Rank: 13Rank: 13Rank: 13Rank: 13

贡献
0
技术
0
活跃
5684
在线时间
622 小时
擅长技术
LINUX
发表于 2017-11-21 22:44:19 | 显示全部楼层
谢谢楼主分享

1

主题

1002

帖子

6789

积分

Yib

Rank: 10Rank: 10Rank: 10

贡献
0
技术
0
活跃
1364
在线时间
82 小时
发表于 2020-12-29 08:33:12 | 显示全部楼层
哒哒哒哒哒哒多多多多多

1

主题

1002

帖子

6789

积分

Yib

Rank: 10Rank: 10Rank: 10

贡献
0
技术
0
活跃
1364
在线时间
82 小时
发表于 2020-12-29 08:36:06 | 显示全部楼层
哒哒哒哒哒哒多多

1

主题

1002

帖子

6789

积分

Yib

Rank: 10Rank: 10Rank: 10

贡献
0
技术
0
活跃
1364
在线时间
82 小时
发表于 2020-12-29 08:36:56 | 显示全部楼层
哒哒哒哒哒哒多多多多多
使用 高级模式(可批量传图、插入视频等)
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表