如何使用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 条评论
登录 后参与评论

相关文章

来自专栏章鱼的慢慢技术路

Linux操作系统配置Go语言编程环境

之前一直在windows下写Go,现在工作环境切换至Linux下,因此写下此文,记录安装Go环境的过程。

1033
来自专栏张戈的专栏

利用HSTS安全协议柔性解决全站HTTPS的兼容性问题

导读:目前,很多站都开始实现 HTTPS 了,而且其中的大部分强迫症站长还会开启强制 HTTPS 机制,对于网站的 HTTP 请求全部 301 跳转到 HTTP...

2886
来自专栏张戈的专栏

利用 HSTS 安全协议柔性解决全站 HTTPS 的兼容性问题

目前,很多站都开始实现HTTPS了,而且其中的大部分强迫症站长还会开启强制HTTPS机制,对于网站的HTTP请求全部301跳转到HTTPS,从而实现全站HTTP...

3880
来自专栏康怀帅的专栏

Golang 简单使用

官方网站:https://golang.org/ GitHub:https://github.com/golang 变量 $GOROOT go 安装路径 $GO...

2715
来自专栏菜鸟程序员

开启HSTS让浏览器强制跳转HTTPS访问

2683
来自专栏禅林阆苑

macos下golang配置 【原创】

macos下golang配置 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.c...

2615
来自专栏hbbliyong

应用TortoiseGit为github账号添加SSH keys,解决pull总是提示输入密码的问题

每次同步或者上传代码到githun上的代码库时,需要每次都输入用户名和密码,这时我们设置一下SSH key就可以省去这些麻烦了。若果使用TortoiseGit作...

3818
来自专栏csxiaoyao

macos下golang配置

6856
来自专栏linux驱动个人学习

推挽输出和开漏输出的区别

推挽输出,可以输出高电平,连接数字器件: 输出0时,N-MOS导通,P-MOS高阻,输出0。 输出1时,N-MOS高阻,P-MOS高阻,输出1;(不需要外部上拉...

3164
来自专栏blackpiglet

使用 Prometheus 监控 Ceph

本文是在 Ubuntu 16.04 最新版基础上安装 Prometheus 监控系统,Ceph 版本为 Luminous 12.2.8。

2794

扫码关注云+社区