用Iptables进行并发连接限制

简介:
(该文已授权PCMAG.COM.CN,未经作者同意,严禁非法转载)
    Iptables是一个内核状态的防火墙,也就是说它是Linux内核的一部分,所以它的功能异常强大,效率非常高。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
进入/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的内核编译起来更容易些,一般不会出现什么太大的问题,编译完成后能够正常的启动。
       重新进入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包。
rhel 4下的iptables connlimit补丁的RPM包提供下载的网址:
 



     本文转自 kofstart 51CTO博客,原文链接: http://blog.51cto.com/kofstart/30971 ,如需转载请自行联系原作者

相关文章
|
3月前
|
网络架构
如何解决 SNAT 端口耗尽问题
如何解决 SNAT 端口耗尽问题
53 0
|
负载均衡 网络协议 算法
一台服务器​最大并发 tcp 连接数多少?65535?
一台服务器​最大并发 tcp 连接数多少?65535?
2723 0
一台服务器​最大并发 tcp 连接数多少?65535?
批量获取所有主机上的iptables已经设置的端口
根据主机列表和端口定义列表批量查询服务器上开启的端口并保存到日志里,命名规则为IP_port.log。
127 0
|
网络协议 Linux
面试官:如何在不杀掉进程前提,关闭一个 TCP 连接?
如何在不杀掉进程前提,关闭一个 TCP 连接?
面试官:如何在不杀掉进程前提,关闭一个 TCP 连接?
|
网络协议 负载均衡
单机单网卡最大tcp长连接数真的是65535吗?
很早微博上一直讨论比较多的问题,这里转载个知乎的答案:单机单网卡最大tcp长连接数真的是65535吗? 作者:许怀远 链接:https://www.zhihu.com/question/66553828/answer/244313925 来源:知乎 著作权归作者所有。
1488 0
|
网络协议 Apache 开发工具

热门文章

最新文章