ufw命令简介

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

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

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

USAGE/命令

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

OPTIONS/选项

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

-h, –help
显示帮助信息并退出。

–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选项来执行重置,而无需确认。

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’

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

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规则。

RULE SYNTAX/规则语法

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

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

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

ufw allow 53

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

ufw allow 25/tcp

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

ufw allow smtp

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

ufw allow in http
ufw reject out smtp
ufw reject telnet comment ‘telnet is unencrypted’

用户还可以使用更完整的语法,指定源、目的的地址和端口。此语法松散地基于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

这将拒绝从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

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

ufw deny in on eth0 to 224.0.0.1 proto igmp

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

ufw allow in on eth0 to 192.168.0.1 proto gre

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

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

上述内容将允许所有访问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

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

ah:无端口号有效

esp:无端口号有效

gre:无端口号有效

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

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

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

ufw route allow in on eth1 out on eth2

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

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

此规则允许在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

然后重新启动防火墙:

ufw disable
ufw enable

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

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

ufw limit ssh/tcp

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

ufw reject auth

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

ufw allow in on eth0 to any port 80 proto tcp

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

ufw deny 80/tcp
使用此选项删除它:

ufw delete deny 80/tcp

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

ufw delete 3

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

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

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

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

ufw prepend deny from 1.2.3.4

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

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

ufw status numbered

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

ufw allow log 22/tcp

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

示例

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

ufw deny 53

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

ufw allow 80/tcp

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

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

ufw deny proto udp from 1.2.3.4 to any port 514

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

远程管理

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

ufw allow proto tcp from any to any port 22

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

应用程序集成

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

ufw app list

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

ufw allow
ufw allow OpenSSH

或者对于扩展语法:

ufw allow from 192.168.0.0/16 to any app
ufw allow from 192.168.0.0/16 to any app CUPS

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

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

ufw app info
ufw app info CUPS

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

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

