ufw命令简介

508c46df17962da302c041dfea239aa5.gif

正文共:3999 字 41 图,预估阅读时间:4 分钟

我们之前在CentOS系统中研究了iptables命令的使用方法iptables命令简介,还做了简单的应用实验如何通过iptables配置URL过滤黑名单?如何通过iptables配置URL过滤白名单?

等到CentOS一停服CentOS 7停服之后该怎么安装软件呢?,切换到Ubuntu发现系统有个用于管理Linux防火墙netfilter的程序ufw,ufw旨在为用户提供易于使用的界面。ufw并不打算通过其命令界面提供完整的防火墙功能,而是提供了一种添加或删除简单规则的简单方法。

接下来,让我们了解一下ufw命令的相关用法。

67b1de720e6c58bc3f54d5a96918beab.png

USAGE/命令

19d50df14b557c5333bb412b8878ff65.png

ufw [--dry-run] enable|disable|reload
ufw [--dry-run] default allow|deny|reject [incoming|outgoing|routed]
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] [prepend] allow|deny|reject|limit [in|out] [log|log-all] [ PORT[/PROTOCOL] | APPNAME ] [comment COMMENT]
ufw [--dry-run] [rule] [delete] [insert NUM] [prepend] allow|deny|reject|limit [in|out [on INTERFACE]] [log|log-all] [proto PROTOCOL] [from ADDRESS [port PORT | app APPNAME ]] [to ADDRESS [port PORT | app APPNAME ]] [comment COMMENT]
ufw [--dry-run] route [delete] [insert NUM] [prepend] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto PROTOCOL] [from ADDRESS [port PORT | app APPNAME]] [to ADDRESS [port PORT | app APPNAME]] [comment COMMENT]
ufw [--dry-run] [--force] delete NUM
ufw [--dry-run] app list|info|default|update

9a0a671dd7e8a5ab9416820c43407fc5.png

OPTIONS/选项

7cb7e6d670f85e5bc2dc32486c588dff.png

--version

显示程序的版本号并退出。

27a91bb34e325b7b6f88ece35d06e745.png

-h, --help

显示帮助信息并退出。

799a72015cbae7104916342fb0414af7.png

--dry-run

不修改任何内容,只显示更改。

enable

重新加载防火墙并在启动时启用防火墙。

disable

卸载防火墙并在启动时禁用防火墙。

reload

重新加载防火墙。

default allow|deny|reject DIRECTION

更改DIRECTION流向流量的默认策略,其中DIRECTION是传入、传出或路由之一。请注意,在更改默认策略时,必须手动迁移现有规则。有关deny和reject的详细信息,请参阅“RULE SYNTAX/规则语法”章节。

logging on|off|LEVEL

切换日志记录。记录的数据包使用LOG_KERN系统日志功能。支持rsyslog配置的系统也可以记录到/var/log/ufw.log。指定LEVEL将打开指定LEVEL的日志。默认日志级别为“low/低”。有关详细信息,请参阅“LOGGING/日志”章节。

reset

禁用防火墙并将其重置为安装默认值。还可以提供--force选项来执行重置,而无需确认。

e396365e1ca5daf992b2d25268be5ccc.png

status

显示防火墙和ufw管理规则的状态。使用status verbose命令可以获取额外信息。在状态输出中,“Anywhere”与“any”、0.0.0.0/0(IPv4)和::/0(IPv6)同义。请注意,在使用status命令时,在报告接口时会有细微的差异。例如,如果添加了以下规则:

ufw allow in on ens33 from 192.168.0.0/16
ufw allow out on ens37 to 10.0.0.0/8
ufw route allow in on ens33 out on ens37 to 10.0.0.0/8 from 192.168.0.0/16
ufw limit 2222/tcp comment 'SSH port'

db1159b870cc9a54e1c353ef5b7589bc.png

对于输入和输出规则,接口是相对于将防火墙系统作为端点来报告的;而对于路由规则,接口则是相对于数据包流经防火墙的方向来报告的。

