iptables 是運作在使用者空間的應用軟體,通過控制 Linux 核心 netfilter 子產品,來管理網絡資料包的處理和轉發。在大部分 Linux 發行版中,可以通過手冊頁 或 man iptables 擷取使用者手冊。通常 iptables 需要核心子產品支援才能運作,此處相應的核心子產品通常是 Xtables。

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
# 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
<M> “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
子產品