在Linux上使用iptables

本指南将尝试解释如何在Linux上以易于理解的语言使用iptables。

概述 / 综述

iptables是基于规则的防火墙,它将按顺序处理每个规则,直到找到匹配的规则。

TODO:此处包含示例

使用 / 惯用法 / 正确用法 / 常规做法

iptables实用程序通常预先安装在您的Linux发行版上,但实际上并没有运行任何规则。您可以在以下大多数发行版中找到该实用程序:

/sbin/iptables

阻止单个IP地址

您可以使用-s参数阻止IP,将10.10.10.10替换为您尝试阻止的地址。您将注意到,在本例中,我们使用了-i参数(或-insert也可以)而不是追加,因为我们希望确保此规则在任何允许规则之前首先显示。

/sbin/iptables -I INPUT -s 10.10.10.10 -j DROP

允许来自IP地址的所有流量

您也可以使用与上述相同的命令,但用Accept替换Drop,从而允许来自某个IP地址的所有流量。您需要确保此规则在任何删除规则之前首先出现。

/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

特定于分布的

虽然大多数Linux发行版都包含某种形式的iptables,但其中一些也包含包装器,这使得管理变得更加简单。大多数情况下,这些“插件”采用init脚本的形式,这些脚本负责在启动时初始化iptables,尽管一些发行版也包含试图简化常见情况的成熟的包装应用程序。

白眉企鹅

Gentoo上的*iptables/init脚本能够处理许多常见场景。对于初学者,它允许您将iptables配置为在启动时加载(通常是您想要的):

rc-update add iptables default

使用init脚本,可以使用易于记忆的命令加载和清除防火墙:

/etc/init.d/iptables start /etc/init.d/iptables stop

init脚本处理在启动/停止时保持当前防火墙配置的细节。因此,您的防火墙始终处于您离开它的状态。如果您需要手动保存新规则,init脚本也可以处理此问题:

/etc/init.d/iptables save

此外,您还可以将防火墙恢复到以前保存的状态(对于您正在试验规则并且现在想要恢复以前的工作配置的情况):

/etc/init.d/iptables reload

最后,init脚本会将iptables置于“恐慌”模式,所有传入和传出流量都会被阻止。我不确定为什么此模式有用,但似乎所有Linux防火墙都有此模式。

/etc/init.d/iptables panic

警告:*如果您通过SSH连接到您的服务器,请不要启动死机模式;否则您将无法断开连接!您应该将iptables置于恐慌模式的唯一时间是当您身体处于计算机前面时。

相关文章