iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。这篇文章主要介绍iptables的安装,添加规则,清除规则,开放指定端口,屏蔽指定ip,ip段,等等基本功能。

安装

apt-get install iptables

常见用法

清除已有iptables规则

iptables -F     # 刷新所有链
iptables -X     # 删除表中所有非默认链
iptables -Z

允许本地回环接口(即运行本机访问本机)

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

允许所有本机向外的访问

iptables -A OUTPUT -j ACCEPT

允许访问22端口,允许某IP访问指定端口,以22端口为例命令是

iptables -A INPUT -p tcp --dport 22 -j ACCEPT                         # 允许所有的IP访问22端口
iptables -I INPUT -s 123.45.6.7 -p tcp --dport 22 -j ACCEPT           # 允许某个IP访问
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT       # 允许IP段访问

允许访问80端口

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

允许FTP服务的21和20端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

如果有其他端口稍微修改上述语句中的端口号即可

允许已建立的或相关连的通行

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

禁止访问

禁止其他未允许的规则访问

注意:如果22端口未加入允许规则,SSH链接会直接断开

屏蔽单个IP的命令是

iptables -I INPUT -s 123.45.6.7 -j DROP

封整个段即从123.0.0.1到123.255.255.254的命令

iptables -I INPUT -s 123.0.0.0/8 -j DROP

封IP段即从123.45.0.1到123.45.255.254的命令

iptables -I INPUT -s 124.45.0.0/16 -j DROP

封IP段即从123.45.6.1到123.45.6.254的命令是

iptables -I INPUT -s 123.45.6.0/24 -j DROP

屏蔽某IP访问指定端口,以22端口为例命令是

iptables -I INPUT -s 123.45.6.7 -p tcp --dport 22 -j DROP

查看规则

查看已添加的iptables规则

iptables -L -n
iptables -nvL --line-numbers
  • n:只显示IP地址和端口号,不将ip解析为域名

将所有iptables以序号标记显示

iptables -L -n --line-numbers

删除规则

删除已添加的iptables规则

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

保存和恢复配置规则

保存生效的配置,让系统重启的时候自动加载有效配置(iptables提供了保存当前运行的规则功能)

iptables-save > /etc/iptables.rules
iptables-restore < /etc/iptables.rules

reference