TranslateProject/translated/tech/20161201 How to Configure a Firewall with UFW.md
2016-12-29 15:00:43 +08:00

7.4 KiB
Raw Blame History

如何用UFW配置防火墙

UFW或者称之为_uncomplicated firewall_是一个Arch Linux、Debian或Ubuntu中管理防火墙规则的前端。 UFW通过命令行使用尽管它有可用的GUI它的目的是使防火墙配置简单或不复杂

How to Configure a Firewall with UFW

开始之前

  1. 熟悉我们的入门指南并完成设置Linode主机名和时区的步骤。

  2. 本指南将尽可能使用sudo。 完成保护你的服务器指南的部分创建一个标准用户帐户加强SSH访问和删除不必要的网络服务。 不要遵循创建防火墙部分 - 本指南是介绍使用UFW的它对于iptables而言是一个单独的控制防火墙的方法。

  3. 升级系统

    Arch Linux

    sudo pacman -Syu
    

    Debian / Ubuntu

    sudo apt-get update && sudo apt-get upgrade
    

安装 UFW

UFW默认包含在Ubuntu中但必须安装在Arch和Debian中。 Debian将自动启用UFW的systemd单元并使其在重新启动时启动但Arch不会。 这与告诉UFW启用防火墙规则不同因为使用systemd或者upstart启用UFW仅告知init系统打开UFW守护程序。

默认情况下UFW的规则集为空因此即使守护程序正在运行也不会强制执行任何防火墙规则。 强制执行防火墙规则集的部分在下面

Arch Linux

  1. 安装 UFW:

    sudo pacman -S ufw
    
  2. 启动并启用UFW的systemd单元:

    sudo systemctl start ufw
    sudo systemctl enable ufw
    

Debian / Ubuntu

  1. 安装 UFW

    sudo apt-get install ufw
    

使用UFW管理防火墙规则

设置默认规则

大多数系统只需要少量的端口打开传入连接,并且所有剩余的端口都关闭。 要一个简单的规则基础开始,ufw default命令可以用于设置对传入和传出连接的默认响应。 要拒绝所有传入并允许所有传出连接,那么运行:

sudo ufw default allow outgoing
sudo ufw default deny incoming

ufw default也允许使用reject参数。

除非明确允许规则否则配置默认deny或reject规则会锁定你的Linode。确保在应用默认deny或reject规则之前已按照下面的部分配置了SSH和其他关键服务的允许规则。

添加规则

可以有两种方式添加规则:用端口号或者服务名表示。

要允许SSH的22端口的传入和传出连接你可以运行

sudo ufw allow ssh

你也可以运行:

sudo ufw allow 22

相似的要在特定端口比如111deny流量,你需要运行:

sudo ufw deny 111

为了更好地调整你的规则你也可以允许基于TCP或者UDP的包。下面例子会允许80端口的TCP包

sudo ufw allow 80/tcp
sudo ufw allow http/tcp

这个会允许1725端口上的UDP包

sudo ufw allow 1725/udp

高级规则

除了基于端口的允许或阻止UFW还允许您通过IP地址、子网和IP地址/子网/端口组合来允许/阻止。

允许从IP地址连接

sudo ufw allow from 123.45.67.89

允许特定子网的连接:

sudo ufw allow from 123.45.67.89/24

允许特定IP/端口组合:

sudo ufw allow from 123.45.67.89 to any port 22 proto tcp

proto tcp可以删除或者根据你的需求变成proto udp,所有例子的allow都可以根据需要变成deny

删除规则

要删除一条规则,在规则的前面加上delete。如果你希望不在允许HTTP流量你可以运行

sudo ufw delete allow 80

删除规则同样允许基于服务名。

编辑UFW的配置文件

虽然可以通过命令行添加简单的规则,但仍有可能需要添加或删除更高级或特定的规则。 在通过终端运行规则输入之前UFW将运行一个文件before.rules它允许回环、ping和DHCP。要添加或改变这些规则编辑/etc/ufw/before.rules这个文件。 before6.rules文件也位于IPv6的同一目录中。

还存在一个after.ruleafter6.rule文件用于添加在UFW运行添加命令行规则后需要添加的任何规则。

额外的配置文件位于/etc/default/ufw。 从此处可以禁用或启用IPv6可以设置默认规则并可以设置UFW以管理内置防火墙链。

UFW状态

你可以在任何时候使用命令:sudo ufw status查看UFW的状态。这会显示所有规则列表以及UFW是否是激活状态

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

启用防火墙

随着你选择规则完成,你初始运行ufw status可能会输出Status: inactive。 启用UFW并强制执行防火墙规则

sudo ufw enable

相似地禁用UFW规则

sudo ufw disable

这让UFW继续运行并且在下次启动时再次启动。

日志记录

你可以用下面的命令启动日志记录:

sudo ufw logging on

可以通过运行sudo ufw logging low|medium|high设计日志级别,可以选择low、 medium 或者 high。默认级别是low

常规日志类似于下面这样,位于/var/logs/ufw

Sep 16 15:08:14 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=123.45.67.89 DST=987.65.43.21 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=8475 PROTO=TCP SPT=48247 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0

初始的值有你的Linode的日期、时间、主机名。额外的信息包括

  • ** [UFW BLOCK]**此位置是记录事件的描述所在的位置。在这种例子中,它阻止了连接。

  • ** IN**如果这包含一个值,那么事件传入的

  • ** OUT**如果这包含一个值,那么事件是传出的

  • ** MAC**目的地和源MAC地址的组合

  • ** SRC**包源的IP

  • ** DST**包目的地的IP

  • ** LEN**数据包长度

  • ** TTL**数据包TTL或称为_time to live_。 如果没有找到目的地,它将在路由器之间跳跃,直到它过期。

  • ** PROTO**数据包的协议

  • ** SPT**包的源端口

  • ** DPT**包的目标端口

  • ** WINDOW**发送方可以接收的数据包的大小

  • ** SYN URGP**指示是否需要三次握手。 0表示不是。


via: https://www.linode.com/docs/security/firewalls/configure-firewall-with-ufw

作者:Linode 译者:geekpi 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出