Ufw使用指南

描述

此程序(ufw)是为了使linux防火墙更易于使用和管理。(通常已默认安装)ufw与其它linux类防火墙一样,使用iptable作为后台。

安装方法:

 sudo apt-get install ufw

[编辑] 用法(复述中文含意)

[]是代表可选内容。可能需要root权限,如无法运行,请使用 sudo ufw……的命令结构。“”中的内容不能照抄,要按需要更改。

 ufw [--dry-run] enable|disable|reload
 命令[--试运行]激活|关闭|重新载入
 ufw [--dry-run] default allow|deny|reject [incoming|outgoing]
 命令[--试运行]默认 允许|阻止|拒绝 [访问本机|向外访问]
  • deny让访问者知道数据被拒绝(回馈拒绝信息),这样调试网络时就知道是防火墙阻止了访问。reject则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。
  • 这个默认策略。相当于“总策略”
  • 如果更改了默认策略,一些已经存在的规则可能需要手动修改。更多内容看“规则示例”一节。
 ufw [--dry-run] logging on|off|LEVEL
 命令[--试运行]日志 开启|关闭|“级别”
  • “级别”分为low、medium、high、full
  • low 记录与默认策略冲突的封装数据包(记录速度被限制)。记录与规则符合的数据包(没有要求关闭记录的)
  • medium 记录与默认策略冲突的数据包(包括被规则允许的)、无效数据包、所有新连接。记录速度被限制。
  • high 同medium,只是没有记录速度限制。附加记录所有数据包(有记录速度限制)。
  • full 与high等同,只是取消记录限制。

medium级别及更上级会记录许多内容,有可能短时间内撑爆你的硬盘。特别是用在服务器一类的机器上。

 ufw [--dry-run] reset
 命令[--试运行]复位
 ufw [--dry-run] status [verbose|numbered]
 命令[--试运行]状态 [详细|规则编号]
  • 这个命令可以查看现有规则
 ufw [--dry-run] show REPORT
 命令[--试运行]显示 “报告类型”
  • “报告类型”包括:raw,builtins,before-rules,user-rules,after-rules,logging-rules,listening
  • 它们都是基于iptable
    • raw 原始报告。它是所有报告的来源,除外listening。
    • builtins
    • before-rules
    • user-rules
    • after-rules
    • logging-rules
    • listening 监听。显示系统中处于监听状态的tcp端口和 开放状态的udp端口,以及对应的IP地址、网络设备。网络设备显示为‘*’时,表示这个端口绑定到了所有网络设备上。后面显示激活这个端口进行监听的规则。只有IPV6启用的时候,默认规则才会显示tcp6、udp6。


 ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit  [in|out][log|log-all] PORT[/protocol]
 命令[--试运行][删除] [插到“x号规则”之前] 允许|阻止|拒绝|限制 [进|出] [记录新连接|记录所有数据包] “端口” [/“协议”]
  • [insert NUM]插到“x号规则”之前。意思是把规则等级提前,序号在前的规则要优先于序号在后的规则。
  • deny让访问者知道数据被拒绝(回馈拒绝信息),这样调试网络时就知道是防火墙阻止了访问。reject则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。limit对连接数率进行限制,以防范暴力登录攻击。如果同一个IP地址在30秒之内进行了6次及6次以上的连接,ufw将阻止(deny)该连接。
  • [in|out]in接收数据包,out发送数据包。
  • PORT用具体的端口号代替,比如80
  • [/protocol]协议类型。不指定时,同时作用于tcp、udp。PORT[/protocol]的写法:8080/udp这样,中间没有空格。
 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号规则之前] 允许|阻止|拒绝|限制 [进|出 基于“什么网络设备”] [协议 “协议”] [来源 “地址” [端口 “端口”]] [目标 “地址” [端口 “端口”]]
  • [insert NUM]插到“x号规则”之前。意思是把规则等级提前,序号在前的规则要优先于序号在后的规则。
  • deny让访问者知道数据被拒绝(回馈拒绝信息),这样调试网络时就知道是防火墙阻止了访问。reject则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。limit对连接数率进行限制,以防范暴力登录攻击。如果同一个IP地址在30秒之内进行了6次及6次以上的连接,ufw将阻止(deny)该连接。
  • [in|out on INTERFACE]在某网络设备上in接收数据包,out发送数据包。比如规则只作用于无线网卡0号(一般表示为wlan0,你可以单独运行命令ifconfig来查看你有哪些网络设备)接收数据包,这点就写为:in on wlan0。
  • [from ADDRESS [port PORT]]规则应用于某IP地址(的“某端口”)。假如:主机192.168.1.2无限制上网,而虚拟机192.168.1.120禁止访问192.168.1.56。就用到ufw deny from 192.168.1.120 to 192.168.1.56
  • [to ADDRESS [port PORT]]规则应用于某IP地址来源(的“某端口”)。这里指外部IP地址,也就是传统意义上的防火墙设定。
 ufw [--dry-run] delete NUM
 命令[--试运行] 删除 “第X号规则”
  • 通过这个命令来获得规则号
