天天看點

Linux安全之iptables進階特性

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

Linux安全之iptables進階特性

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​

​​ 子產品

繼續閱讀