UFW:修订间差异
(创建页面,内容为“UFW(Uncomplicated Firewall),是用于管理Linux内核netfilter防火墙的程序。传统使用强大的iptables操作netfilter, 但ufw提供少量简单命令管理,并基于iptables进行配置,更易于使用。从Ubuntu 8.04 LTS开始,ufw作为系统上默认的防火墙组件。 ==简介== ===时间轴=== ==快速入门== <syntaxhighlight lang="bash" > sudo ufw enable # 开启ufw sudo ufw default deny incoming sudo ufw…”) |
(→快速入门) |
||
(未显示同一用户的2个中间版本) | |||
第6行: | 第6行: | ||
==快速入门== | ==快速入门== | ||
<syntaxhighlight lang="bash" > | <syntaxhighlight lang="bash" > | ||
sudo ufw allow 80 | |||
sudo ufw allow 22 # 开启ssh端口,如果是其他修改为相应 | |||
# sudo ufw default deny incoming # 默认关闭所有进入端口,默认是deny incoming | |||
# sudo ufw default deny outgoing # 默认关闭所有出去端口,默认是allow outgoing | |||
sudo ufw enable # 开启ufw | sudo ufw enable # 开启ufw | ||
sudo ufw | sudo ufw status verbose # 查看ufw状态和默认策略 | ||
sudo ufw | # sudo ufw reload # 重启ufw | ||
ufw allow 80 | </syntaxhighlight> | ||
ufw | |||
sudo ufw status # | ==列出规则== | ||
sudo ufw | {| class="wikitable" | ||
! 名称 | |||
! 描述 | |||
! 示例 | |||
|- | |||
| status | |||
| 检查UFW的状态,并列出所有规则 | |||
| <code>sudo ufw status</code> | |||
|- | |||
| status verbose | |||
| 获取更详细信息,包含有关日志记录状态,默认策略等。 | |||
| <code>sudo ufw status verbose</code> | |||
|- | |||
| status numbered | |||
| 获取所有规则和其编号 | |||
| <code>sudo ufw status numbered</code> | |||
|} | |||
==删除规则== | |||
{| class="wikitable" | |||
! 名称 | |||
! 描述 | |||
! 示例 | |||
|- | |||
| delete allow/deny 端口号 | |||
| 根据端口号,删除相应规则。 | |||
| <code>sudo ufw delete allow 2222</code> <br /> <code>sudo ufw delete deny 80</code> | |||
|- | |||
| delete 编号 | |||
| 按规则编号删除。先使用<code>sudo ufw status numbered</code>查看规则编号。 | |||
|<syntaxhighlight lang="bash" > | |||
# 查看编号 | |||
sudo ufw status numbered | |||
# 删除编号为4的规则 | |||
sudo ufw delete 4 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|reset | |||
|重置删除所有规则,重置后默认是禁用ufw的。 | |||
|<code>sudo ufw reset</code> | |||
|} | |||
== docker失效 == | == docker失效 == | ||
第20行: | 第66行: | ||
{{了解更多 | {{了解更多 | ||
|[https://docs.docker.com/network/packet-filtering-firewalls/ Docker文档:网络/数据包过滤和防火墙 ] | |[https://docs.docker.com/network/packet-filtering-firewalls/ Docker文档:网络/数据包过滤和防火墙 ] | ||
|[https://github.com/chaifeng/ufw-docker GitHub:chaifeng/ufw-docker] | |||
}} | |||
=== 修改 UFW 配置文件 === | |||
一种方法是,修改 UFW 的配置文件 <code>sudo vim /etc/ufw/after.rules</code>,在最后添加上如下规则: | |||
<syntaxhighlight lang="text" > | |||
# BEGIN UFW AND DOCKER | |||
*filter | |||
:ufw-user-forward - [0:0] | |||
:ufw-docker-logging-deny - [0:0] | |||
:DOCKER-USER - [0:0] | |||
-A DOCKER-USER -j ufw-user-forward | |||
-A DOCKER-USER -j RETURN -s 10.0.0.0/8 | |||
-A DOCKER-USER -j RETURN -s 172.16.0.0/12 | |||
-A DOCKER-USER -j RETURN -s 192.168.0.0/16 | |||
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN | |||
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 | |||
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 | |||
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 | |||
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 | |||
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 | |||
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 | |||
-A DOCKER-USER -j RETURN | |||
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] " | |||
-A ufw-docker-logging-deny -j DROP | |||
COMMIT | |||
# END UFW AND DOCKER | |||
</syntaxhighlight> | |||
然后重启 UFW, <code>sudo ufw reload</code>或<code>sudo systemctl restart ufw</code>,如果还是不生效,重启服务器。 | |||
如果容器端口80,注意这个端口不是对应的主机端口。那就可以用以下命令来允许外部网络访问这个服务: | |||
<syntaxhighlight lang="bash" > | |||
ufw route allow proto tcp from any to any port 80 | |||
</syntaxhighlight> | |||
如果有多个容器的服务端口为 80,但只希望外部网络访问某个特定的容器。比如该容器的私有地址为 172.17.0.2,就用类似下面的命令: | |||
<syntaxhighlight lang="bash" > | |||
ufw route allow proto tcp from any to 172.17.0.2 port 80 | |||
</syntaxhighlight> | |||
{{了解更多 | |||
|[https://github.com/chaifeng/ufw-docker GitHub:chaifeng/ufw-docker] | |[https://github.com/chaifeng/ufw-docker GitHub:chaifeng/ufw-docker] | ||
}} | }} |
2024年3月14日 (四) 08:45的最新版本
UFW(Uncomplicated Firewall),是用于管理Linux内核netfilter防火墙的程序。传统使用强大的iptables操作netfilter, 但ufw提供少量简单命令管理,并基于iptables进行配置,更易于使用。从Ubuntu 8.04 LTS开始,ufw作为系统上默认的防火墙组件。
简介
时间轴
快速入门
sudo ufw allow 80
sudo ufw allow 22 # 开启ssh端口,如果是其他修改为相应
# sudo ufw default deny incoming # 默认关闭所有进入端口,默认是deny incoming
# sudo ufw default deny outgoing # 默认关闭所有出去端口,默认是allow outgoing
sudo ufw enable # 开启ufw
sudo ufw status verbose # 查看ufw状态和默认策略
# sudo ufw reload # 重启ufw
列出规则
名称 | 描述 | 示例 |
---|---|---|
status | 检查UFW的状态,并列出所有规则 | sudo ufw status
|
status verbose | 获取更详细信息,包含有关日志记录状态,默认策略等。 | sudo ufw status verbose
|
status numbered | 获取所有规则和其编号 | sudo ufw status numbered
|
删除规则
名称 | 描述 | 示例 |
---|---|---|
delete allow/deny 端口号 | 根据端口号,删除相应规则。 | sudo ufw delete allow 2222 sudo ufw delete deny 80
|
delete 编号 | 按规则编号删除。先使用sudo ufw status numbered 查看规则编号。
|
# 查看编号
sudo ufw status numbered
# 删除编号为4的规则
sudo ufw delete 4
|
reset | 重置删除所有规则,重置后默认是禁用ufw的。 | sudo ufw reset
|
docker失效
ufw对docker容器不起作用,因为Docker和ufw使用iptables的方式使它们彼此不兼容。使用 Docker 开发的容器的端口时,进出该容器的流量在通过ufw防火墙设置之前被转移。
修改 UFW 配置文件
一种方法是,修改 UFW 的配置文件 sudo vim /etc/ufw/after.rules
,在最后添加上如下规则:
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP
COMMIT
# END UFW AND DOCKER
然后重启 UFW, sudo ufw reload
或sudo systemctl restart ufw
,如果还是不生效,重启服务器。
如果容器端口80,注意这个端口不是对应的主机端口。那就可以用以下命令来允许外部网络访问这个服务:
ufw route allow proto tcp from any to any port 80
如果有多个容器的服务端口为 80,但只希望外部网络访问某个特定的容器。比如该容器的私有地址为 172.17.0.2,就用类似下面的命令:
ufw route allow proto tcp from any to 172.17.0.2 port 80
了解更多 >> GitHub:chaifeng/ufw-docker
资源
官网
- UFW 官网:https://launchpad.net/ufw
- UFW 源代码:https://git.launchpad.net/ufw