show REPORT

显示有关正在运行的防火墙的信息。参见“REPORTS/报告”章节。

allow ARGS

添加允许规则。参见“RULE SYNTAX/规则语法”章节。

deny ARGS

添加拒绝规则。参见“RULE SYNTAX/规则语法”章节。

reject ARGS

添加拒绝规则。参见“RULE SYNTAX/规则语法”章节。

limit ARGS

添加限制规则。参见“RULE SYNTAX/规则语法”章节。

delete RULE|NUM

删除RULE相应的规则。

insert NUM RULE

使用规则编号NUM插入相应的RULE规则

prepend RULE

在规则集的顶部预先添加相应的RULE规则。

bfc8a9de2e8e1ad3fc7aa8af06f9d008.png

RULE SYNTAX/规则语法

a327afa0fab9b5b3285ac4f940bb7e41.png

用户可以使用简单语法或完整语法指定规则。简单的语法仅指定端口,以及在主机上允许或拒绝的协议(可选)。

这两种语法都支持为规则指定注释。对于现有规则,指定不同的注释将更新注释,指定''将删除注释。

使用简单语法的规则示例:

ufw allow 53

8893f77240ca41c3f6abb7f6f05acdea.png

此规则将允许tcp和udp端口53到此主机上的任何地址。若要指定协议,请将“/protocol”附加到端口。例如:

ufw allow 25/tcp

ae941dfdbd25ba887e9a91f5104fafe6.png

这将允许tcp端口25连接到此主机上的任何地址。如果按名称指定服务,ufw还将检查/etc/services的端口和协议。如:

ufw allow smtp

93292f9c2cd0b47d69044b2801d07e77.png

ufw支持入方向和出方向过滤,用户可以选择为传入或传出流量指定入口或出口方向。如果没有提供方向,则该规则适用于传入流量。如:

ufw allow in http
ufw reject out smtp
ufw reject telnet comment 'telnet is unencrypted'

42ea61d0d5a3524ca5ba76dff1d0f2c3.png

用户还可以使用更完整的语法,指定源、目的的地址和端口。此语法松散地基于OpenBSD的PF语法。例如

ufw deny proto tcp to any port 80

9f2708d5854518f790c747479cc7082b.png

这将拒绝此主机上TCP端口80的所有流量。另一个例子:

ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25

2ca86665f6cbb05fc19308ec5b32fd4e.png

这将拒绝从RFC1918私有互联网的地址分配定义的A类网络(10.0.0.0/8)到IP地址192.168.0.1的TCP端口25的所有流量。

ufw deny proto tcp from 2001:db8::/32 to any port 25

a18ed0729f426f86dabfbcd696a3f9b8.png

这将拒绝从IPv6地址2001:db8::/32到此主机上的TCP端口25的所有流量。必须在/etc/default/ufw中启用IPv6才能使IPv6防火墙工作

ufw deny in on eth0 to 224.0.0.1 proto igmp

6686738b1f4d659bd7e7ab5da5012ffb.png

这将拒绝eth0接口上去往224.0.0.1的所有IGMP流量。

ufw allow in on eth0 to 192.168.0.1 proto gre

a2f87bed7af3a5581e9bc52d436b99c5.png

这将允许eth0接口上的所有去往192.168.0.1的GRE流量。

ufw allow proto tcp from any to any port 80,443,8080:8090 comment 'web app'

e650c03187baf0a95d63d763ebb81129.png

上述内容将允许所有访问TCP端口80、443和8080-8090的流量,并为规则添加注释。指定多个端口时,端口列表必须是数字的,不能包含空格,并且必须作为一个整体进行修改。例如,在上述示例中,您后续不能仅尝试删除“443”端口。您不能指定超过15个端口(范围计为2个端口,因此上述示例中的端口计数为4)。

ufw支持多种不同的协议。以下内容在任何规则中都有效,并在未指定协议时启用:

tcp、udp
ufw allow proto tcp from any to any
ufw allow proto udp from any to any

f72d218f0820bc4409966eb08c0613f8.png

以下内容有一定的限制,未指定协议时无法启用:

ah:无端口号有效

esp:无端口号有效

gre:无端口号有效

ipv6:适用于IPv4地址,无端口号

igmp:适用于IPv4地址,无端口号

对于不是发往本主机,但应通过防火墙路由/转发的流量的规则,应在规则之前指定路由关键字(路由规则与PF语法有很大不同,而是考虑了netfilter FORWARD链的约定)。例如:

ufw route allow in on eth1 out on eth2

f2341e885a2977676b98754bb1adb19d.png

这将允许所有从eth1流入并且路由到eth2流出的流量穿过防火墙。

ufw route allow in on eth0 out on eth1 to 12.34.45.67 port 80 proto tcp

192474832d9081a86f8ffabf7c71b32a.png

此规则允许在eth0流入的、在eth1流出的去往任何12.34.45.67的TCP端口80的数据包穿过防火墙。

除了路由规则和策略外,您还必须设置IP转发。这可以通过在/etc/ufw/sysctl.conf中设置以下内容来实现:

net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

e1d2c41634e606c35aa0946fa3ca9d3d.png

然后重新启动防火墙:

ufw disable
ufw enable

67bd6e64d248f6e1b2e0c6f1b5bdbe68.png

请注意,设置内核可调参数是特定于操作系统的,ufw sysctl设置可能会被覆盖。有关详细信息,请参阅sysctl手册页。

ufw支持连接速率限制,这对于防止暴力登录攻击非常有用。当使用限制规则时,ufw通常会允许连接,但如果IP地址试图在30秒内发起6个或更多连接,则会拒绝连接。典型用法是:

ufw limit ssh/tcp

328dfeda4212c9d7f517e343ae00671d.png

有时,最好让发件人知道流量何时被拒绝,而不是简单地忽略它。在这种情况下,使用reject而不是deny。例如:

ufw reject auth

a084c81fefedc2bd44cfcbb8de6a67d1.png

默认情况下,ufw将对所有可用接口应用规则。为了限制这一点,请在INTERFACE上指定DIRECTION,其中DIRECTION是in或out之一(不支持接口别名)。例如,要允许eth0上的所有新传入HTTP连接,请使用:

ufw allow in on eth0 to any port 80 proto tcp

a23c877be906201d761e42eeaf20fbd8.png

要删除规则,只需在原始规则前加上delete,可以添加或不添加规则注释。例如,如果原始规则是:

ufw deny 80/tcp

使用此选项删除它:

ufw delete deny 80/tcp

51412e4a0669b793a9e1b3b0592ac925.png

您还可以按NUM指定规则,如状态编号的输出所示。例如,如果要删除规则编号“3”,请使用:

ufw delete 3

e297f883353b2cf769a16d57953eaab8.png

如果您启用了IPv6,并且正在删除适用于IPv4和IPv6的通用规则(例如“ufw allow 22/tcp”),则按规则编号删除将仅删除指定的规则。要使用一个命令同时删除这两个,请在原始规则前加上delete。

要插入规则,请正常指定新规则,但在规则前加上要插入的规则编号。例如,如果您有四条规则,并且要插入一条新规则作为第三条规则,请使用:

ufw insert 3 deny to any port 22 from 10.0.0.135 proto tcp

1a2ede8fd79ccae91027d6c0e601f160.png

同样,要在匹配规则IP类型的所有其他规则之前添加规则,请使用前缀规则:

ufw prepend deny from 1.2.3.4

cac7f8ffb2854cbfeed9573dacc54d44.png

这对于IPS中的动态防火墙特别有用。重要的是,如果指定的规则是IPv4规则,则它将在所有其他IPv4规则之前添加。如果它是IPv6规则,它将在任何IPv6规则之前添加。

