使用Iptables進行并發連接限制
用Iptables進行并發連接限制:
Iptables是一個內核狀態的防火墻,也就是說它是Linux內核的一部分,所以它的功能異常強大,效率非常高。
進入/usr/src/linux-2.6.18.8進行內核編譯。
- cd /usr/src/linux-2.6.18.8
make mrproper #確保源代碼目錄下沒有不正確的.o文件
make menuconfig #內核配置,這步最重要,成不成在此一舉呀。這是編譯內核最麻煩的地方,不是特別熟悉的話最好先看看這些選項的意思,最好是把SELinux給關掉。如果是用vmware虛擬機的話,記住一定要選中SCSI里的LSI Logic和BusLogic相關的驅動。
- make
- make modules_install
- depmod –a #生成模塊依賴關系
到這里我們就編譯完成了新的內核,下面就是配置使用用新的內核啟動。
- cp /usr/src/linux-2.6.18.8/arch/i386/boot/bzImage /boot/ vmlinuz-2.6.18.8 #壓縮的內核文件
- cp /usr/src/linux-2.6.18.8/System.map /boot/System.map-2.6.18.8
- cd /boot
mkinitrd initrd-2.6.18.8.img #把一些系統啟動時需要的模塊打包
添加新的啟動項,用新的內核啟動系統,這里可以參照原有的啟動配置項進行設置,示例:
用vi /etc/grub.conf打開文件,加入如下內容:
- title Linux-2.6.18.8
- root (hd0,0)
- kernel /vmlinuz-2.6.18.8 ro root=LABEL=/ enforcing=0
- initrd /initrd-2.6.18.8.img
重新啟動計算機,在啟動菜單選擇我們使用剛才新添加的啟動項,啟動新的內核。
相對于2.4的內核來說我感覺2.6的內核編譯起來更容易些,一般不會出現什么太大的問題,編譯完成后能夠正常的啟動。
Iptables有許多模塊,一些不成熟的模塊是以patch-o-matic的形式存在的,個人理解就是內核補丁。等這些模塊代碼成熟后就后直接加入內核。這里我們介紹一個限制每個IP并發連接的模塊,就connlimit,這個模塊還是以patch-o-matic的形式存在的,所以如果我們想要使用這個模塊需要以內核補丁的形式加入到內核源碼中,然后再通過編譯內核,把它們編譯成內核模塊的形式使用。
下面我們以linux-2.6.18-8+Iptables-1.3.7為主來說說編譯內核使用connlimit。為什么要用linux-2.6.18-8內核呢?因為目前最流行的RedHat最新企業版本也就是5.0版本使用的就是2.6.18-8內核,這對后面升級操作系統后使用這個功能可能更方便一點。
軟件下載后,可以通過SSH文件傳輸客戶端把它們上傳到Linux的/usr/src目錄下,然后進行解壓,命令如下:
- tax –jxvf linux-2.6.18.8.tar.bz2
- tar –jxvf iptables-1.3.7.tar.bz2
- tar –jxvf patch-o-matic-ng-20070414.tar.bz2
進入patch-o-matic-ng,為內核打補丁:
- cd /usr/src/patch-o-matic-ng-
- ./runme --download
- KERNEL_DIR=/usr/src/linux-2.6.18.8 IPTABLES_DIR=/usr/src/iptables-1.3.7 ./runme connlimit
重新進入Linux后我們就可以編譯安裝Iptables了。
- cd /usr/src/iptables-1.3.7
- export KERNEL_DIR=/usr/src/linux-2.6.18.8
- export IPTABLES_DIR=/usr/src/iptables-1.3.7
- make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
現在就可以進行設置試一下了,輸入以下命令:
- iptables –A INPUT –p tcp –dport 22 –m connlimit –connlimit-above 2 –j REJECT
這條命令是允許每個IP最多有2個連接到本機的22端口。
好了,趕快用SSH試一下吧,看看超過兩個連接還能不能連接上。
另外,網上有人提供了RHEL4.4的connlimit RPM包,直接安裝上就可以使用,不過這些包都基于特定內核的,所以下載的時候一定要先用:uname –r看一下自己的內核版本,下載適合自己內核版本的RPM包。
【編輯推薦】