如何使用 Iptables 保护您的 Linux 桌面
Linux 可能因其安全性而享有盛誉,但它并不完美。许多发行版也没有最佳的安全默认设置,因此最好实施一些最佳安全实践或使用开源安全工具。其中一个例子就是使用防火墙。
Linux 中的防火墙有几个选项,但大多数实际上只是 iptables 的包装器。在本指南中,我们将向您展示如何直接使用 iptables。
另请阅读:什么是 Log4Shell 以及如何保护您的 Linux 系统免受其侵害
什么是 iptables?
iptables 是 Linux 内核防火墙。每个 Linux 发行版都附带它,它是控制进出计算机的流量的最直接方法。
Iptables 因复杂而闻名,而且确实如此。不过,您无需了解有关 iptables 的所有知识即可在桌面上有效地使用它。您只需要了解其工作原理及其规则结构的一些基本知识。
命令结构
所有 iptables 规则都遵循相同的基本结构。每条规则都是 iptables 的单行命令,告诉它如何处理特定端口上的流量。看一下下面的例子:
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT这可能看起来很多,但当你分解它时,它真的很简单。首先,此规则以 -A 开头,因为它将附加到您的 iptables 规则中。
接下来,-i 标志指定该规则所针对的接口。在本例中,它是 eth0。当您编写自己的规则时,请确保您知道通过哪个接口连接到网络。
以下标志 -p 命名协议。此规则适用于 tcp,即 Web 流量。
-m 标志有点不同。它用于断言必须满足一个条件才能使流量不被拒绝。该规则中的条件是状态。
状态实际上是下一个标志。您需要为 --state 提供可接受状态的列表,全部大写并用逗号分隔。该规则接受新的和已建立的连接。
这里倒数第二个标志是--sport。它代表“源端口”,它告诉 iptables 流量来自哪里。还有一个 --dport 标志代表“目标端口”。它用于 OUTPUT 规则来处理来自哪个端口的流量。
最后,还有 -j 标志。它告诉 iptable 要“跳转”到哪个操作。在这种情况下,它应该接受满足先前条件的流量。
另请阅读:如何在 Linux 上使用 Nessus 漏洞扫描程序
使用文件
您可以手动将您的规则一一输入到 iptables 中。这是非常乏味的,而且很容易忘记你在哪里以及你在做什么。最好创建一个可以一次性导入 iptables 的规则文件。
在哪里创建文件并不重要。人们甚至将它们放在 /tmp 目录中,因为 iptables 会在导入后存储结果。
创建您的文件。本指南将使用 /tmp/iptables-ip4。在文件中添加以下两行。您的所有规则都将在它们之间进行。
*filter
# Your Rules Here
COMMIT创建您的规则
您可以开始设置规则。这些只是建议。显然,如果您正在运行其他服务或需要打开其他端口,您当然可以调整一些内容或添加自己的规则。
环回
环回接口是Linux 使用的内部接口。
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT平
这是一个偏好问题。许多人根本不喜欢在桌面上允许 ping。不过,拥有它来测试连接可能很有用。如果您想允许 ping,请添加以下规则。如果不这样做,请将它们排除在外。
-A INPUT -i eth0 -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT
-A INPUT -i eth0 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o eth0 -p icmp -j ACCEPT网络
您显然希望能够连接到网络。另一方面,您不想允许来自 Internet 的连接。
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 443 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j ACCEPT您还需要允许 DNS 连接,以便您的计算机可以使用 URL 而不仅仅是 IP 地址,因为这不太方便。将您的路由器的 IP 地址替换为此处使用的 IP 地址。
-A INPUT -i ens3 -s 192.168.1.1 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o ens3 -d 192.168.1.1 -p udp --dport 53 -m udp -j ACCEPT时间
大多数 Linux 桌面使用 NTP 从 Internet 设置和维护系统时间。您需要允许您的计算机连接到 NTP 服务器才能获取时间。
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --dport 123 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 123 -j ACCEPT印刷
除非您使用 USB 打印机或外部打印服务器,否则您需要启用与 CUPS 的连接。
-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 631 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 631 -j ACCEPT电子邮件
您可能还希望能够发送和接收电子邮件。电子邮件可能很棘手。此处允许的端口是 SSL 电子邮件端口。如果您需要使用不安全的电子邮件,请替换这些端口。
# IMAP
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 993 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j ACCEPT
# POP3
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 995 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j ACCEPT
# SMTP
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED --sport 465 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 465 -j ACCEPTSSH
为了充分利用 SSH 连接,您需要允许通过 SSH 输入和输出。
# Input
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
# Output
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT动态主机配置协议
大多数 Linux 桌面使用 DHCP 自动从路由器接收 IP 地址。 DHCP 使用自己的端口,因此它们也需要可访问。如果您使用静态 IP,则不需要这些规则。
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED --sport 67:68 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 67:68 -j ACCEPT拒绝一切
最后,您将告诉 iptables 绝对拒绝您在上述规则中未明确允许的所有内容。
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT完成所有操作后,您的规则应该如下所示。
另请阅读:如何在 Linux 中使用密码存储来管理您的密码
导入您的规则
您现在拥有一个功能齐全的 iptables 规则列表。你只需要把它交给 iptables 来使用即可。
如果随着时间的推移添加了一些规则,请将其清除。在这些命令之后,您将看到允许一切的默认值。
sudo iptables -F && sudo iptables -X这些文件消失后,您可以从您创建的文件中恢复新的文件。
sudo iptables-restore < /tmp/itpables-ip4您的计算机现在正在使用新的 iptables 规则。你可以检查一下。
sudo iptables -S然而,它们还不是永久性的。如果您现在重新启动计算机,您的日子将会非常糟糕。
另请阅读:如何使用 SELinux 保护您的 Linux 服务器
使它们永久化
有多种方法可以使规则永久化。每个发行版的它们都不同。本指南将重点关注基于 Debian 和 Ubuntu 的系统,因为它们是最受欢迎的。
有一个名为 iptables-persistant 的包可用,它可以处理保存和恢复 iptables。您所要做的就是安装它。
sudo apt install iptables-persistent在安装过程中,软件包会询问您是否要保存配置。选择“是”。
以后如果要添加规则,可以通过运行以下命令再次保存。
sudo service netfilter-persistent save您现在可以控制流经计算机的流量。当然,您还可以使用 iptables 做更多事情,但您应该首先对基础知识充满信心。