ufw status


 ufw [--dry-run] app list|info|default|update
 命令 [--试运行] 程序 清单|信息|默认|更新

[编辑] 可直接跟在ufw后的参数

命令方式:(如:ufw -h)

ufw 参数
 --version
 显示程序版本号
 -h , --help
 显示帮助信息
 --dry-run
 不实际运行,只是把涉及的更改显示出来。
 enable
 激活防火墙,开机时自动启动
 disable
 关闭防火墙,开机时不启动
 reload
 重新载入防火墙
 reset [--force]
 关闭防火墙,并复位至初始安装状态。如果使用--force选项,则忽略确认提示。
 status
 显示防火墙的状态和已经设定的规则。使用status verbose显示更详细的信息。‘anywhere’与‘any’、‘0.0.0.0/0’一个意思。
 show “报告类型”
 显示防火墙运行信息。详细内容看“报告类型”
 limit “规则”
 限制连接次数。通常用于登录端口,防止暴力破解。如果同一个IP地址在30秒之内进行了6次及6次以上的连接,ufw将阻止(deny)该连接。
 此命令目前只能用于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

许可访问本机http端口(80)

 ufw reject out smtp

禁止访问外部smtp端口,不告知“被防火墙阻止”。

 ufw deny out to 192.168.1.1

禁止本机192.168.1.1对外访问。比如本机有多个IP时(通过虚拟网卡、多网卡等)。告知“被防火墙阻止”

  • 用户也可使用完整的规则来指定来源与目的地,还有端口。书写规则基于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

阻止来源为10.0.0.0/8(255.0.0.0)这个网络段的数据包通过tcp协议发送到192.168.0.1的25端口。

ufw reject out on wlan0 to 119.75.217.56

禁止通过本机无线网卡wlan0联接到119.75.217.56(已测试)

sudo ufw deny out on wlan0 from 192.168.1.2 to 119.75.217.56

禁止通过本机192.168.1.2无限网卡wlan0发送数据包到119.75.217.56(已测试)。当IP被改为192.168.1.3或其它就能通过wlan0连接到119.75.217.56

  • 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个。命令意思是阻止通过tcp协议发送数据包到80,443,8080~8090端口

  • 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
 要删除这条命令建立的规则,使用:
 ufw delete deny 80/tcp
 当然,也可以使用规则号来进行删除。比如要第3号规则
 ufw delete 3
 注意,如果你开启IPv6功能。要同时删除IPv4和IPv6的规则(比如:ufw allow 22/tcp),如果用规则号的方式删除可能只删除了一个。
  • 显示第几号规则,可以使用这样的命令
 ufw status numbered(也就是规则号)
  • 日志功能。如果使用log将记录所有符合规则的新连接,如果使用log-all将记录所有符合规则的数据包。例如,要允许并记录shh(22/tcp)上的新连接:
 ufw allow log 22/tcp
 更多内容看“日志sudo ufw default deny”一节