[]
title=<br /> description=<description><br /> ports=<ports><br /> “ports”字段可以指定一个以“|”分隔的端口/协议列表,其中协议是可选的。逗号分隔的列表或范围(用“start:end”指定)也可用于指定多个端口,在这种情况下,需要指定协议。例如:</p> <p>[SomeService]<br /> title=Some title<br /> description=Some description<br /> ports=12/udp|34|56,78:90/tcp<br /> 在上述示例中,“SomeService”可用于应用内规则,它指定UDP端口12、TCP和UDP端口34、以及TCP端口56和78-90(包括端点)。</p> <p>创建或编辑应用程序配置文件后,用户可以运行:</p> <p>ufw app update <name><br /> 此命令将使用更新的配置文件信息自动更新防火墙。如果为名称指定“all”,则所有配置文件都将被更新。要更新配置文件并自动向防火墙添加新规则,用户可以运行:</p> <p>ufw app update –add-new <name><br /> update –add-new命令的行为可以使用以下命令配置:</p> <p>ufw app default <policy><br /> 默认的应用程序策略是skip,这意味着update –add-new命令将不会执行任何操作。用户还可以指定允许或拒绝的策略,以便update –add-new命令可以自动更新防火墙。警告:对应用程序配置文件使用默认允许策略可能存在安全风险。在使用默认允许策略之前,请仔细考虑安全后果。</p> <p>LOGGING/日志</p> <p>ufw支持多个日志级别。当未指定日志级别时,ufw默认为“low”日志级别。用户可以通过以下方式指定日志级别:</p> <p>ufw logging LEVEL</p> <p>级别可以是“off/关闭”、“low/低”、“medium/中”、“high/高”和“full/完整”。日志级别定义为:</p> <p>off:关闭,禁用ufw管理的日志记录。</p> <p>low:低,记录所有与定义的策略不匹配的阻塞数据包(具有速率限制),以及与记录的规则匹配的数据包。</p> <p>medium:中,在日志级别低的基础上,加上所有允许的与定义的策略不匹配的数据包、所有无效数据包和所有新连接。所有日志记录都是在限速的情况下完成的。</p> <p>high:高,在日志级别中的基础上(无速率限制),加上所有有速率限制的数据包。</p> <p>full:完整,在日志级别高的基础上,取消速率限制。</p> <p>中等以上的日志级别会产生大量日志输出,并可能很快填满您的磁盘。中等日志级别可能会在繁忙的系统上生成大量日志输出。</p> <p>如果当前未启用日志记录,则指定“on”会启用日志,且记录日志级别为“low”。</p> <p>REPORTS/报告</p> <p>支持以下报告。每个都基于实时系统,除了监听报告外,都是原始iptables格式:</p> <p>raw<br /> builtins<br /> before-rules<br /> user-rules<br /> after-rules<br /> logging-rules<br /> listening<br /> added<br /> raw原始报告显示了完整的防火墙,而其他报告显示了原始报告中的一个子集。</p> <p>listening侦听报告将显示处于TCP侦听状态和UDP打开状态的实时系统上的端口,以及接口的地址和端口上侦听的可执行文件。当可执行文件绑定到该端口上的所有接口时,使用“*”代替接口的地址。此信息之后是可能影响此端口上连接的规则列表。这些规则按内核评估的顺序列出,优先匹配第一个。请注意,默认策略未列出,只有启用IPV6时才会显示tcp6和udp6。</p> <p>added报告显示了在命令行上添加的规则列表。此报告不显示正在运行的防火墙的状态(请改用“ufw status”)。因为规则是由ufw规范化的,所以规则可能看起来与最初添加的规则不同。此外,ufw不记录命令顺序,因此使用等效顺序,在其他规则之后列出仅IPv6规则。</p> <p>笔记<br /> 安装时,ufw被禁用,默认传入策略为拒绝,默认转发策略为否认,默认传出策略为允许,并对传入和转发连接的新连接进行有状态跟踪。除上述内容外,还设置了一个默认规则集,执行以下操作:</p> <p>-DROP/丢弃带有RH0标头的数据包。</p> <p>-DROP/丢弃无效数据包。</p> <p>-ACCEPT/接受某些ICMP数据包(INPUT和FORWARD):IPv4的目标不可达、源抑制、超时、参数问题和回显请求。IPv6的目标不可达、数据包太大、超时、参数问题和回显请求。</p> <p>-ACCEPT/接受ICMPv6数据包以进行无状态自动配置(INPUT)。</p> <p>-ACCEPT/接受来自IPv6本地链路(ffe8::/10)地址的ping回复(INPUT)。</p> <p>-ACCEPT/接受DHCP客户端流量(INPUT)</p> <p>-DROP/丢弃非本地流量(INPUT)</p> <p>-ACCEPT/接受mDNS(IPv4为zeroconf/bonjour/avahi 224.0.0.251,IPv6为ff02::fb)进行服务发现(INPUT)</p> <p>-ACCEPT/接受UPnP(IPv4为239.255.255.250,IPv6为ff02::f)进行服务发现(INPUT)</p> <p>规则排序很重要,优先匹配第一条规则。因此,在添加规则时,先添加更具体的规则,然后再添加更一般的规则。</p> <p>ufw并不打算通过其命令界面提供完整的防火墙功能,而是提供了一种添加或删除简单规则的简单方法。</p> <p>status命令显示有关防火墙状态的基本信息,以及通过ufw命令管理的规则。它不显示/etc/ufw中的规则文件中的规则。要查看防火墙的完整状态,用户可以ufw显示原始状态。这将使用以下命令显示filter、nat、mangle和raw表:</p> <p>iptables -n -L -v -x -t <table><br /> ip6tables -n -L -v -x -t <table><br /> 有关更多详细信息,请参阅iptables和ip6tables文档。</p> <p>如果默认策略设置为REJECT,则ufw可能会干扰在ufw框架之外添加的规则。</p> <p>默认情况下允许IPV6。要将此行为更改为仅接受环回接口上的IPv6流量,请在/etc/default/ufw中将IPv6设置为“no”,然后重新加载ufw。启用IPv6后,您可以按照与IPv4规则相同的方式指定规则,这些规则将显示为ufw状态。匹配IPv4和IPv6地址的规则适用于这两个IP版本。例如,当启用IPv6时,以下规则将允许IPv4和IPv6流量访问端口22:</p> <p>ufw allow 22</p> <p>使用“IPv6”协议(“41”)支持IPv4隧道上的IPv6和6to4。此协议只能使用完整的语法。例如:</p> <p>ufw allow to 10.0.0.1 proto ipv6<br /> ufw allow to 10.0.0.1 from 10.4.0.0/16 proto ipv6</p> <p>IPSec通过使用“esp”(“50”)和“ah”(“51”)协议来支持。这些协议只能使用完整的语法。例如:</p> <p>ufw allow to 10.0.0.1 proto esp<br /> ufw allow to 10.0.0.1 from 10.4.0.0/16 proto esp<br /> ufw allow to 10.0.0.1 proto ah<br /> ufw allow to 10.0.0.1 from 10.4.0.0/16 proto ah</p> <p>除了命令行界面,ufw还提供了一个框架,允许管理员修改默认行为并充分利用netfilter。有关更多信息,请参阅ufw-framework手册页。</p> <p>相关命令</p> <p>ufw-framework、iptables、ip6tables、iptables-restore、ip6tables-restore、sysctl、sysctl.conf。</p>

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/419217.html

(0)
联系我们
联系我们
分享本页
返回顶部