iptables 是运行在用户空间的应用软件,通过控制 Linux 内核 netfilter 模块,来管理网络数据包的处理和转发。在大部分 Linux 发行版中,可以通过手册页 或 man iptables 获取用户手册。通常 iptables 需要内核模块支持才能运行,此处相应的内核模块通常是 Xtables。

iptables模块 iptables recent模块_安全

Linux安全之iptables高级特性

1. recent 模块

利用iptables的recent模块来抵御DOS攻击(CC 攻击)

建立一个列表,保存有所有访问过指定的服务的客户端 IP 地址

#1
利用connlimit模块将单IP地址ssh远程连接的并发设置为3
会误杀使用NAT上网的用户,可以根据实际情况增大该值
$ sudo iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
bash
2
利用recent和state模块限制单IP在300s内只能与本机建立2个新连接,被限制五分钟后即可恢复访问
$ sudo iptables -I INPUT -p tcp --dport 22 -m state
–state NEW -m recent --set --name SSH

$ sudo iptables -I INPUT -p tcp --dport 22 -m state
–state NEW -m recent --update --seconds 300 --hitcount 3
–name SSH -j LOG --log-prefix "SSH Attach: "

$ sudo iptables -I INPUT -p tcp --dport 22 -m state
–state NEW -m recent --update --seconds 300 --hitcount 3
–name SSH -j DROP
下面对最后两句做一个说明

1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH
–set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

#2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
–update 是指每次建立连接都更新列表;
–seconds必须与–rcheck或者–update同时使用
–hitcount必须与–rcheck或者–update同时使用

3.iptables的记录:/proc/net/xt_recent/SSH,也可以使用下面的这句记录日志
$ sudo iptables -A INPUT -p tcp --dport 22 -m state
–state NEW -m recent --update --name SSH --second 300
–hitcount 3 -j LOG --log-prefix “SSH Attack”

2. layer7 模块

利用iptables的layer7模块能够识别应用层协议,实现七层访问过滤:对应用层协议进行限制,如微信等。

使用需求

对内核中的netfilter,打补丁layer7,重新编译内核
iptables打补丁,补上layer7模块,重新iptables
编译内核方法

$ sudo make menuconfig
$ sudo make -j xxx
$ sudo make modules_install
$ sudo make install
总结操作步骤

1、获取并编译内核
$ sudo useradd mockbuild
$ sudo rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm
$ sudo cd rpmbuild/SOURCES
$ sudo tar linux-2.6.32-*.tar.gz -C /usr/src
$ sudo cd /usr/src
$ sudo ln -sv

2、给内核打补丁
$ sudo tar xf netfilter-layer7-v2.23.tar.bz2
$ sudo cd /usr/src/linux
$ sudo patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
$ sudo cp /boot/config-* .config
$ sudo make menuconfig

3、按如下步骤启用layer7模块
Networking support → Networking Options →Network packet filtering framework → Core Netfilter Configuration
“layer7” match support

4、编译并安装内核
$ sudo make
$ sudo make modules_install
$ sudo make install

5、重启系统,启用新内核
$ sudo reboot

6、编译iptables
$ sudo tar xf iptables-1.4.20.tar.gz
$ sudo cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/
$ sudo cp /etc/rc.d/init.d/iptales /root
$ sudo cp /etc/sysconfig/iptables-config /root
$ sudo rpm -e iptables iptables-ipv6 --nodeps
$ sudo ./configure --prefix=/usr --with-ksource=/usr/src/linux
$ sudo make && make install
$ sudo cp /root/iptables /etc/rc.d/init.d
$ sudo cp /root/iptables-config /etc/sysconfig

7、为layer7模块提供其所识别的协议的特征码
$ sudo tar zxvf l7-protocols-2009-05-28.tar.gz
$ sudo cd l7-protocols-2009-05-28
$ sudo make install

8、如何使用layer7模块
ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效。
net.netfilter.nf_conntrack_acct = 1
l7-filter uses the standard iptables extension syntax

$ sudo iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action]
$ sudo iptables -A FORWARD -m layer7 --l7proto qq -j REJECT
提示:xt_layer7.ko 依赖于 nf_conntrack.ko 模块

文章作者: Escape