iptables常用命令

小熊 Linux评论12,108字数 1919阅读6分23秒阅读模式

注意-s制定的$ip 可以是ip,也可以是ip段$ip/$mask

管理iptables

清除iptables(常用)

iptables -F

备份iptables(常用)

iptables-save > iptables.txt

导入iptables(常用)

iptables-restore < iptables.txt

机器重启自动生效(常用)

service iptables save

清空某条规则:

iptables -t filter -D INPUT -s 1.2.3.4 -j DROP

禁用

禁止某个ip(下面用$ip表示)访问本机:

iptables -I INPUT -s $ip -j DROP

禁止某个ip段(下面用ip/mask表示,其中$mask是掩码)访问本机:

iptables -I INPUT -s ip/mask -j DROP

禁止本机访问某个ip(下面用$ip表示):

iptables -A OUTPUT -d $ip -j DROP

禁止某个ip(下面用$ip表示)访问本机的80端口的tcp服务:

iptables -I INPUT -p tcp –dport 80 -s $ip -j DROP

禁止所有ip访问本机的80端口的tcp服务:

iptables -A INPUT -p tcp --dport 80 -j DROP

禁止所有ip访问本机的所有端口:

iptables -A INPUT -j DROP

限制与放通

禁止除了某个ip(下面用$ip表示)之外其他ip都无法访问本机的3306端口
(常用):
1、首先 禁止所有

iptables -I INPUT -p tcp --dport 3306 -j DROP

2、然后 开放个别

iptables -I INPUT -s $ip -p tcp --dport 3306 -j ACCEPT

限制最大并发数

限制指定端口并发数

限制端口8388的IP最大连接数为5

iptables -I INPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP
iptables -I OUTPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP

限制端口段并发数(限制从1024-10240的端口并发为5)

iptables -I INPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP
iptables -I OUTPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP

限速

限制端口并发数(限制端口5037的最大连接速度为60个包每秒)

也就是限制每秒接受60个包,一般来说每个包大小为64—1518字节(Byte)。

iptables -A INPUT -p tcp --sport 5037 -m limit --limit 60/s -j ACCEPT
iptables -A INPUT -p tcp --sport 5037 -j DROP

限制IP的访问速度

原理:每秒对特定端口进行速度控制,比如每秒超过700个的数据包直接DROP,从而限制特定端口的速度

iptables -A FORWARD -m limit -d 208.8.14.53 --limit 700/s --limit-burst 100 -j ACCEPT 
iptables -A FORWARD -d 208.8.14.53 -j DROP

实战示例:Linux/VPS下通过iptables限制流量,可通过以下脚本即可实现(首先需要将这台机器配置成网关)。下面给出一个脚本的简单示例:

当流量小于60/s的时候,iptables 接受并转发。当流量大于60/s 的时候,iptables丢弃数据包

#限制网段
for ((i = 1; i < 253; i++))
do
/sbin/iptables -A FORWARD -s 192.168.2.i -m limit \ --limit 60/s -j ACCEPT 
/sbin/iptables -A FORWARD -s 192.168.2.i -j DROP

done
#限制单个ip 
/sbin/iptables -A FORWARD -s 192.168.1.135/32 -m limit \ --limit 60/s -j ACCEPT 
/sbin/iptables -A FORWARD -s 192.168.1.135/32 -j DROP 

最重要的记得修改完成后保存生效

最后说一下如何解决防火墙重启后失败的问题

iptables-save >/etc/sysconfig/iptables
echo 'iptables-restore /etc/sysconfig/iptables' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
小熊