返回博客

配置 Iptables 防火墙:基本规则和命令

配置 Iptables 防火墙:基本规则和命令

简介

Iptables​ 是一个命令行 ​防火墙 ​工具。这意味着它是一款允许您在系统上配置防火墙的软件。它通常默认安装在 ​Linux​ 系统上。在本指南中,我们将 ​讨论一些与 iptables​ 防火墙相关的常用规则和命令。每当有连接尝试与您的系统建立时,防火墙都会参考这些规则来决定下一步应该采取什么操作。

Iptables 命令

本指南将介绍一些最基本的 iptables 命令。要学习本指南,您需要对什么是 iptables 及其工作原理有基本的了解。这将有助于您更好地掌握使用以下命令所实施的规则。请记住,下面给出的任何命令都可以单独使用。另一方面,您也可以根据自己的特定需求对它们进行混搭。

注意事项

在继续阅读之前,请记住以下几点:

  • iptables 中规则的顺序非常重要。
  • 要在链的末尾追加新规则,您的 ​iptables 命令必须使用 ​-A。​​
  • 如果您想在其他位置追加规则,则必须使用 ​-I 选项。此选项使您能够指定规则的确切位置。如果您想将规则放在链的开头,只需不提供规则编号即可。
  • 为了确保您能够持续访问服务器,默认情况下阻止端口 22 上的 SSH 流量。
  • 如果您未能这样做并失去了对服务器的访问权限,您可以使用控制台重新连接。允许 SSH 流量以更改防火墙设置。
  • 如果您想查看当前生效的规则集,请使用命令 sudo iptables -S​ 和 ​ ​sudo iptables -L。

此外,我们还有一篇​关于如何列出和删除 iptables 防火墙规则的详细指南​, 这将进一步帮助您充分利用 iptables 防火墙。

现在准备工作已经就绪,让我们深入了解一些 ​常用的 iptables 命令​:

如何保存您的规则

我们首先来确定如何保存您的规则。需要注意的是,iptables 规则是临时的。这意味着在您重启系统后它们将会丢失——除非您保存它们。以下是您分别在 ​Ubuntu​ 和 ​CentOS​ 服务器上手动保存新规则的方法:

  • Ubuntu

在 Ubuntu 服务器上保存新规则最简单的方法是使用 iptables-persistent​ 软件包。您可以轻松地​按照本教程创建 Ubuntu 服务器​。

现在,保存新 iptables 规则的第一步是使用 apt-get 安装 iptables-persistent ​软件包。以下是获取它的方法:

Iptables Firewall 1

在安装过程中,您需要决定是否保存当前生效的防火墙规则。如果要更新规则并保存更改,请使用以下命令:

Iptables Firewall 2

上述命令通常适用于 16.04 之后的 Ubuntu 版本。如果您使用的是更早的版本,请改用以下命令:

  • CentOS

您可以在 CentOS 6 或更早版本上使用 iptables 配置防火墙。CentOS 7 则使用 FirewallD。请按照本 教程学习如何在 CentOS 7 上设置 FirewallD.

您可以使用 ​iptables 初始化脚本在 CentOS 上保存新规则。请参阅以下命令:

此命令将保存您的 iptables 防火墙新规则。当前处于活动状态的 iptables 规则可以在 /etc/sysconfig/iptables​ 文件中找到。

实用的 Iptables 命令

现在,让我们来看看您可能需要在服务器上使用的一些非常实用的 iptables 防火墙命令。

  • 环回连接

首先,我们将探讨如何允许环回连接。您的系统使用环回接口向自身发送连接。例如,假设您运行了以下命令:​ping localhost​ 或 ​ping 127.0.0.1​。您的服务器将使用回环接口(即 lo​)来实质上 ping 自身。其他时候,如果您的应用服务器配置为连接到“localhost”地址,服务器也可能会使用它。

无论情况如何,您都需要确保您的 iptables 防火墙不会阻止这些连接。因此,您必须允许回环连接以使这些功能得以运行。

以下是您将运行以允许所有流量进入回环接口的命令:

Iptables Firewall 3

  • 已建立和相关的入站连接

您可能需要允许的另一种连接类型是出站连接。为了确保您的服务器分别接收和发送入站和出站流量,您需要允许已建立和相关的入站连接。这允许服务器向出站连接发送返回流量。使用此命令允许已建立以及相关的入站连接:

Established and Related Incoming Connections

  • 已建立的出站连接

服务器通常会以已建立连接的出站流量形式向入站连接发送响应。要允许这些,请使用以下命令:

Established Outgoing Connections

  • 内部到外部

有时,您甚至可能需要配置防火墙以允许内部访问外部。默认情况下,您的外部网络应该是 ​eth0​ 和 ​eth1 应该是您的内部网络。如果是这种情况,请使用此命令启用访问:

Internal to External

  • 丢弃无效数据包

有时,某些网络流量数据包会被标记为无效。大多数情况下,您只需丢弃这些无效数据包即可。为此,请使用以下命令:

Dropping Invalid Packets

阻止 IP 地址的规则

接下来,我们将介绍一些可用于阻止来自特定 IP 地址的连接的命令。为了简单起见,我们将在命令中使用 ​15.15.15.51 IP 地址作为示例。您可以用您特定的 IP 地址替换此值。

在 ​-s 15.15.15.51 中,​​​-s​ 代表来源(source)。因此,该命令指定了源 IP 地址“15.15.15.51”。同样,您可以在任何防火墙规则中指定源 IP 地址。这包括允许和拒绝规则。

如果您想拒绝连接,您将在命令中使用 REJECT 代替 DROP,如下所示:

因此,每当该特定 IP 地址发送连接请求时,您的服务器都会给出“连接被拒绝”(connection refused)错误。

  • 阻止到特定接口的连接

您可以阻止从特定 IP 地址到特定网络接口的所有连接请求。在我们的示例中,IP 地址是 15.15.15.51​,网络接口是 ​eth0​。使用此命令阻止连接:

极好的一点是,您可以在任何规则中指定网络接口。这意味着任何规则都可以应用并仅限制在特定的网络中。

服务规则:SSH

SSH ​在您使用云服务器时会变得非常重要。在这种情况下,您需要允许端口 22 上的入站 SSH 连接。启用这些连接允许您连接并管理您的服务器。在这里,我们将讨论一些与 SSH 相关的常见规则。

  • 允许所有入站 SSH

以下命令允许所有传入的 SSH 连接:

在上述命令集中,只有在 ​OUTPUT​ 策略未设置为 ​ACCEPT​ 时,才需要使用第二条命令。它允许已建立的 SSH 连接的传出流量。

  • 允许来自特定子网的传入 SSH

前面的命令允许所有传入连接。您可以使用以下命令,仅允许来自特定 IP 地址或子网的传入连接。假设您只想允许来自 ​15.15.15.0/24​ 子网的传入连接:

与之前相同,只有在 ​OUTPUT​ 策略未设置为 ​ACCEPT​ 时,才需要使用第二条命令。它允许已建立的 SSH 连接的传出流量。

  • 允许传出 SSH

如果防火墙的 ​OUTPUT​ 策略未设置为 ​ACCEPT​ 并且您希望启用 SSH 连接,请使用这些命令。这将允许您的服务器向其他服务器发起 SSH 连接:

要在您的云服务器上进一步利用 SSH,请查看我们关于 ​ 如何在 Ubuntu 中使用 SSH 连接到远程服务器 ​和 如何配置您的 Linux 服务器以使用基于 SSH 密钥的身份验证​.

  • 允许来自特定子网的传入 Rsync

Rsync​ 是一种可用于在系统之间传输文件的功能。它运行在端口 873 上。因此,如果您想允许来自特定 IP 地址或子网的端口 873 上的传入 Rsync 连接,请使用以下命令:

如您所见,我们指定了源 IP 地址以及目标端口。只有在防火墙的 ​OUTPUT​ 策略未设置为 ​ACCEPT​ 时,才需要使用第二条命令。它允许已建立的 Rsync 连接的传出流量。此外,您可以查看我们的 ​关于如何利用 Rsync 同步 VPS 上的本地和远程目录的教程​.

服务规则:Web 服务器

HTTP 连接通常在端口 80 上接收。同样,HTTPS 通常在端口 443 上接收。像 ​Apache​ 和 ​Nginx​ 监听这些端口以捕获连接请求。有时,默认设置可能会使您的服务器拒绝或丢弃这些传入请求。这就是为什么您需要设置新规则以允许流量通过的原因。

  • 允许所有传入的 HTTP 连接

您可以使用以下命令允许端口 80 上的所有传入 HTTP 连接:

只有在防火墙的 ​OUTPUT​ 策略未设置为 ACCEPT​ 时,才需要使用第二条命令。它允许已建立的 HTTP 连接的传出流量。

  • 允许所有传入的 HTTPS 连接

使用以下命令允许端口 443 上的所有传入 HTTPS 连接请求:

仅当 iptables 防火墙的 ​OUTPUT​ 策略未设置为 ACCEPT​ 时,您才需要使用第二条命令。它允许已建立的 HTTP 连接的传出流量。

  • 允许来自 HTTP 和 HTTPS 的所有传入连接

如果您想允许来自 HTTP 和 HTTPS 端口的流量,可以使用 multiport 模块。如果是这种情况,请使用以下命令:

仅当防火墙的 ​OUTPUT​ 策略未设置为 ACCEPT​。它允许已建立的 HTTP 和 HTTPS 连接的传出流量。

服务规则:MySQL