特殊例子:允许RFC1918网络结构访问本机:

ufw allow from 10.0.0.0/8
ufw allow from 172.16.0.0/12
ufw allow from 192.168.0.0/16

其实这个就是用CIDR(无类别域间路由选择,Classless and Subnet Address Extensions and Supernetting)的形式表示的一个网段,或者说子网。

192.168.0.0/24”就表示,这个网段的IP地址从192.168.0.1开始,到192.168.0.254结束(192.168.0.0和192.168.0.255有特殊含义,不能用作IP地址);子网掩码是255.255.255.0。

上面的子网掩码怎么来的呢?其实关键就在“24”上。我们知道IP地址是四个十进制数组成的,相当于32位二进制。用CIDR表示形式,后一个数字将这32位进行了间隔(以24为例):前24位用"1"表示,后面8位用0表示,得到一个二进制数:

11111111 11111111 11111111 00000000。

将其转化为十进制,就是:255.255.255.0了。这个不就是子网掩码,netmask。

对应的:

/8 就是 255.0.0.0; /16就是 255.255.0.0

比如要把192.168.0.0/24分为两个网络。192.168.0.0对应2进制为

11000000 10101000.00000000 00000000

子网掩码原为255.255.255.0

11111111 11111111 11111111 00000000


  • 192.168.0.0~192.168.0.127为一个网络;192.168.0.128~192.168.0.255为另一个网络。
  • 所属网络分别为192.168.0.0;192.168.0.128
  • 网络广播分别为192.168.0.127;192.168.0.255
  • 子网掩码为255.255.255.128;255.255.255.128。2进制表示为(25个1)
11111111 11111111 11111111 10000000

CIDR表示就很简单了:192.168.0.0/25即192.168.0.0~192.168.0.127;192.168.0.128/25即192.168.0.128~192.168.0.255

怎么样比你换算半天二进制要好得多吧。

[编辑] 远程管理

此章节还未被编辑

[编辑] 应用程序集成管理

  • ufw能从 /etc/ufw/applications.d. 中读取应用程序清单。你可以使用命令查看:
 ufw app list
  • 大家可以使用应用程序名字来增加规则。比如
 ufw allow <程序名字>
 ufw allow CUPS
 ufw allow from 192.168.0.0/16 to any app <程序名字>
 注意,端口号已经被程序名所对应的策略所包括,不要再重新列举端口号。
  • 查看程序名所对应的策略内容,命令:
 ufw app into <程序名字>
 注意:程序名字是清单上有的才行。程序名字改用用all,可以看全部策略。
  • 如果你编辑或者增加了程序清单,你可使用此命令更新防火墙:
 ufw app update <程序名字>
 程序名字改用用all,则更新整个清单。
  • 更新清单同时增加规则可以使用如下命令:
 ufw app update --add-new <程序名字>
 注意:update --add-new参数的行为由此命令配置:
 ufw app default skip|allow|deny
 默认是skip,也就是没有设定。

警告:如果程序规则设定为default allow ,将会引起很大的风险。请三思而后行!


[编辑] 报告

ufw的报告是基于系统。使用形式是iptable格式:

  • raw

完整报告,下面是该报告的细选。

  • builtins
  • before-rules
  • user-rules
  • logging-rules
  • listening

显示系统对tcp的监听和udp的开放状态。同时显示被监听端口的地址。如果地址变为“*”,说明该端口对所有地址开放。接下来是显示可能影响该端口的规则。

[编辑] 常用操作(新手操作)

查看ufw防火墙是否在工作,查看使用中的规则。

sudo ufw status

启动ufw防火墙

sudo ufw enable

启动默认防御(阻止外部联接,放行对外联接)。一般用户到这一步算是可以了。

sudo ufw default deny
  • 如果你只是只菜鸟,不建议你把deny换成reject。当网络不正常的时候,deny会告诉网络,你是被防火墙阻止了,而不是网络出问题了。

你可能感兴趣的:(Ufw使用指南)