linuxiptables模块limit和connlimit的区别?系统:CentOS 5.1 内核:2.6.18-53.1.19.el5 iptables 版本 1.3.5(系统自带的) 下载一个内核:linux-2.6.18 解压到/usr/src/linux #cd linux #make mrproper #make menuconfig 什么也不做,退出。 vi Makefile 把EXTRAVERSION = 更改为EXTRAVERSION = -53.1.19.el5 保持跟uname -a 的版本一致 下载一个iptables1.3.5解压到/usr/src/iptables (下面会用到) (下载)patch-o-matic-ng-20080214.tar.bz2 wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.0.tar.bz2 #cd patch-o-matic-ng-20080214 #./runme ——download …… 应用time补丁到内核: 选y ,至此,netfilter的补丁打完了,如果你需要别的模块可以根据需要加上。 编译kernel的modules #cd /usr/src/linux #make menuconfig 在Device Drivers->;Networking support->;Networking options->;Network packet filtering (replaces ipchains) ->;IP: Netfilter Configuration中把下面的两项M选中。 ; TIME match support 保存,退出。 编译安装模块 下面就是最重要的步骤了,因为我们的原则是节省时间,不重新编译内核,而只编译其中的模块,这点2.4的内核跟2.6的内核有所不同,2.4内核的模块是以*.o形式的,而2.6内核是以*.ko形式的, # make modules HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/split-include HOSTCC scripts/basic/docproc HOSTCC scripts/conmakehash HOSTCC scripts/kallsyms CC scripts/empty.o HOSTCC scripts/mk_elfconfig MKELF scripts/elfconfig.h HOSTCC scripts/file2alias.o HOSTCC scripts/modpost.o HOSTCC scripts/sumversion.o HOSTLD scripts/modpost HOSTCC scripts/pnmtologo HOSTCC scripts/bin2c 到这里就可以ctrl+c中止了,因为我们不是要编译所有的模块,这样太浪费时间,而仅仅是netfilter的模块,但是如果你直接执行make modules SUBDIRS=net/ipv4/netfilter就会出错,这就是2.4和2.6的区别,我们先生成了scripts目录下的一系列需要的文件后就可以make modules SUBDIRS=net/ipv4/netfilter,并用modpost等等把*.o文件生成为*.ko文件。 #make modules SUBDIRS=net/ipv4/netfilter 编译完成netfilter的模块后拷贝编译完成的模块 #chmod +x /usr/src/linux/net/ipv4/netfilter/ipt_time.ko # cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.18-53.1.19.el5/kernel/net/ipv4/netfilter/ #depmod -a 或 insmod /usr/src/linux/net/ipv4/netfilter/ipt_time.ko #lsmod | grep ip 此时,能看到以下东东 ipt_time 6400 1 但现在还不能用,还却少libipt_time.so 这个东东 现编译下载的iptables #cd /usr/src/iptables #make KERNEL_DIR=/usr/src/linux # make install KERNEL_DIR=/usr/src/linux (我编译时出现不少警告,错误!) 完了以后, #cp /usr/src/iptables/extensions/libipt_time.so /lib/iptables中 到此结束, iptables -A INPUT -m time ——timestart 8:00 ——timestop 18:00 ——days Mon,Tue,Wed,Thu,Fri
linux下清空iptables规则具体方法如下:
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -F
iptables -X
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t raw -F
iptables -t raw -X
iptables -t raw -P PREROUTING ACCEPT
iptables -t raw -P OUTPUT ACCEPT。
iptables -I INPUT -p tcp –dport目标端口 -m connlimit –connlimit-above 10 -jREJECT这个规则在没有载入任何iptables模块时,是不能用的,会报类似错误:# iptables -IINPUT -p tcp –dport 8000 -m connlimit –connlimit-above 4 -jREJECTiptables: Unknown error 4294967295这个错误表示,系统内核没有connlimit模块支持!因此,就需要将connlimit加入内核支持,也就是需要给内核打补丁,重新编译iptables和系统内核!下面是详细操作过程1:先在
http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
处下载patch-o- matic-ng补丁, 注意最新并且含有connlimit的补丁包好像是patch-o-matic-ng-20060725.tar.bz2,之后的补丁包中都没有connlimit补丁;2:然后下载iptables源代码
http://ftp.netfilter.org/pub/ipt…
.5-20060823.tar.bz2,3:最后下载kernel源代码ftp://
ftp.kernel.org/pub/linux/kernel/v2.6/,
编译
2.4.x
内核一般没有问题,2.6.11以下的似乎也没有什么问题,不过2.6.12开始打补丁时,会提示…的错误。在打完补丁后使用connlimit模块时会报一个奇怪的错误“connlimit match: invalid size0!=16 iptables: Invalid argument”,而且在编译内核模块时有一些警告”signed//unsigned comparision warnings”,不知道是什么原因,只好换一个低版本内核linux-2.6.15.tar.bz2。由于redhat as4的内核默认没有connlimit模块,所以要编译内核,在网上好像有不编译内核给iptables添加模块的办法,但我没成功,只好老老实实编译内核。4:操作开始:#cppatch-o-matic-ng-20060725.tar.bz2 iptables-1.3.5-20060823.tar.bz2linux-2.6.15.tar.bz2 /usr/src/ #bunzip2 -d*.bz2 #tar xvf*
.tar
#ln -siptables-1.3.5-20060823 iptables #ln -slinux-2.6.15 linux #cd/usr/src/linux #makemrproper #makeclean #cd/usr/src/patch-o-matic-ng-20060725 #./runmeconnlimit直接打补丁会报错,需要修改/usr/src/patch-o-matic-ng-20060725/patchlets/connlimit/linux-2.6.11/net/ipv4/netfilter/
Makefile.ladd
文件,将obj-$(CONFIG_IP_NF_MATCH_STATE) +=
ipt_state.o
改为obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o#./runme connlimit #cd/usr/src/linux #makemenuconfig 注意:内核参数一定要将Networking–>Networking options—>Network packet filtering(replacesipchains)—>IP: Netfilter Configuration—>Connections/IP limit match support选为模块或编译进内核;如果你找不到这一项,那么刚才打补丁没有成功;如果你对多如牛毛的内核选项很烦,你可以用makeoldconfig,www.ixdba.net#make bzImage #makemodules #makemodules_install #makeinstall 编译完成后,可以开始编译iptables #cd/usr/src/iptables #makeKERNEL_DIR=/usr/src/linux#make install KERNEL_DIR=/usr/src/linux #make install-devel5:重启后,试一试命令iptables -m connlimit -helpiptables -I INPUT -p tcp -m connlimit –connlimit-above 4 -jREJECTiptables -L如成功则补丁打成功了。