要查看编号规则列表,请使用:

ufw status numbered

a00d1fbfee7f3a8a65ce20746951b2fb.png

ufw支持按规则记录日志。默认情况下,当数据包与规则匹配时,不会执行日志记录。指定log级别将记录所有符合规则的新连接,而log-all将记录符合规则的所有数据包。例如,要允许并记录所有新的SSH连接,请使用:

ufw allow log 22/tcp

54c60e1c04716b4ae528ae0492d9e9d0.png

有关日志记录的更多信息,请参阅“LOGGING/日志”章节。

a077d64d3e72536da975e02cd7840676.png

示例

c314b2199d49955c89d362b471a9653e.png

拒绝所有对端口53的访问:

ufw deny 53

5ae37fd7b54a6ed99fe29332f53e745e.png

允许对TCP端口80的所有访问:

ufw allow 80/tcp

c8f9580810e19c6b48456ccc81720843.png

允许从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

7f2d380efcde826a4c9d9ab6863e2939.png

拒绝从主机1.2.3.4访问UDP端口514:

ufw deny proto udp from 1.2.3.4 to any port 514

c4977157ce7e3d7e08ce954716364821.png

允许从1.2.3.5的端口5469访问1.2.3.4的UDP端口5469:

ufw allow proto udp from 1.2.3.5 port 5469 to 1.2.3.4 port 5469

dc9dd40b1262c89e143013e167169218.png

7fae75c3ccf7abda9b08d6fb581bdad7.png

远程管理

29b3caa4a81b0b1cdac14106ea01f547.png

当运行ufw enable或通过其启动脚本启动ufw时,ufw将刷新其规则。这是必需的,这样ufw才能保持一致的状态,但它可能会删除现有的连接(例如SSH)。ufw确实支持在启用防火墙之前添加规则,因此管理员可以执行以下操作:

ufw allow proto tcp from any to any port 22

16c42ca996932b45254a9df8fded6ce8.png

在运行“ufw enable”之前。规则仍将被刷新,但启用防火墙后SSH端口将打开。请注意,一旦ufw被“enabled”,ufw在添加或删除规则时不会刷新规则(但在修改规则或更改默认策略时会)。默认情况下,在SSH下运行时启用防火墙时,ufw将提示。这可以通过使用“ufw --force enable”来禁用。

b4c3a46258a257effd435d6888edfbda.png

应用程序集成

b42a3942e7ae5dfe6eba772f31055b32.png

ufw通过读取/etc/ufw/applications.d中的配置文件来支持应用程序集成,要列出ufw已知的应用程序配置文件的名称,请使用:

ufw app list

b4bbcf26928990790cd56f5fbb555629.png

用户可以在添加规则时指定应用程序名称(用空格引用任何配置文件名称)。例如,在使用简单语法时,用户可以使用:

ufw allow <name>
ufw allow OpenSSH

1f60a52ca5d5e44f86f25ff5850d32dc.png

或者对于扩展语法:

ufw allow from 192.168.0.0/16 to any app <name>
ufw allow from 192.168.0.0/16 to any app CUPS

a078d5b5f9268b78da3896d767768b88.png

您不应使用任何一种语法指定协议,对于扩展语法,请使用app代替port子句。

可以通过以下方式查看给定应用程序的防火墙配置文件的详细信息:

ufw app info <name>
ufw app info CUPS

b880495daecc3de7fa1a4f3a954cac2f.png

其中“<name>”是应用程序列表命令中看到的应用程序之一。用户还可以指定全部以查看所有已知应用程序的配置文件。

应用程序配置文件的语法是简单的.INI格式:

[<name>]
title=<title>
description=<description>
ports=<ports>

“ports”字段可以指定一个以“|”分隔的端口/协议列表,其中协议是可选的。逗号分隔的列表或范围(用“start:end”指定)也可用于指定多个端口,在这种情况下,需要指定协议。例如:

