云网牛站
所在位置:首页 > Linux安全 > Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

2019-02-17 10:11:15作者:叶云稿源:云网牛站

本文介绍在Debian、Ubuntu、Linux Mint系统中使用UFW(Uncomplicated FireWall)和一些示例,都是基本的入门教程。管理防火墙是每个系统管理员都需要知道的基本技能,本文旨在让读者开始使用UFW。

UFW是iptables的前端,可以更轻松地管理Netfilter防火墙,它提供了一个命令行界面,其语法类似于OpenBSD的包过滤器,它特别适合作为基于主机的防火墙,UFW是基于Debian的Linux Distros的推荐iptables前端,通常预先安装在这些发行版上,默认情况下,UFW为IPv4和IPv6地址设置防火墙规则,另一个着名的iptables前端是firewalld(CentOS 7下使用FirewallD构建动态防火墙),它是基于RPM的Linux发行版(RHEL、CentOS、Fedora、OpenSUSE等)上的默认防火墙应用程序。

 

禁用其他Iptables还原服务

你可能知道,当操作系统关闭且iptables程序本身无法恢复防火墙规则时,将刷新iptables防火墙规则,UFW默认在系统重启后恢复防火墙规则,在使用UFW之前,检查系统上是否有另一个iptables恢复服务非常重要,如果有两个还原服务,它们将相互冲突,这通常会导致系统重新引导后Web应用程序不可用。

如果你直接使用iptables防火墙,现在你想切换到UFW,你只需要禁用你的iptables恢复服务, Iptables-persistent是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

注意:可以使用sudo pacman -S ufw在Arch Linux上安装UFW,但还需要使用sudo systemctl enable ufw启用UFW systemd服务。

安装时,ufw已禁用,你可以使用以下方式检查UFW状态:

sudo ufw status

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

UFW附带一个默认的拒绝传入策略,一个默认的拒绝转发策略,以及一个默认的允许传出策略,对传入和转发连接的新连接进行状态跟踪,在启用UFW之前,你需要知道在服务器的公共IP地址上打开了哪些端口,这可以在nmap(网络映射器)的帮助下获得。

在Debian/Ubuntu/Linux Mint服务器上安装nmap并扫描公共IP地址上的已打开端口:

sudo apt install nmap

sudo nmap 12.34.56.78

将12.34.56.78替换为服务器的实际公共IP地址,从下面的屏幕截图中可以看出,我的服务器上有几个打开的端口:

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

还有打开的端口只能侦听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

 

启用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

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

现在,可以重新扫描服务器以找出仍在打开的端口:

sudo nmap 12.34.56.78

 

删除防火墙规则的方法

首先,你需要使用以下命令获取要删除的防火墙规则的引用号:

sudo ufw status numbered

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

然后,可以删除规则,例如,第8条规则:

sudo ufw delete 8

请注意,删除规则后参考编号将会更改,因此需要再次运行sudo ufw status编号以删除其他规则。

 

重置UFW

如果犯了错误,可以禁用并将防火墙重置为安装默认值:

sudo ufw reset

注,这个对初学者特别有用。

 

UFW应用程序配置文件

许多服务器程序附带UFW配置文件,可以列出所有应用程序配置文件:

sudo ufw app list

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

我们可以显示有关特定应用程序配置文件的信息,例如Apache Full配置文件:

sudo ufw app info "Apache Full"

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

我们可以看到此配置文件使用的端口是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

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

请注意,需要删除IPv4和IPv6规则,另请注意,如果先删除上限规则,则下限规则的引用号将更改。

从现在开始,只有你的IP地址可以访问TCP端口22。

 

使用UFW设置IP伪装

有时想要设置自己的VPN服务器,然后需要在VPN服务器上设置IP伪装,以便它成为VPN客户端的虚拟路由器,不幸的是,UFW没有提供一种方便的方法来做到这一点,我们必须在UFW配置文件中添加iptables命令:

sudo nano /etc/ufw/before.rules

默认情况下,过滤表有一些规则,在此文件的末尾添加以下行:

# 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

Debian、Ubuntu、Linux Mint系统中的UFW防火墙入门教程

请注意,如果你的主网络接口不是eth0,则需要将eth0更改为你的网络接口名称,可以使用ip addr命令获取,因为我们要将防火墙规则添加到新表,即nat表,所以我们需要添加'COMMIT'行。

保存并关闭文件,然后编辑/etc/default/ufw文件:

sudo nano /etc/default/ufw

将默认转发策略从“DROP”更改为“ACCEPT”:

DEFAULT_FORWARD_POLICY="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和fail2ban的说明

Fail2ban是一个使用iptables防火墙防止服务器遭受暴力攻击的程序,UFW和Fail2ban不会相互干扰。

 

相关主题

Ubuntu 16.04桌面版Gufw防火墙的基本使用方法

精选文章
热门文章