一、UFW介绍
LInux 原始的防火墙工具 iptables 由于过于繁琐,所以 ubuntu 系统默认提供了一个基于iptable 之上的防火墙工具 ufw。而 UFW 支持图形界面操作,只需在命令行运行 ufw 命令即能看到一系列的操作
UFW 全称为 Uncomplicated Firewall,是 Ubuntu 系统上默认的防火墙组件, 为了轻量化配置iptables 而开发的一款工具。 UFW 提供一个非常友好的界面用于创建基于 IPV4,IPV6 的防火墙规则。
Linux 2.4 内核以后提供了一个非常优秀的防火墙工具:netfilter/iptables,他免费且功能强大,可以对流入、流出的信息进行细化控制,它可以 实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter 工作在内核内部,而 iptables 则是让用户定义规则集的表结构。
但是 iptables 的规则稍微有些“复杂”,因此 ubuntu 提供了 ufw 这个设定工具,以简化 iptables 的某些设定,其后台仍然是 iptables。ufw 即 uncomplicated firewall 的简称,一些复杂的设定还是要去 iptables。
二、安装和应用
三、相关使用范例:
1、范例
允许 53 端口
sudo ufw allow 53
禁用 53 端口
sudo ufw delete allow 53
允许 80 端口
sudo ufw allow 80/tcp
禁用 80 端口
sudo ufw delete allow 80/tcp
允许 smtp 端口
sudo ufw allow smtp
删除 smtp 端口的许可
sudo ufw delete allow smtp
允许某特定 IP
sudo ufw allow from 192.168.254.254
删除上面的规则
sudo ufw delete allow from 192.168.254.254
2、开启/禁用相应端口或服务(举例说明)
sudo ufw allow 80 允许外部访问本机80端口
sudo ufw delete allow 80 禁止外部访问本机80 端口
sudo ufw allow from 192.168.1.1 允许此IP访问所有的本机端口
sudo ufw deny smtp 禁止外部访问smtp服务
sudo ufw delete allow smtp 删除上面建立的某条规则
sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 要拒绝所有的流量从TCP的10.0.0.0/8 到端口22的地址192.168.0.1
可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16
四、更详细的说明
[]是代表可选内容。可能需要root权限,如无法运行,请使用 sudo ufw……的命令结构。“”中的内容不能照抄,要按需要更改。
ufw [–dry-run] enable|disable|reload
命令[–试运行]激活|关闭|重新载入
ufw [–dry-run] default allow|deny|reject [incoming|outgoing]
命令[–试运行]默认 允许|阻止|拒绝 [访问本机的规则|向外访问的规则]
注:reject让访问者知道数据被拒绝(回馈拒绝信息)。deny则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。
ufw [–dry-run] logging on|off|LEVEL
命令[–试运行]日志 开启|关闭|“级别”
ufw [–dry-run] reset
命令[–试运行]复位
ufw [–dry-run] status [verbose|numbered]
命令[–试运行]状态 [详细|被编号的规则]
ufw [–dry-run] show REPORT
命令[–试运行]显示 “报告类型”
ufw [–dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out][log|log-all]
PORT[/protocol]
命令[–试运行][删除] [插到“x号规则”之前] 允许|阻止|拒绝|限制 [进|出] [记录新连接|记录所有数据包] “端口” [/“协议”]
ufw [–dry-run] [delete] [insert NUM]
allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol]
[from ADDRESS [port PORT]] [to ADDRESS [port PORT]]
命令 [–试运行][删除][插到x号规则之前] 允许|阻止|拒绝|限制 [进|出 基于“什么网络设备”] [协议 “协议”] [来源 “地址” [端口 “端口”]] [目标 “地址” [端口 “端口”]]
ufw [–dry-run] delete NUM
命令[–试运行] 删除 “第X号规则”
ufw [–dry-run] app list|info|default|update
命令 [–试运行] 程序
清单|信息|默认|更新
参数
–version
显示程序版本号
-h , –help
显示帮助信息
–dry-run
不实际运行,只是把涉及的更改显示出来。
enable
激活防火墙,开机时自动启动
disable
关闭防火墙,开机时不启动
reload
重新载入防火墙
default allow|deny|reject 方向
方向是指:向内(incoming)|向外(outgoing)。如果更改了默认策略,一些已经存在的规则可能需要手动修改。更多内容看“规则示例”一节。
logging on|off|“级别”
切换日志状态。日志记录包使用的是系统日志。“级别”有好几个,默认是低级(low)。详细内容看“日志”一节。
reset [–force]
关闭防火墙,并复位至初始安装状态。如果使用–force选项,则忽略确认提示。
status
显示防火墙的状态和已经设定的规则。使用status verbose显示更详细的信息。‘anywhere’与‘any’、‘0.0.0.0/0’一个意思。
show “报告类型”
显示防火墙运行信息。详细内容看“报告类型”
limit “规则”
此命令目前只能用于IPv4。还不支持IPv6.
规则示例
规则可以简写也可以完整表达。简写的规则只能指定端口和(或)协议被允许或阻止。默认是访问本机的规则(incoming)。例如:
ufw allow 53
允许机子访问本机53端口,协议包含tcp和udp。
如果要控制协议,只要加入“/协议”在端口后面就行了。例如:
ufw allow 25/tcp
允许其它机子使用tcp协议访问25端口。
UFW也可以检查
/etc/services文件,明白服务的名字及对应的端口和协议。我们使用服务的名称即可。
ufw allow smtp
UFW同时支持出入口过滤。用户可以使用in或out来指定向内还是向外。如果未指定,默认是in。例如:
ufw allow in http
ufw reject out smtp
ufw deny out to 192.168.1.1
阻止向192.168.1.1发送信息
用户也可使用完整的规则来指定来源与目的地,还有端口。书写规则基于OpenBSD PF。举例:
ufw deny proto tcp to any port 80
阻止本机用tcp协议在80端口发数据
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25
This will deny all traffic from the RFC1918 Class A network to tcp port 25 with
the address 192.168.0.1.(这条命令目前无法翻译 from 和 to的关系,希望后来者更改)
ufw也可以使用IPv6协议。但要事先在/etc/default/ufw 中设定IPv6为启动状态。举例:
ufw deny proto tcp from 2001:db8::/32 to any port 25
阻止IPv6为2001:db8::/32类型的地址,连接本机25端口
ufw可以连续例举端口号。端口号间必须使用逗号或分号,不能使用空格。“输入端口号”字符数最多不能超过15过(8080:8090算两个字符)。比如允许80,443,8080~8090这几个端口接受tcp传入连接。
ufw allow proto tcp from any to any port 80,443,8080:8090
此例,“输入端口号”字符数为4个。
ufw可以对连接数率进行限制,以防范暴力登录。如果同一个IP地址在30秒之内进行了6次及6次以上的连接,ufw将阻止(deny)该连接。可以查看更多信息。
ufw limit ssh/tcp
当然有些时候我们想让访问者知道他的访问被拒绝了,而不是保持沉默让他不知道哪出了问题。就使用reject代替deny
ufw reject auth
默认情况下ufw的所有规则针对所有网络设备(比如网卡1,网卡2,无线网卡1,虚拟网卡1……)。但是我们可以特别指定,某规则在什么网络设备上生效。注意只能使用设备号,不能用别名。比如有线网卡:eth0(你可以使用ifconfig命令查看你现有的网络设备)
ufw allow in on eth0 to any port 80 proto tcp
要删除规则,只要在命令中加入delete就行了。比如:
ufw deny 80/tcp
要删除这条命令建立的规则