在Linux上使用iptables

时间:2020-01-09 10:45:47  来源:igfitidea点击:

本指南将尝试以易于理解的语言解释如何在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置于紧急模式的时间是物理上在计算机前。