[SomeService]
title=Some title
description=Some description
ports=12/udp|34|56,78:90/tcp

在上述示例中,“SomeService”可用于应用内规则,它指定UDP端口12、TCP和UDP端口34、以及TCP端口56和78-90(包括端点)。

创建或编辑应用程序配置文件后,用户可以运行:

ufw app update <name>

此命令将使用更新的配置文件信息自动更新防火墙。如果为名称指定“all”,则所有配置文件都将被更新。要更新配置文件并自动向防火墙添加新规则,用户可以运行:

ufw app update --add-new <name>

update --add-new命令的行为可以使用以下命令配置:

ufw app default <policy>

默认的应用程序策略是skip,这意味着update --add-new命令将不会执行任何操作。用户还可以指定允许或拒绝的策略,以便update --add-new命令可以自动更新防火墙。警告:对应用程序配置文件使用默认允许策略可能存在安全风险。在使用默认允许策略之前,请仔细考虑安全后果。

2dd4f92fcf6ea6716e0e75ac32dac3f1.png

LOGGING/日志

710592387d2929340a6fca2cc948ede9.png

ufw支持多个日志级别。当未指定日志级别时,ufw默认为“low”日志级别。用户可以通过以下方式指定日志级别:

ufw logging LEVEL

级别可以是“off/关闭”、“low/低”、“medium/中”、“high/高”“full/完整”。日志级别定义为:

off:关闭,禁用ufw管理的日志记录。

low:低,记录所有与定义的策略不匹配的阻塞数据包(具有速率限制),以及与记录的规则匹配的数据包。

medium:中,在日志级别低的基础上,加上所有允许的与定义的策略不匹配的数据包、所有无效数据包和所有新连接。所有日志记录都是在限速的情况下完成的。

high:高,在日志级别中的基础上(无速率限制),加上所有有速率限制的数据包。

full:完整,在日志级别高的基础上,取消速率限制。

中等以上的日志级别会产生大量日志输出,并可能很快填满您的磁盘。中等日志级别可能会在繁忙的系统上生成大量日志输出。

如果当前未启用日志记录,则指定“on”会启用日志,且记录日志级别为“low”。

eda66fea21d45098c4b395049149f7f0.png

REPORTS/报告

53f8f08364271795b098e3847dba8e0e.png

支持以下报告。每个都基于实时系统,除了监听报告外,都是原始iptables格式:

raw
builtins
before-rules
user-rules
after-rules
logging-rules
listening
added

raw原始报告显示了完整的防火墙,而其他报告显示了原始报告中的一个子集。

listening侦听报告将显示处于TCP侦听状态和UDP打开状态的实时系统上的端口,以及接口的地址和端口上侦听的可执行文件。当可执行文件绑定到该端口上的所有接口时,使用“*”代替接口的地址。此信息之后是可能影响此端口上连接的规则列表。这些规则按内核评估的顺序列出,优先匹配第一个。请注意,默认策略未列出,只有启用IPV6时才会显示tcp6和udp6。

added报告显示了在命令行上添加的规则列表。此报告不显示正在运行的防火墙的状态(请改用“ufw status”)。因为规则是由ufw规范化的,所以规则可能看起来与最初添加的规则不同。此外,ufw不记录命令顺序,因此使用等效顺序,在其他规则之后列出仅IPv6规则。

ba4b67ee21b984aea40d2521f62ee30c.png

笔记

安装时,ufw被禁用,默认传入策略为拒绝,默认转发策略为否认,默认传出策略为允许,并对传入和转发连接的新连接进行有状态跟踪。除上述内容外,还设置了一个默认规则集,执行以下操作:

-DROP/丢弃带有RH0标头的数据包。

-DROP/丢弃无效数据包。

-ACCEPT/接受某些ICMP数据包(INPUT和FORWARD):IPv4的目标不可达、源抑制、超时、参数问题和回显请求。IPv6的目标不可达、数据包太大、超时、参数问题和回显请求。

