Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 使用 iptables connlimit 模組限制單一 IP 對特定埠的連線數

編輯:Linux 教學

在 Linux 伺服器管理中,防止單一 IP 佔用過多連線資源是維護服務穩定的關鍵手段之一。iptables 的 connlimit 模組專為此設計,能精確限制每個來源 IP 對特定埠的並發連線數。然而,許多發行版預設未編譯此模組,需手動安裝編譯。本文將完整記錄從下載原始碼、打補丁、編譯核心模組到最終載入測試的完整流程,助您快速部署連線數限制策略。

一、準備工作:下載原始碼套件

首先取得 iptables 核心原始碼與 patch-o-matic-ng 補丁工具。建議在 /usr/src 或自訂目錄下操作:

# wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.0.tar.bz2
# wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20080214.tar.bz2
# tar xjf iptables-1.4.0.tar.bz2
# tar xjf patch-o-matic-ng-20080214.tar.bz2

二、下載並應用 connlimit 補丁

進入 patch-o-matic-ng 目錄,指定核心與 iptables 原始碼路徑,執行 runme -download 取得外部補丁(含 connlimit):

# cd patch-o-matic-ng-20080214
# KERNEL_DIR=/usr/src/kernels/2.6.18-128.el5-x86_64 \
  IPTABLES_DIR=/usr/iptablestest/iptables-1.4.0 \
  ./runme -download

輸出中會顯示 Successfully downloaded external patch connlimit 等訊息。接著應用補丁:

# KERNEL_DIR=/usr/src/kernels/2.6.18-128.el5-x86_64 \
  IPTABLES_DIR=/usr/iptablestest/iptables-1.4.0 \
  ./runme connlimit

提示 Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] 時輸入 y 確認。

三、配置核心編譯選項

進入核心原始碼目錄,啟用 CONFIG_IP_NF_MATCH_CONNLIMIT 選項:

# cd /usr/src/kernels/2.6.18-128.el5-x86_64
# make oldconfig

在互動式配置中,遇到 Connections/IP limit match support (IP_NF_MATCH_CONNLIMIT) [N/m/?] (NEW) 時輸入 m 將其編譯為模組。亦可使用 make menuconfig 在 Networking → Networking options → Network packet filtering → IP: Netfilter Configuration 中找到同樣選項設為 M。

四、編譯與安裝核心模組

備份原有 Makefile 並建立新的模組編譯規則:

# mv net/ipv4/netfilter/Makefile net/ipv4/netfilter/Makefile.bak
# cat > net/ipv4/netfilter/Makefile <<'EOF'
obj-m := ipt_connlimit.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
	$(MAKE) -C $(KDIR) M=$(PWD) modules
EOF

執行編譯:

# make M=net/ipv4/netfilter/

成功後會產生 ipt_connlimit.ko,複製至模組目錄並設定權限:

# cp net/ipv4/netfilter/ipt_connlimit.ko /lib/modules/2.6.18-128.el5/kernel/net/ipv4/netfilter/
# chmod 744 /lib/modules/2.6.18-128.el5/kernel/net/ipv4/netfilter/ipt_connlimit.ko

五、載入模組並驗證

# depmod -a
# modprobe ipt_connlimit
# lsmod | grep ipt_connlimit

若輸出顯示模組已載入,即代表安裝成功。此後即可使用 iptables -m connlimit --connlimit-above N -j REJECT 等規則限制單 IP 連線數。

六、實戰範例:限制 HTTP 埠每 IP 最多 20 連線

# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
# iptables-save > /etc/sysconfig/iptables

搭配 --connlimit-mask 可針對 IPv4 /24 或 IPv6 /64 網段整體限制,彈性應對 NAT 環境或網吧用戶群。

Copyright © Windows教程網 All Rights Reserved