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

相关文章

来自专栏Golang语言社区

【Go 语言社区】再看GOPATH

GOPATH环境变量用于指定这样一些目录:除$GOROOT之外的包含Go项目源代码和二进制文件的目录。go install和go 工具会用到GOPATH:作为编...

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

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

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

3214
来自专栏服务端技术杂谈

获取线程池中任务执行数量

通过ThreadPoolExecutor的相关API实时获取线程数量,排队任务数量,执行完成线程数量等信息。

772
来自专栏blackpiglet

使用 Prometheus 监控 Ceph

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

3664
来自专栏刺客博客

更改Linux默认端口,并设置仅允许密钥登录

5375
来自专栏优启梦

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

HSTS(HTTP Strict Transport Security)国际互联网工程组织 IETE 正在推行一种新的 Web 安全协议,作用是强制客户端(如浏...

4437
来自专栏王二麻子IT技术交流园地

五、VueJs 填坑日记之将接口用webpack代理到本地

上一篇博文,我们已经顺利的从cnodejs.org请求到了数据,但是大家可以注意到我们的/src/api/index.js的第一句就是: // 配置API接口地...

60610
来自专栏hbbliyong

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

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

3938
来自专栏hbbliyong

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

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

3406
来自专栏张戈的专栏

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

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

4150

扫码关注云+社区

领取腾讯云代金券