使用Iptables進(jìn)行并發(fā)連接限制
用Iptables進(jìn)行并發(fā)連接限制:
Iptables是一個(gè)內(nèi)核狀態(tài)的防火墻,也就是說(shuō)它是Linux內(nèi)核的一部分,所以它的功能異常強(qiáng)大,效率非常高。
進(jìn)入/usr/src/linux-2.6.18.8進(jìn)行內(nèi)核編譯。
- cd /usr/src/linux-2.6.18.8
make mrproper #確保源代碼目錄下沒(méi)有不正確的.o文件
make menuconfig #內(nèi)核配置,這步最重要,成不成在此一舉呀。這是編譯內(nèi)核最麻煩的地方,不是特別熟悉的話最好先看看這些選項(xiàng)的意思,最好是把SELinux給關(guān)掉。如果是用vmware虛擬機(jī)的話,記住一定要選中SCSI里的LSI Logic和BusLogic相關(guān)的驅(qū)動(dòng)。
- make
- make modules_install
- depmod –a #生成模塊依賴關(guān)系
到這里我們就編譯完成了新的內(nèi)核,下面就是配置使用用新的內(nèi)核啟動(dòng)。
- cp /usr/src/linux-2.6.18.8/arch/i386/boot/bzImage /boot/ vmlinuz-2.6.18.8 #壓縮的內(nèi)核文件
- 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 #把一些系統(tǒng)啟動(dòng)時(shí)需要的模塊打包
添加新的啟動(dòng)項(xiàng),用新的內(nèi)核啟動(dòng)系統(tǒng),這里可以參照原有的啟動(dòng)配置項(xiàng)進(jìn)行設(shè)置,示例:
用vi /etc/grub.conf打開(kāi)文件,加入如下內(nèi)容:
- 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
重新啟動(dòng)計(jì)算機(jī),在啟動(dòng)菜單選擇我們使用剛才新添加的啟動(dòng)項(xiàng),啟動(dòng)新的內(nèi)核。
相對(duì)于2.4的內(nèi)核來(lái)說(shuō)我感覺(jué)2.6的內(nèi)核編譯起來(lái)更容易些,一般不會(huì)出現(xiàn)什么太大的問(wèn)題,編譯完成后能夠正常的啟動(dòng)。
Iptables有許多模塊,一些不成熟的模塊是以patch-o-matic的形式存在的,個(gè)人理解就是內(nèi)核補(bǔ)丁。等這些模塊代碼成熟后就后直接加入內(nèi)核。這里我們介紹一個(gè)限制每個(gè)IP并發(fā)連接的模塊,就connlimit,這個(gè)模塊還是以patch-o-matic的形式存在的,所以如果我們想要使用這個(gè)模塊需要以內(nèi)核補(bǔ)丁的形式加入到內(nèi)核源碼中,然后再通過(guò)編譯內(nèi)核,把它們編譯成內(nèi)核模塊的形式使用。
下面我們以linux-2.6.18-8+Iptables-1.3.7為主來(lái)說(shuō)說(shuō)編譯內(nèi)核使用connlimit。為什么要用linux-2.6.18-8內(nèi)核呢?因?yàn)槟壳白盍餍械腞edHat最新企業(yè)版本也就是5.0版本使用的就是2.6.18-8內(nèi)核,這對(duì)后面升級(jí)操作系統(tǒng)后使用這個(gè)功能可能更方便一點(diǎn)。
軟件下載后,可以通過(guò)SSH文件傳輸客戶端把它們上傳到Linux的/usr/src目錄下,然后進(jìn)行解壓,命令如下:
- 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
進(jìn)入patch-o-matic-ng,為內(nèi)核打補(bǔ)?。?/P>
- 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
重新進(jìn)入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
現(xiàn)在就可以進(jìn)行設(shè)置試一下了,輸入以下命令:
- iptables –A INPUT –p tcp –dport 22 –m connlimit –connlimit-above 2 –j REJECT
這條命令是允許每個(gè)IP最多有2個(gè)連接到本機(jī)的22端口。
好了,趕快用SSH試一下吧,看看超過(guò)兩個(gè)連接還能不能連接上。
另外,網(wǎng)上有人提供了RHEL4.4的connlimit RPM包,直接安裝上就可以使用,不過(guò)這些包都基于特定內(nèi)核的,所以下載的時(shí)候一定要先用:uname –r看一下自己的內(nèi)核版本,下載適合自己內(nèi)核版本的RPM包。
【編輯推薦】