合理的防火墙是您计算机抵御网络入侵的第一道防线。当您在家时,您可能位于互联网服务提供商提供的路由器内置防火墙之后。但是,当您外出时,您拥有的唯一防火墙是计算机上运行的防火墙,因此配置和控制 Linux 计算机上的防火墙非常重要。如果您运行 Linux 服务器,了解如何管理防火墙以保护其免受本地和远程不需要的流量的侵害也同样重要。
安装防火墙
许多 Linux 发行版都预装了防火墙,传统上是 iptables。它非常有效且可定制,但配置可能很复杂。幸运的是,开发人员制作了几个前端来帮助用户控制他们的防火墙,而无需编写冗长的 iptables 规则。
在 Fedora、CentOS、Red Hat 和类似发行版上,默认安装的防火墙软件是 firewalld,它使用 firewall-cmd 命令进行配置和控制。在 Debian 和大多数其他发行版上,可以从您的软件存储库安装 firewalld。Ubuntu 附带了 Uncomplicated Firewall (ufw),因此要使用 firewalld,您必须启用 universe 存储库
$ sudo add-apt-repository universe
$ sudo apt install firewalld
您还必须停用 ufw
$ sudo systemctl disable ufw
没有理由不使用 ufw。它是一个出色的防火墙前端。但是,本文重点介绍 firewalld,因为它具有广泛的可用性并集成到 systemd 中,systemd 几乎随每个发行版一起提供。
无论您的发行版如何,为了使防火墙有效,它必须处于活动状态,并且应该在启动时加载
$ sudo systemctl enable --now firewalld
了解防火墙区域
Firewalld 旨在使防火墙配置尽可能简单。它通过建立区域来实现这一点。区域是一组合理的、通用的规则,适合大多数用户的日常需求。默认情况下有九个
- trusted: 接受所有网络连接。这是最不偏执的防火墙设置,只应在受信任的环境中使用,例如测试实验室或家庭网络中的每个人都被认为是友好的家庭。
- home, work, internal: 在这三个区域中,大多数传入连接都被接受。它们各自排除通常不期望活动的端口上的流量。它们中的任何一个都是在家庭环境中使用的合理设置,在家庭环境中,没有理由期望网络流量会模糊端口,并且您通常信任网络上的其他用户。
- public: 用于公共区域。这是一种偏执的设置,旨在用于您不信任网络上其他计算机的情况。仅接受选定的常见且大多安全的传入连接。
- dmz: DMZ 代表非军事区。此区域适用于可公开访问的计算机,这些计算机位于组织的外部网络上,并且对内部网络的访问受到限制。对于个人计算机,这通常不是一个有用的区域,但对于某些类型的服务器来说,这是一个重要的选项。
- external: 用于启用伪装的外部网络(意味着您的专用网络的地址被映射并隐藏在公共 IP 地址之后)。与 dmz 区域类似,仅接受选定的传入连接,包括 SSH。
- block: 仅允许在此系统内发起的网络连接,并且所有传入网络连接都将被拒绝,并显示 icmp-host-prohibited 消息。这是一种极其偏执的设置,对于某些类型的服务器或不受信任或充满敌意的环境中的个人计算机来说,这是一个重要的选项。
- drop: 任何和所有传入网络数据包都会被丢弃,不作回复。仅允许传出的网络连接。唯一比此设置更偏执的设置是关闭 WiFi 并拔掉以太网电缆。
您可以通过查看 /usr/lib/firewalld/zones 中的配置文件来阅读有关每个区域以及您的发行版或系统管理员定义的任何其他区域的信息。例如,这是 Fedora 31 附带的 FedoraWorkstation 区域
$ cat /usr/lib/firewalld/zones/FedoraWorkstation.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Fedora Workstation</short>
<description>Unsolicited incoming network packets are rejected from port 1 to 1024, except for select network services. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<service name="samba-client"/>
<port protocol="udp" port="1025-65535"/>
<port protocol="tcp" port="1025-65535"/>
</zone>
获取当前区域
您可以使用 --get-active-zones 选项随时查看您所在的区域
$ sudo firewall-cmd --get-active-zones
作为响应,您会收到活动区域的名称以及分配给它的网络接口。在笔记本电脑上,这通常意味着您在默认区域中有一张 WiFi 卡
FedoraWorkstation
interfaces: wlp61s0
更改当前区域
要更改您的区域,请将您的网络接口重新分配到不同的区域。例如,将示例 wlp61s0 卡更改为公共区域
$ sudo firewall-cmd --change-interface=wlp61s0 \
--zone=public
您可以随时出于任何原因更改接口的活动区域——无论您是去咖啡馆并感觉需要提高笔记本电脑的安全策略,还是去上班并需要打开一些端口才能进入内网,或者出于任何其他原因。当您按下 Tab 键时,firewall-cmd 的选项会自动完成,因此只要您记住“change”和“zone”关键字,您就可以摸索命令直到您记住它为止。
了解更多
您可以使用防火墙做更多的事情,包括自定义现有区域、设置默认区域等等。您越熟悉防火墙,您的在线活动就越安全,因此我们创建了一个 速查表,以供快速轻松地参考。
2 条评论