正文:
在 Ubuntu 中,我们可以使用 ufw 来管理防火墙。相比于 iptables 的复杂规则,ufw 提供了更加方便的管理方式。因此,了解 ufw 的基本使用方法是很有必要的。值得一提的是,ufw 不仅适用于 Ubuntu,Centos 也可以使用它来管理防火墙。不过,Centos 默认使用 firewalld 来进行管理。
1. 安装 ufw
# Ubuntu 安装
sudo apt-get install ufw
# Centos 安装
sudo yum install ufw
2. 启用/禁用 ufw
sudo ufw enable
这里需要注意的是,ufw 开启后默认会拒绝所有流量,如果是使用 ssh 连接,可能会断开。
禁用 ufw:
sudo ufw disable
3. 设置 ufw 默认规则
前面提到 ufw 默认是拒绝所有入流量,但是这个是可以修改的。
默认接收所有入流量:
sudo ufw default allow
默认拒绝所有入流量:
sudo ufw default allow
4. 允许/拒绝特定端口
4.1 在后面添加规则
开放 22 端口
# 开放所有
sudo ufw allow 22
# 仅对 192.168.0.100 开放
sudo ufw allow from 192.168.0.100
# 仅对 192.168.0.100 主机开放 22 端口
sudo ufw allow from 192.168.0.100 to any port 22
# 在指定主机的同时,只开放 22 端口的 tcp
sudo ufw allow from 192.168.0.100 proto tcp to any port 22
关闭 22 端口:
# 拒绝所有
sudo ufw deny 22
# 拒绝整个网段
sudo ufw deny from 192.168.0.0/24
# 仅拒绝 192.168.0.0/24 这个网段请求 22 端口
sudo ufw deny from 192.168.0.0/24 to any port 22
# 限定网段的同时,指定只限制 22 端口的 tcp
sudo ufw deny from 192.168.0.0/24 proto tcp to any port 22
4.2 在指定位置添加规则
sudo ufw insert 1 allow 22
4.3 拒绝某个端口的流量
reject 和 deny 不同的是,reject 会明确的告诉客户端拒绝,客户端能收到响应;而 deny 则是丢弃来自客户端的流量,这样客户端会一直尝试连接,直到超时。
sudo ufw reject 80
4.4 特定端口范围
可以使用 ufw 指定端口范围,一些应用程序使用多个端口,而不是单个端口。
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
5. 删除特定规则
5.1 按规则删除
删除允许规则:
sudo ufw delete allow 80
删除拒绝规则:
sudo ufw delete deny 80
5.2 按序号删除
删除第一条规则
5.2 按序号删除
删除第一条规则
sudo ufw delete 1
6. 查看防火墙状态
sudo ufw status verbose
7. 重置防火墙
删除所有规则,并将防火墙关闭。
sudo ufw reset
8. 禁 ping 和取消
需要编辑 /etc/ufw/before.rules 文件:
# 禁止 ping
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
# 允许 ping
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
然后执行如下命令重载 ufw 规则:
sudo ufw force-reload
注意事项
如果启用 ufw 后虚拟机无法 ping 通,原因可能是 ufw 没有允许 ip 转发导致的,编辑 /etc/default/ufw 允许 ip 转发。
DEFAULT_FORWARD_POLICY="ACCEPT"