iptables入门指南,Linux防火墙

iptables是为Linux操作系统构建的极其灵活的防火墙实用程序。无论您是Linux新手还是系统管理员,iptables都可以通过某种方式为您带来极大的帮助。请继续阅读,我们将向您展示如何配置功能最丰富的Linux防火墙。

拍摄者 埃齐曼.

关于iptables

iptables是一个命令行防火墙实用程序,它使用策略链来允许或阻止流量。当连接尝试在您的系统上建立自己的连接时,iptables会在其列表中寻找匹配的规则。如果找不到,则采用默认操作。

iptables几乎总是预装在任何Linux发行版上。要更新/安装它,只需获取iptables软件包:

sudo apt-get安装iptables

诸如Firestarter之类的iptables可以使用GUI替代,但是一旦您掌握了一些命令,iptables并没有那么难。您在配置iptables规则时要格外小心,尤其是如果您通过SSH进入服务器时,因为一个错误的命令会永久将您锁定,直到将其手动固定在物理计算机上为止。

链条类型

iptables使用三个不同的链:输入,转发和输出。

输入 –此链用于控制传入连接的行为。例如,如果用户尝试通过SSH进入您的PC /服务器,则iptables将尝试将IP地址和端口与输入链中的规则进行匹配。

向前 –此链用于实际不在本地传递的传入连接。想一想路由器-数据总是被发送到路由器,但实际上很少发送给路由器本身。数据只是转发给它的目标。除非您在系统上进行某种形式的路由,NAT或其他需要转发的操作,否则您甚至都不会使用此链。

有一种确定的方法可以检查您的系统是否使用/需要前向链。

iptables -L -v

上面的屏幕快照是运行了几周的服务器,对传入或传出连接没有任何限制。如您所见,输入链处理了11GB的数据包,输出链处理了17GB的数据包。另一方面,前向链不需要处理单个数据包。这是因为服务器没有进行任何形式的转发或被用作传递设备。

输出 –该链用于传出连接。例如,如果尝试ping howtogeek.com,则iptables将在决定允许或拒绝连接尝试之前检查其输出链,以查看有关ping和howtogeek.com的规则。

注意事项

尽管对外部主机执行ping操作似乎只需要遍历输出链,但请记住,要返回数据,也将使用输入链。使用iptables锁定系统时,请记住,许多协议都需要双向通信,因此输入和输出链都需要正确配置。 SSH是一种常见的协议,人们忘记了在这两个链上都允许使用。

策略链默认行为

在继续并配置特定规则之前,您需要确定三个链的默认行为是什么。换句话说,如果连接不符合任何现有规则,您希望iptables做什么?

要查看您的策略链当前配置为处理不匹配的流量,请运行 iptables -L 命令。

如您所见,我们还使用grep命令为我们提供了更清晰的输出。在该屏幕截图中,我们的链目前被认为可以接受流量。

您会希望系统默认接受更多次连接。除非您之前更改了策略链规则,否则应该已经配置了此设置。无论哪种方式,以下都是默认情况下接受连接的命令:

iptables --policy输入接受


iptables --policy输出接受


iptables --policy接受

通过默认接受规则,您可以使用iptables拒绝特定的IP地址或端口号,同时继续接受所有其他连接。我们将在一分钟内处理这些命令。

如果您希望拒绝所有连接并手动指定要允许连接的连接,则应更改要删除的链的默认策略。这样做可能仅对包含敏感信息并且仅将相同IP地址连接到它们的服务器有用。

iptables --policy输入下降


iptables --policy输出下降


iptables --policy转发删除

特定于连接的响应

配置了默认的链策略后,您就可以开始向iptables添加规则,这样它就可以知道遇到特定IP地址或端口的连接时该怎么做。在本指南中,我们将介绍三种最基本且最常用的“响应”。

接受 –允许连接。

降低 –断开连接,就像从未发生过一样。如果您不希望源意识到您的系统存在,那么这是最好的。

拒绝 –不允许连接,但发回错误。如果您不希望特定的源连接到系统,但又希望他们知道您的防火墙阻止了它们,那么这是最好的选择。

展示这三个规则之间差异的最好方法是显示PC尝试使用为每个设置配置的iptables ping Linux计算机时的状态。

允许连接:

断开连接:

拒绝连接:

允许或阻止特定的连接

配置了策略链后,您现在可以配置iptables以允许或阻止特定的地址,地址范围和端口。在这些示例中,我们将连接设置为 降低,但您可以将它们切换到 接受 或者 拒绝,具体取决于您的需求以及配置策略链的方式。

注意:在这些示例中,我们将使用 iptables -A 将规则附加到现有链上。 iptables从其列表的顶部开始,并遍历每条规则,直到找到匹配的规则。如果您需要在其他规则之上插入规则,则可以使用 iptables -I [链] [数字] 指定应该在列表中的数字。

来自单个IP地址的连接

本示例说明如何阻止来自IP地址10.10.10.10的所有连接。

iptables -A输入-s 10.10.10.10 -j DROP

来自一系列IP地址的连接

本示例说明如何阻止10.10.10.0/24网络范围内的所有IP地址。您可以使用网络掩码或标准斜杠表示法来指定IP地址范围。

iptables -A输入-s 10.10.10.0/24 -j DROP

或者

iptables -A输入-s 10.10.10.0/255.255.255.0 -j DROP

与特定端口的连接

本示例说明如何阻止来自10.10.10.10的SSH连接。

iptables -A输入-p tcp --dport ssh -s 10.10.10.10 -j DROP

您可以将“ ssh”替换为任何协议或端口号。这 -p tcp 代码的一部分告诉iptables协议使用哪种连接。如果您要阻止使用UDP而不是TCP的协议,则 -p udp 而是必须的。

本示例说明如何阻止来自任何IP地址的SSH连接。

iptables -A输入-p tcp --dport ssh -j DROP

连接状态

正如我们前面提到的,许多协议将需要双向通信。例如,如果要允许SSH连接到系统,则输入和输出链都需要添加一条规则。但是,如果只希望允许SSH进入系统怎么办?是否将规则添加到输出链还允许传出SSH尝试?

这就是进入连接状态的地方,它为您提供了允许双向通信但仅允许单向连接建立的能力。看一下这个示例,其中允许从10.10.10.10开始的SSH连接,但不允许到10.10.10.10的SSH连接。但是,只要会话已经建立,系统就可以通过SSH发送回信息,这使得这两个主机之间可以进行SSH通信。

iptables -A输入-p tcp --dport ssh -s 10.10.10.10 -m状态-状态NEW,已建立-j接受

iptables -A输出-p tcp --sport 22 -d 10.10.10.10 -m状态-状态已建立-j接受

保存更改

下次重新启动iptables服务时,除非您执行命令来保存更改,否则对iptables规则所做的更改将被废弃。此命令可能会有所不同,具体取决于您的分发:

Ubuntu:

须藤/ sbin / iptables-save

红帽/ CentOS:

/ sbin / service iptables保存

或者

/etc/init.d/iptables保存

其他命令

列出当前配置的iptables规则:

iptables -L

添加 -v 选项将为您提供数据包和字节信息,并添加 -n 将以数字方式列出所有内容。换句话说,主机名,协议和网络以数字形式列出。

要清除所有当前配置的规则,可以发出flush命令。

iptables -F


$config[zx-auto] not found$config[zx-overlay] not found