-ACCEPT/接受ICMPv6数据包以进行无状态自动配置(INPUT)。

-ACCEPT/接受来自IPv6本地链路(ffe8::/10)地址的ping回复(INPUT)。

-ACCEPT/接受DHCP客户端流量(INPUT)

-DROP/丢弃非本地流量(INPUT)

-ACCEPT/接受mDNS(IPv4为zeroconf/bonjour/avahi 224.0.0.251,IPv6为ff02::fb)进行服务发现(INPUT)

-ACCEPT/接受UPnP(IPv4为239.255.255.250,IPv6为ff02::f)进行服务发现(INPUT)

规则排序很重要,优先匹配第一条规则。因此,在添加规则时,先添加更具体的规则,然后再添加更一般的规则。

ufw并不打算通过其命令界面提供完整的防火墙功能,而是提供了一种添加或删除简单规则的简单方法。

status命令显示有关防火墙状态的基本信息,以及通过ufw命令管理的规则。它不显示/etc/ufw中的规则文件中的规则。要查看防火墙的完整状态,用户可以ufw显示原始状态。这将使用以下命令显示filter、nat、mangle和raw表:

iptables -n -L -v -x -t <table>
ip6tables -n -L -v -x -t <table>

有关更多详细信息,请参阅iptables和ip6tables文档。

如果默认策略设置为REJECT,则ufw可能会干扰在ufw框架之外添加的规则。

默认情况下允许IPV6。要将此行为更改为仅接受环回接口上的IPv6流量,请在/etc/default/ufw中将IPv6设置为“no”,然后重新加载ufw。启用IPv6后,您可以按照与IPv4规则相同的方式指定规则,这些规则将显示为ufw状态。匹配IPv4和IPv6地址的规则适用于这两个IP版本。例如,当启用IPv6时,以下规则将允许IPv4和IPv6流量访问端口22:

ufw allow 22

fea3ef8d3ede05c92c86287b1993dcd3.png

使用“IPv6”协议(“41”)支持IPv4隧道上的IPv6和6to4。此协议只能使用完整的语法。例如:

ufw allow to 10.0.0.1 proto ipv6
ufw allow to 10.0.0.1 from 10.4.0.0/16 proto ipv6

8ecc5f849d09023024477ba8070c3e5c.png

IPSec通过使用“esp”(“50”)和“ah”(“51”)协议来支持。这些协议只能使用完整的语法。例如:

ufw allow to 10.0.0.1 proto esp
ufw allow to 10.0.0.1 from 10.4.0.0/16 proto esp
ufw allow to 10.0.0.1 proto ah
ufw allow to 10.0.0.1 from 10.4.0.0/16 proto ah

171ed5eae9ce8815e24d13e5f2b83c9f.png

除了命令行界面,ufw还提供了一个框架,允许管理员修改默认行为并充分利用netfilter。有关更多信息,请参阅ufw-framework手册页。

6273285d93a9bedb1a82a6e1da9592aa.png

相关命令

bdec8592435125f97023c60ab3c07e03.png

ufw-framework、iptables、ip6tables、iptables-restore、ip6tables-restore、sysctl、sysctl.conf。

abfb3741fff251c1cf558d00825aad2b.gif

长按二维码
关注我们吧

fe87fd3b9d75a497e9b16a906cd3710a.jpeg

8b24d26992e67b2039ec6a812111eca6.png

CentOS 7停服之后该怎么安装软件呢?

CentOS 7遗忘了root密码怎么办?

为Linux设置GRUB密码

Linux修改或移除GRUB密码

在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

将iStoreOS部署到VMware Workstation

将iStoreOS部署到VMware ESXi变成路由器

如何在Ubuntu 23.10部署KVM并创建虚拟机?

Kali Linux安装中文输入法

Windows配置共享文件夹

openVPN配置实现客户端互访

CentOS编译安装OpenSSL 3.3.1

OpenSSL命令手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值