专栏首页Linux 杂货铺如何使用UFW配置防火墙

如何使用UFW配置防火墙

如何使用UFW配置防火墙

使用UFW配置防火墙

UFW是什么?

UFW(Uncomplicated FireWall)是Arch Linux、Debian或Ubuntu中管理防火墙规则的前端工具。UFW通常在命令行环境下使用(尽管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 Linux及Debian中必须手动安装。Debian会自动启动UFW的systemd单元并使其在重启时启动,但Arch Linux并不会这样做。这与通知UFW启用防火墙规则不同,因为通过systemd或upstart启动UFW只会通知系统初始化程序启动UFW守护进程。

默认情况下,UFW的规则集为空——因此即使守护进程正在运行,也不会启用任何防火墙规则。启用防火墙规则集的内容将在页面下方进行介绍。

Arch Linux

1.安装UFW:

sudo pacman -S ufw

2.启动并启用UFW的systemd单元:

sudo systemctl start ufw
sudo systemctl enable ufw

Debian / Ubuntu

安装UFW

sudo apt-get install ufw

使用UFW管理防火墙规则

设置默认规则

大部分系统只需要一小部分端口为传入连接打开,其余所有端口均关闭。先从简单的基础规则开始,ufw default命令可用来设置对传入和传出连接的默认响应。要想拒绝所有传入连接并允许所有传出连接,请运行:

sudo ufw default allow outgoing
sudo ufw default deny incoming

ufw default命令还允许使用reject参数。

警告 除非有明确的允许规则,否则配置默认拒绝或拒绝规则可能会阻止您退出Linode。在应用默认拒绝或拒绝规则之前,请确保已按照以下部分为SSH和其他关键服务配置了允许规则。

添加规则

可以通过两种方式添加防火墙规则:声明端口号或声明服务名称

例如,要允许22端口上的传入和传出连接用于SSH,您可以运行:

sudo ufw allow ssh

您还可以运行:

sudo ufw allow 22

同样的,要拒绝某个端口上的流量(本例中为111端口),您只需运行:

sudo ufw deny 111

要进一步微调规则,您还可以允许基于TCP或UDP的数据包通过。以下命令将允许80端口上的TCP数据包通过:

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

而以下命令将允许1725端口上的UDP数据包通过:

sudo ufw allow 1725/ufw

高级规则

除了仅通过指定端口来添加允许或拒绝规则之外,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文件中的规则,该文件允许本地环回(loopback)、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

同样的,可通过以下命令禁用防火墙规则:

sudo ufw disable

注意 系统重启后UFW服务仍会启动并运行。

UFW日志

您可使用以下命令启用UFW日志记录:

sudo ufw logging on

日志级别可通过sudo ufw logging low|medium|high设置,lowmediumhigh分别对应从低到高的级别,默认级别为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

最开始的值分别表示日期,时间以及您的主机名。其他重要的字段包括:

  • UFW BLOCK:此位置表示日志描述所定位的位置。本例中,日志是在阻止连接时记录的
  • IN:如果该字段有值,表示这是一个传入连接
  • OUT:如果该字段有值,表示这是一个传出连接
  • MAC:目的MAC地址和源MAC地址的组合
  • SRC:数据包的源IP地址
  • DST:数据包的目的IP地址
  • LEN:数据包长度
  • TTL:TTL(Time To Live)包,或称为生存时间。表示在没有找到目的地址的情况下,数据包会在路由器之间传输多久直至过期
  • PROTO:数据包的协议
  • SPT:数据包的源端口
  • DPT:数据包的目标端口
  • WINDOW:发送方可以接收的数据包大小
  • SYN URGP:表示是否需要三次握手,0表示不需要

本文的版权归 苏易北 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 历史上12位伟大的程序员

    所谓程序员,是指那些能够创造、编写计算机程序的人。不论一个人是什么样的程序员,或多或少,他都在为我们这个社会贡献着什么东西。然而,有些程序员的贡献却超过了一个普...

    苏易北
  • 在Ubuntu 16.04上安装VNC

    虚拟网络计算( Virtual Network Computing ),或称作VNC,是一种图形桌面共享系统,允许您从一台计算机远程控制另一台计算机。VNC服务...

    苏易北
  • CentOS 7 安装 Docker CE

    旧版本的 Docker 在 CentOS 中的包名为docker或docker-engine。如果之前安装了 Docker 的旧版本,需要先卸载旧版 Docke...

    苏易北
  • linux下编译ffmpeg,并加入H264编码支持

    在linux 平台做FFMPEG视频编码的程序时,程序运行时提示错误:[h264_nvenc @ 0x2018080] Cannot load libcuda....

    zhangdd
  • 序列作为主键使用的原理、优缺点讨论

    这几天和同事一直在讨论关于表设计中主键选择的问题,用sequence作为主键究竟有什么好处,又有什么缺点,尤其是有些事务场景上下文需要用到创建的序列值,如何用?...

    bisal
  • 数据库PostrageSQL-高级特性

    在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性,这些特性有助于简化管理和防止数...

    cwl_java
  • Ubuntu18 的超详细常用软件安装

    心血来潮,在笔记本安装了Ubuntu 18 用于日常学习,于是有了下面的安装记录。

    未读代码
  • PetaLinux安装

    1、$ sudo dpkg-reconfigure dash 2、在弹出的界面选择“否”,禁用dash 3、$ sudo ls -al /bin/sh 如果看...

    FPGA开源工作室
  • 加速Github的访问及下载速度

    国内访问github的速度一直被广大网友及开发者所诟病,为了缓解这一现象,本文介绍几种方式加速,由于中国开发者人群越来越大,github也被微软收购,相信这个问...

    caoayu

扫码关注云+社区

领取腾讯云代金券