在Linux上使用iptables
本指南将尝试以易于理解的语言解释如何在Linux上使用iptables。
用法
iptables是基于规则的防火墙,它将按顺序处理每个规则,直到找到匹配的规则。
/sbin/iptables
阻止单个IP地址
我们可以使用-s参数来阻止IP,将10.10.10.10替换为我们尝试阻止的地址。我们将在此示例中注意到,我们使用了-I参数(或者也可以插入),因为我们要确保在任何允许规则之前先显示此规则。
/sbin/iptables -I INPUT -s 10.10.10.10 -j DROP
允许来自IP地址的所有流量
我们可以使用与上述相同的命令来交替允许来自IP地址的所有流量,但将DROP替换为ACCEPT。我们需要确保在任何DROP规则之前先出现此规则。
/sbin/iptables -A INPUT -s 10.10.10.10 -j ACCEPT
从所有地址阻止端口
我们可以使用dport开关并添加要阻止的服务的端口来完全阻止端口通过网络访问。在此示例中,我们将阻止mysql端口:
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
允许来自单个IP的单个端口
我们可以将-s命令与dport命令一起添加,以进一步将规则限制为特定端口:
/sbin/iptables -A INPUT -p tcp -s 10.10.10.10 --dport 3306 -j ACCEPT
查看当前规则
我们可以使用以下命令查看当前规则:
/sbin/iptables -L
这将为我们提供类似于以下内容的输出:
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 192.168.1.1/24 anywhere ACCEPT all -- 10.10.10.0/24 anywhere DROP tcp -- anywhere anywhere tcp dpt:ssh DROP tcp -- anywhere anywhere tcp dpt:mysql
清除当前规则
我们可以使用flush参数清除所有当前规则。如果我们需要按正确的顺序放置规则或者进行测试,这将非常有用。
/sbin/iptables --flush
Gentoo
Gentoo上的theiptablesinit脚本能够处理许多常见情况。对于初学者,它允许我们配置iptables以在启动时加载(通常是我们想要的):
rc-update add iptables default
使用init脚本,可以使用易于记忆的命令加载和清除防火墙:
/etc/init.d/iptables start /etc/init.d/iptables stop
初始化脚本处理在启动/停止时持久保留当前防火墙配置的详细信息。因此,防火墙始终处于离开状态。如果我们需要手动保存新规则,则初始化脚本也可以处理此问题:
/etc/init.d/iptables save
此外,我们可以将防火墙还原到以前的保存状态(对于正在尝试使用规则但现在想要还原以前的工作配置的情况):
/etc/init.d/iptables reload
最后,init脚本可以将iptables置于紧急模式,在该模式下,所有传入和传出流量都被阻止。我不确定为什么该模式有用,但是所有的Linux防火墙似乎都有它。
/etc/init.d/iptables panic
警告:如果我们通过SSH连接到服务器,请不要启动紧急模式;我们将断开连接!唯一应该将iptables置于紧急模式的时间是物理上在计算机前。