【树莓派学习笔记】给树莓派安装防火墙

笔者前两天被隔离在宿舍,只能通过提前配置好的校园网内的一系列转发来连接服务器。为了安全考虑,还是给暴露端口的服务器安装防火墙。 由于笔者的树莓派上运行的服务较多,所以先拿它试试水。

UFW - Uncomplicated Firewall

ufw是Linux系统下简单好用的防火墙工具。不仅可以用来当防火墙限制出入站规则,还可以设置端口转发。

ufw的所有指令都必须以管理员身份执行。使用如下指令可以查看防火墙状态。

$ sudo ufw status
Status: inactive

安装

如果没有安装ufw可以使用包管理工具进行安装,以Debian为例可以使用如下指令。

sudo apt install ufw

允许ssh通过

由于笔者的树莓派没有显示器,所有操作都基于ssh。所以在打开防火墙之前先允许ssh通过。

sudo ufw allow OpenSSH
sudo ufw allow in ssh

启动防火墙。

sudo ufw enable

这时候再查看防火墙状态就会丰富一些了。

$ sudo ufw status
Status: active

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

端口转发

端口转发需要编辑文件/etc/ufw/before.rules。在*filter字段前插入*nat字段。端口转发的模板如下。

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport exposed_port -j REDIRECT --to-port effective_port
COMMIT

笔者这里将1998端口的数据全部转发到22端口,插入结果如下。

$ sudo head before.rules -n 20
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 1998 -j REDIRECT --to-port 22
COMMIT

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

然后重新加载防火墙。

sudo ufw reload

允许特定服务通过防火墙

ufw/etc/services读取服务列表,这样可以直接从这里面允许或禁用服务。

less /etc/services

笔者在树莓派上搭建了一个网页服务器,需要允许http和https通过。

sudo ufw allow http
sudo ufw allow https

注意:不在/etc/services中的服务不能作为服务名传递给ufw

允许特定端口通过防火墙

笔者在树莓派上搭建了代理服务,该服务要求开放7890端口。

sudo ufw allow from any to any port 7890

该指令允许任意ip到任意ip对7890端口的访问。

其他功能

ufw的其他功能包括阻止特定ip等可以查看Ubuntu文档,或者在命令行输入指令man ufw来查看本地手册。

总结

笔者最开始有动力去研究防火墙是为了端口转发功能,早就听说防火墙安全但是繁琐,深入了解过后发现确实是麻烦不少。 在安全的网络环境下没有必要考虑防火墙。但是没有绝对安全的网络环境,所以各自斟酌。

参考

Ubuntu documentation: UFW

aruba cloud: How to manage and forward ports with UFW on Ubuntu 18.04