有时,客户端可能会使用远程服务器来访问您的 ​MySQL​ 数据库服务器。在这种情况下,您需要手动允许来自相关端口的传入流量。MySQL 监听来自端口 3306 的连接请求。

  • 允许来自子网的传入 MySQL 连接

如果您想允许来自特定子网的 MySQL 连接,则必须指定源。在我们的示例中,我们将使用以下命令允许来自 15.15.15.0/24​ 子网的传入流量:

仅当防火墙的 ​OUTPUT​ 策略未设置为 ACCEPT​ 时,您才需要使用第二条命令。它允许已建立的 MySQL 连接的传出流量。

  • 启用指向特定接口的 MySQL 连接

如果您还想指定哪个网络接口应该接收 MySQL 连接,可以使用以下命令:

在这种情况下,我们允许连接到名为 eth1​.

仅当防火墙的 ​OUTPUT​ 策略未设置为 ACCEPT​ 时,您才需要使用第二条命令。它允许已建立 of MySQL 连接的传出流量。

您可以按照我们的 ​教程在您的服务器上轻松设置 MySQL​.

服务规则:PostgreSQL

您的客户端可能会使用远程服务器来访问您的 ​PostgreSQL​ 数据库服务器。在这种情况下,您需要允许这些传入连接。这些连接将通过端口 5432 传入。

  • 允许来自子网的传入 PostgreSQL 连接

您可以使用以下命令允许来自特定子网或 IP 地址的传入 PostgreSQL 连接。如您所见,我们指定了源,即 ​15.15.15.0/24​ 子网。

仅当防火墙 ​OUTPUT​ 策略未设置为 ACCEPT​。它允许已建立的 PostgreSQL 连接的传出流量。

  • 允许到特定接口的 PostgreSQL 连接

如果您只想允许到特定网络接口的 PostgreSQL 连接,请使用以下命令:

在这种情况下,我们允许连接到名为 eth1​ 的私有网络接口。只有在防火墙 OUTPUT 策略未设置为 ACCEPT 时,您才需要使用第二条命令。它允许已建立的 PostgreSQL 连接的传出流量。

遵循此 教程在您的 Ubuntu 服务器上安装 PostgreSQL​.

服务规则:邮件

您可能还需要根据您使用的任何邮件服务器来配置防火墙。例如,SendmailPostfix 可以在许多不同的端口上接收连接。这取决于您用于邮件传递的协议。要阻止和允许某些邮件连接,您需要知道您使用的是什么协议。

  • 允许传入的 SMTP 连接

SMTP 连接通常通过端口 25 传入。尽管 SMTP 也通常使用端口 587 进行传出邮件。要允许您的服务器响应这些连接,请使用以下命令:

只有在防火墙 OUTPUT​ 策略未设置为 ACCEPT 时,您才需要使用第二条命令。它允许已建立的 SMTP 连接的传出流量。

  • 允许所有传入的 IMAP

要允许您的服务器响应端口 143 上的所有传入 IMAP 连接,只需键入并运行以下命令:

只有在防火墙 ​OUTPUT 策略未设置为 ACCEPT​ 时,您才需要使用第二条命令。它允许已建立的 IMAP 连接的传出流量。

  • 允许所有传入的 IMAPS

使用以下命令让您的服务器响应端口 993 上的 IMAPS 连接:

只有在防火墙 OUTPUT 策略未设置为 ACCEPT 时,您才需要使用第二条命令。它允许已建立的 IMAPS 连接的传出流量。

  • 允许所有传入的 POP3

这些连接将通过端口 993 传入。如果您希望您的服务器响应 IMAPS 连接请求,请使用以下命令:

只有在防火墙 OUTPUT 策略未设置为 ACCEPT 时,您才需要使用第二条命令。它允许已建立的 POP3 连接的传出流量。

  • 允许所有传入的 POP3S

使用以下命令允许您的服务器与通过端口 995 传入的 POP3S 请求建立连接:

只有在防火墙的 ​OUTPUT 策略未设置为 ACCEPT​ 时,才需要使用第二条命令。它允许已建立的 POP3S 连接的传出流量。

  • 如何阻止传出 SMTP 邮件

除了允许传入连接和启用服务器响应之外,您可能还想完全阻止传出邮件。您可以使用以下命令阻止端口 25 上的所有传出 SMTP 邮件:

因此,所有在端口 25 上的传出流量都将被 iptables 防火墙拒绝。如果您想拒绝任何其他服务,可以使用相同的命令结构。您只需将端口 25 替换为相应的端口号即可。

结论

本指南涵盖了基本的 iptables 防火墙命令。它为您提供了有效配置 iptables 防火墙所需的基本工具。请记住,没有一种万能的解决方案。这些命令非常灵活。这意味着您可以以最适合您和您需求的方式来使用它们。

祝您使用愉快!

author

Manpreet Singh

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。