您的位置:首页 > 其它

iptables限制同一IP连接数

2016-11-26 17:16 330 查看
新版的 iptables 有个好用简单又有效率的功能,可以设定它阻止瞬间联机太多的来源 IP。这种阻挡功能在某些很受欢迎的,特别像是大型讨论区网站,每个网页都遭到「无知却故意」的人士。一瞬间太多的链接访问,导致服务器呈现呆滞状态。

这时,就需要下列的三行指令:

iptables -I INPUT -p tcp --dport 80 -d SERVER_IP -m state --state NEW -m recent --name httpuser --set

iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 50 -j LOG --log-prefix 'HTTP attack: '

iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 50 -j DROP

其中 SERVER_IP 换上被攻击的服务器 IP www.it165.net

1.    第一行的意思是:-I,将本规则插入到 INPUT 链里头的最上头。什么样的规则呢?只要是 TCP 性质的联机,目标端口是80,目标 IP 是我们机器的IP,刚刚新被建立起来时,我们就将这个联机列入 httpuser 这分清单中。

2.    第二行的意思是:-A,将本规则附在 INPUT 链的最尾端。只要是60秒内,同一个来源连续产生多个联机,到达第9个联机时,我们对此联机留下 Log记录。记录行会以 HTTP attack 开头。每一次的本规则比对, –update 均会更新 httpuser 清单中的列表。

3.    第三行的意思是:-A,将本规则附在 INPUT 链的最尾端。同样的比对条件,但是本次的动作则是将此联机给断掉。

所以,这三行规则表示,我们允许一个客户端,每一分钟内可以接上服务器8个。具体数值可以看管理者决定。这些规则另外也可以用在其它对 Internet 开放的联机服务上,例如 port 22 (SSH), port 25 (smtp email)。

为什么新版的 iptables 它在阻挡上很有效率呢?因为在旧版的 iptables 中,并没有这些新模块功能,导致我们得需要使用操作系统的 Shell 接口,周期性地执行网络检查与拦阻动作。 前者只动用到网络层的资源,而后者已经是应用层的大量(相对而言)运算。试想,服务器都已经给白目客户操翻天了,哪还有余力周期性地呼叫软件层级的计算,来阻挡白目客户呢?

如果下上述指令时,得到下列错误:

iptables: Invalid argument. Run `dmesg' for more information.

增加 xt_recent模块 --hitcount parameter(默认值为20)的最大值,选项 ip_pkt_list_tot=50就ok了,默认值可以查看/sys/module/xt_recent/parameters/ip_pkt_list_tot

iptables: No chain/target/match by that name

这表示, kernel 在编译时,没有将 iptables module 功能勾选。要重新勾选再编译哦~~~另一个可能是,您使用的服务器,该服务公司所提供的共享核心中,并没有打开此功能,但因为是核心共享…所以…没有权利重新编译核心。


iptables透明模式

/*
一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则在两个接口之间转发数据包,或者拒绝、丢弃数据包。实际上,防火墙不单单是访问控制的功能,而且还充当了路由器的角色。当然,这并非有什么不妥当的地方,但是当你企图把你配置好的防火墙放入运行网络,来保护现有系统安全的时候,你不得不重新考虑和更改你的网络架构。另外一个可能的麻烦是,当防火墙发生意外时,如果没有防火墙的硬件备份的话,那么你将面临巨大的心理压力,因为防火墙的故障,整个网络瘫痪了。假如你把防火墙配置成透明模式(可称为伪网桥),就无需更改网络架构,即使是防火墙不能工作了,要做的仅仅是拔出网线,把网线直接插在路由器的内部接口就可以让网络正常工作,然后你就有时间慢慢恢复发生故障的防火墙。
为了实现高效的防火墙和网络检测,系统CPU必须足够的强大和快速。系统需要三块网卡,其中两块网卡支持网桥的实现,另外一块用来实现对防火墙的管理。(至少2块网卡,可以把管理IP配置在桥接设备上)。
*/
#!/bin/bash
# BY kerryhu
# QQ:263205768
# MAIL:king_819@163.com
# BLOG:http://kerry.blog.51cto.com
#要让Linux实现网桥功能除了编译支持网桥的内核之外(802.1d Ethernet Bridging),还需要应用软件的支持, 这个软件就是bridge-utils
cd /opt
wget http://ncu.dl.sourceforge.net/project/bridge/bridge/bridge-utils-1.4/bridge-utils-1.4.tar.gz
tar zxvf bridge-utils-1.4.tar.gz
cd bridge-utils-1.4
./configure --prefix=/usr
make;make install
#brctl该命令的帮助
#1.创建网桥设备:
brctl addbr br0
#2.向br0中添加网卡eth0和eth1
brctl addif eth0
brctl addif eth1
#3.从网桥中删除网卡eth0 和eth1
brctl delif eth0
brctl delif eth1
#4.删除网桥br0
brctl delbr br0
#网关:
172.16.16.254
#Web服务器(80、443)
172.16.16.172
#ftp服务器(21、20)
172.16.16.173
#MySQL服务器(3306)
172.16.16.174
#配置网桥接口
ifconfig br0 172.16.16.171 netmask 255.255.255.0 broadcast 172.16.16.255
#配置防火墙策略
# Create the interface br0
/usr/sbin/brctl addbr br0
# Add the Ethernet interface to use with the bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
# Start up the Ethernet interface
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
# Configure the bridge ethernet
/sbin/ifconfig br0 172.16.16.171 netmask 255.255.252.0 broadcast 172.16.16.255
# I have added this internal IP to create my NAT
# ip addr add 192.168.0.1/24 dev br0
/sbin/route add default gw 172.16.16.254
iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Limit ICMP
iptables -A FORWARD -p icmp -m limit --limit 4/s -j ACCEPT
# Match string, a good simple method to block some VIRUS very quickly
#iptables -I FORWARD -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
# Allow the 222.11.22.33 connection MySQL server
iptables -A FORWARD -p tcp -s 222.11.22.33 -d 172.16.16.174 --dport 3306 -j ACCEPT
# Allow HTTP ( 80 ) connections with the WWW server
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 172.16.16.172 --dport 80 -j ACCEPT
# Allow HTTPS ( 443 ) connections with the WWW server
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 172.16.16.172 --dport 443 -j ACCEPT
# Allow the WWW server to go out
iptables -A FORWARD -s 172.16.16.172 -d 0/0 -j ACCEPT
# ftp Server Rules
iptables -A FORWARD -p tcp -s 0/0 -d 172.16.16.173 --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -s 0/0 -d 172.16.16.173 --dport 20 -j ACCEPT
# Allow the NTP server to go out
iptables -A FORWARD -s 172.16.16.173 -d 0/0 -j ACCEPT
#关于内核2.6,2.6的内核默认已经打上了bridge-nf,我已经在2.6.12上测试通过,任何使用2.6内核的发行版应该都支持bridge-nf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: