如何在Debian,Ubuntu,Linux Mint上使用UFW防火墙
本教程将通过一些实际示例向您展示如何在Debian / Ubuntu / Linux Mint上使用UFW(简单的防火墙)。 管理防火墙是每个系统管理员都需要了解的基本技能。 本文旨在使读者开始使用UFW,但不会探讨UFW的来龙去脉。
UFW是iptables的前端,可以简化Netfilter防火墙的管理,因此名称为“ Uncomplicated Firewall”。 它提供了一种命令行界面,其语法类似于OpenBSD的Packet Filter。 它特别适合作为基于主机的防火墙。 UFW是基于Debian的Linux Distros上推荐的iptables前端,通常预先安装在这些Distros上。 默认情况下,UFW为IPv4和IPv6地址设置防火墙规则。 另一个著名的iptables前端是Firewalld,它是基于RPM的Linux发行版(RHEL,CentOS,Fedora,OpenSUSE等)上的默认防火墙应用程序。
禁用其他Iptables还原服务
如您所知,当操作系统关闭且iptables防火墙规则关闭时, iptables
程序本身不会还原防火墙规则。 UFW默认情况下在系统重新引导后恢复防火墙规则。 使用UFW之前,请务必检查系统上是否还有另一个iptables还原服务。 如果有两个还原服务,它们将彼此冲突,这通常导致Web应用程序在系统重新引导后不可用。
如果直接使用iptables防火墙,而现在要切换到UFW,则只需禁用iptables还原服务。 iptables持久的 是Debian / Ubuntu上著名的iptables恢复服务。 您可以使用以下命令检查其是否正在运行。
systemctl status iptables-persistent
如果它正在运行,则可以停止并禁用它。
sudo systemctl stop iptables-persistent sudo systemctl disable iptables-persistent
或者,您可以将其从系统中删除。
sudo apt remove iptables-persistent
如果您已使用iRedMail设置了邮件服务器,请确保运行以下命令来检查是否 iptables
服务正在运行。
systemctl status iptables
该iptables服务与iRedMail一起提供,用于还原iptables防火墙规则。 如果它正在运行,则可以停止并禁用它。
sudo systemctl stop iptables sudo systemctl disable iptables
现在让我们学习如何使用UFW。
Debian / Ubuntu / Linux Mint Server上的UFW入门
UFW通常预装在Debian / Ubuntu / Linux Mint上,尽管您始终可以运行以下命令进行安装。
sudo apt install ufw
注意:您可以使用以下命令在Arch Linux上安装UFW: sudo pacman -S ufw
,但是您还需要启用UFW systemd服务 sudo systemctl enable ufw
。
在安装时,ufw被禁用。 您可以使用以下方法检查UFW状态:
sudo ufw status
UFW带有默认的拒绝传入策略,默认的转发拒绝策略和默认的传出策略allow,并对传入和转发的连接进行新连接的状态跟踪。 在启用UFW之前,您需要知道在服务器的公共IP地址上打开了哪些端口,可以通过以下方法获得这些端口: nmap
(网络映射器)。
安装 nmap
在您的Debian / Ubuntu / Linux Mint服务器上,并扫描公共IP地址上打开的端口。
sudo apt install nmap sudo nmap 12.34.56.78
将12.34.56.78替换为服务器的实际公共IP地址。 从下面的屏幕快照中可以看到,我的服务器上有几个打开的端口。
还有打开的端口仅在localhost上侦听,可以通过运行来获取 sudo nmap localhost
,但我们不必担心它们。
默认情况下,Nmap仅扫描TCP端口。 我们可以使用以下命令来扫描UDP端口。
sudo nmap -sU 12.34.56.78
但是,UDP扫描非常慢。 如果您不能等那么久,可以使用 netstat
列出UDP端口。
sudo netstat -lnpu
在服务器上获得打开的TCP和UDP端口后,您需要确定应允许哪些端口接受入站连接。 如果有一个运行的openSSH服务器,那么在激活UFW之前,应始终允许TCP端口22。 这可以通过以下命令来实现。
sudo ufw allow 22/tcp
要么
sudo ufw allow ssh
您可能希望允许HTTP和HTTPS通信,因此运行以下命令以允许TCP端口80和443上的入站连接。
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
如果运行电子邮件服务器,则需要允许TCP端口25(SMTP),587(提交),143(imap)和993(imaps)。
sudo ufw allow 25/tcp sudo ufw allow 587/tcp sudo ufw allow 143/tcp sudo ufw allow 993/tcp
如果希望用户能够使用POP3协议,则需要允许TCP端口110(POP3)和995(POP3S)。
sudo ufw allow 110/tcp sudo ufw allow 995/tcp
如果运行BIND DNS服务器,则需要打开TCP和UDP端口53。
sudo ufw allow 53
上面的命令将同时允许TCP和UDP端口。 如果只允许UDP端口,则
sudo ufw allow 53/udp
一次打开多个端口
您可以允许多个端口,如下所示。
sudo ufw allow 80,443,25,587,465,143,993/tcp
启用UFW
在UFW中设置允许的端口后,需要启用UFW。 但是在执行此操作之前,建议使用以下命令启用日志记录,以便您可以更好地了解防火墙是否正常运行。
sudo ufw logging on
默认日志级别为“低”。 日志文件是 /var/log/ufw.log
。 我通常使用“中”日志级别。
sudo ufw logging medium
现在启用UFW。
sudo ufw enable
注意:如果您以前直接使用过iptables防火墙,则启用UFW后,这些iptables防火墙规则将被撤消。
检查状态
sudo ufw status
要显示更多信息,请运行
sudo ufw status verbose
现在,您可以重新扫描服务器,以找出哪些端口仍处于打开状态。
sudo nmap 12.34.56.78
如何删除防火墙规则
首先,您需要使用以下命令获取要删除的防火墙规则的参考号。
sudo ufw status numbered
然后,您可以删除一条规则,例如第八条规则。
sudo ufw delete 8
请注意,删除规则后,参考编号将更改,因此您需要运行 sudo ufw status numbered
再次删除另一条规则。
重置UFW
如果输入错误,则可以禁用防火墙并将其重置为安装默认值。
sudo ufw reset
这对初学者特别有用。
UFW应用简介
UFW配置文件附带了许多服务器程序。 您可以使用以下命令列出所有应用程序配置文件:
sudo ufw app list
我们可以显示有关特定应用程序配置文件的信息,例如“ Apache Full”配置文件。
sudo ufw app info "Apache Full"
我们可以看到此配置文件使用的端口是TCP端口80和443。如果通过以下命令启用此应用程序配置文件,则将允许TCP端口80和443。
sudo ufw allow "Apache Full"
用UFW创建IP地址黑名单
假设有一个垃圾邮件发送者正在不断尝试将垃圾邮件发送到您的邮件服务器。 您可以使用UFW,使用以下命令来阻止垃圾邮件发送者的IP地址访问邮件服务器的TCP端口25。 将12.34.56.78替换为垃圾邮件发送者的IP地址。
sudo ufw insert 1 deny in from 12.34.56.78 to any port 25 proto tcp
请注意,默认情况下,新添加的防火墙规则位于底部。 如果您以前允许从任何地方访问端口25,则需要像上面一样将拒绝规则插入为第一条规则,因此将首先应用拒绝规则。 您始终可以插入新的拒绝规则作为第一条规则。
sudo ufw insert 1 deny in from 78.56.34.12 to any port 25 proto tcp
您还可以如下所示阻止IP地址范围。
sudo ufw insert 1 deny in from 192.168.0.0/24 to any port 25 proto tcp
要阻止IP地址访问服务器上的所有端口,请运行
sudo ufw insert 1 deny in from 12.34.56.78
用UFW创建IP地址白名单
现在,假设您运行的是OpenSSH服务器,并且只希望允许某些IP地址通过SSH登录到服务器。 您可以使用UFW创建IP地址白名单。 例如,我家中没有静态IP地址,但是我在云上设置了多个VPN服务器,因此现在我可以配置UFW,以仅允许从我的VPN服务器的IP地址到端口22的入站连接。
首先,将IP地址添加到允许列表。
sudo ufw insert 1 allow in from 12.34.56.78 to any port 22 proto tcp
然后,您需要获取“从任何地方允许SSH”规则的参考号并删除该规则。
sudo ufw status numbered sudo ufw delete reference-number
请注意,您需要同时删除IPv4和IPv6规则。 另请注意,如果先删除上规则,则下规则的参考号将更改。
从这里开始,只有您的IP地址可以访问TCP端口22。
如何在UFW中使用IPv6地址
首先,请确保 IPV6=yes
安顿好了 /etc/default/ufw
文件。 如果未设置,则将其添加到该文件中,然后重新启动UFW(sudo systemctl restart ufw)。
然后,您可以在ufw命令中将IPv4替换为IPv6地址,如下所示。
sudo ufw allow in from 2607:f8b0:4005:804::200e to any port 587
请注意,您不能在IPv4规则之间插入IPv6规则。 IPv6规则应始终放在IPv4规则之后。
如何使用UFW设置IP伪装
有时您想要设置自己的VPN服务器,那么您将需要在VPN服务器上设置IP伪装,以使其成为VPN客户端的虚拟路由器。 不幸的是,UFW并没有提供方便的方法。 我们必须在UFW配置文件中添加iptables命令。
sudo nano /etc/ufw/before.rules
默认情况下,对于 filter
表。 在此文件的末尾添加以下行。
# NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Forward traffic through eth0 - Change eth0 to match your network interface -A POSTROUTING -o eth0 -j MASQUERADE # End each table with the 'COMMIT' line or these rules won't be processed COMMIT
请注意,如果您的主网络接口不是 eth0
,您需要进行更改 eth0
您的网络接口名称,可以使用 ip addr
命令。 并且由于我们正在将防火墙规则添加到新表中,即 nat
表中,我们需要添加“ COMMIT”行。
默认情况下,UFW禁止数据包转发,这非常好,因为它可以阻止Internet上的随机人使用您的设备来进行恶意操作。 但是我们需要允许转发专用网络。 找出 ufw-before-forward
链,并添加以下3行,如果源IP或目标IP在 10.10.10.0/24
范围。
# allow forwarding for trusted network -A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
保存并关闭文件。 然后重新启动UFW。
sudo ufw disable sudo ufw enable
或简单地
sudo systemctl restart ufw
尽管这与UFW配置无关,但是为了路由数据包,您还需要设置IP转发。 这可以通过在末尾设置以下内容来完成 /etc/sysctl.conf
文件。
net.ipv4.ip_forward = 1
然后使用以下命令应用更改。
sudo sysctl -p
如何在UFW中设置端口转发
如果您在路由器上使用UFW,并且想要将HTTP请求之类的数据包路由到内部LAN主机怎么办? 在这种情况下,您需要设置端口转发。 编辑/etc/ufw/before.rules文件。
sudo nano /etc/ufw/before.rules
然后在NAT表中COMMIT行上方添加以下行。 将12.34.56.78替换为路由器的公共IP地址。
:PREROUTING ACCEPT [0:0] # forward 12.34.56.78 port 80 to 192.168.1.100:80 # forward 12.34.56.78 port 443 to 192.168.1.100:443 -A PREROUTING -i eth0 -d 12.34.56.78 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 -A PREROUTING -i eth0 -d 12.34.56.78 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:443
这告诉UFW将HTTP和HTTPS请求转发到本地网络中的192.168.100主机。 重新启动UFW,以使更改生效。
sudo systemctl restart ufw
如果192.168.1.100主机也正在运行UFW,则需要在UFW中允许端口80和443。
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
您还需要启用IP转发 /etc/sysctl.conf
如上所述的文件。
如何在云服务器上阻止BitTorrent流量
如果您在云上运行服务器,则可能要阻止该服务器上的BitTorrent流量,因为如果您或其他人意外地通过BitTorrent下载了非法内容(电影,电视节目),并且您被捕获,则托管服务提供商可能会暂停您的帐户。
现代的BitTorrent客户端会加密同级之间的流量,因此区分BitTorrent流量和其他类型的流量并不容易。 虽然没有完美的方法来阻止BitTorrent流量,但这是一个简单的解决方案。
默认情况下,阻止传出流量。
sudo ufw default deny outgoing
然后允许特定的传出端口。 例如,您需要允许DNS端口。
sudo ufw allow out 53
并且您需要允许端口80和443从存储库更新软件包。
sudo ufw allow out 80/tcp sudo ufw allow out 443/tcp
如果这是您的邮件服务器,则需要允许端口25。
sudo ufw allow out 25/tcp
重新启动UFW,以使更改生效。
sudo systemctl restart ufw
尽管这不是一个完美的解决方案,但是由于某些用户可能将其BitTorrent客户端配置为使用端口80或443,实际上这种情况很少见。 大多数用户只使用默认设置,当我在防火墙中强制执行上述规则时,我在服务器上的BitTorrent客户端立即停止了所有下载和上传。 如果它没有停止,请重新启动您的BitTorrent客户端或服务器。
阻止到特定IP地址的传出连接
首先,您需要允许传出流量。
sudo ufw default allow outgoing
然后使用以下命令阻止特定的IP地址:
sudo ufw insert 1 deny out to 12.34.56.78
重新启动UFW。
sudo systemctl restart ufw
UFW和fail2ban
Fail2ban是一个使用iptables防火墙阻止服务器遭受暴力攻击的程序。 UFW和Fail2ban不会互相干扰。
而已! 我希望本文能帮助您在Debian,Ubuntu和Linux Mint上使用UFW。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