接口

接口

我希望 ufw 阻止我的外部接口(enp6s0)上的所有内容,但允许我的内部接口(br0、tap0)上的所有内容。

我在这方面遇到了很大的问题(尽管我设置了一条规则允许一切进入,但 ufw 还是阻止了 br0 上的东西),所以我将 ufw 设置为默认允许一切,然后开始为我想要阻止的接口添加例外,如下所示:

ufw deny in on enp6s0 to any port 67 proto udp

对于每个我不想被外部访问的端口,我都设置了几个这样的端口。但这个解决方案让我感到不安:基本上我把所有东西都打开了,只是没有监听。迟早我会忘记保护一些东西。

所以我反过来想创建一组规则,允许某些端口但拒绝其他所有端口,如下所示:

ufw insert 1 allow in on enp6s0 from any port ssh proto tcp
ufw insert 2 allow in on enp6s0 from any port http proto tcp
ufw insert 3 deny in on enp6s0 from any port 30:65535 proto tcp

最后一个命令故意保持端口 22 开放,这样我就可以测试规则的有效性,而不必担心丢失与服务器的 ssh 连接。

但是,添加拒绝规则会立即阻止整个服务器。所有内容,而不仅仅是 30:65535。nmap 认为它已关闭。幸运的是,我现有的 ssh 会话仍处于活动状态,因此我可以删除该规则。

现在,我知道我不是某些 ufw 大师或类似的人,但这确实让我(再次)震惊:我似乎不知道它是如何工作的。

有人能告诉我关于拒绝规则的信息吗?我需要如何设置它?

最终编辑: 事实证明,卸载并重新安装 ufw 可以解决问题。似乎我在某个时候弄乱了某些设置,导致了所有无法解释的行为。

编辑:我的网络配置

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

# Our additions start here:
# tap interface (VMs will use this one)
auto tap0
iface tap0 inet manual
    pre-up ip tuntap add tap0 mode tap user root
    up ip link set dev tap0 up
    post-down ip link del dev tap0

# bridge
auto br0
iface br0 inet static
    bridge_ports tap0
    address 192.168.100.1
    netmask 255.255.255.0
    broadcast 192.168.100.255

iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
-N ufw-before-output
-N ufw-logging-allow
-N ufw-logging-deny
-N ufw-not-local
-N ufw-reject-forward
-N ufw-reject-input
-N ufw-reject-output
-N ufw-skip-to-policy-forward
-N ufw-skip-to-policy-input
-N ufw-skip-to-policy-output
-N ufw-track-forward
-N ufw-track-input
-N ufw-track-output
-N ufw-user-forward
-N ufw-user-input
-N ufw-user-limit
-N ufw-user-limit-accept
-N ufw-user-logging-forward
-N ufw-user-logging-input
-N ufw-user-logging-output
-N ufw-user-output
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A FORWARD -i br0 -o enp6s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp6s0 -o br0 -j ACCEPT
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j ACCEPT
-A ufw-skip-to-policy-input -j ACCEPT
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-forward -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-forward -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-input -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-input -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 22 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 80 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 443 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m multiport --dports 2000:2100 -j DROP
-A ufw-user-input -i enp6s0 -p tcp -m tcp --dport 53 -j DROP
-A ufw-user-input -i enp6s0 -p udp -m udp --dport 53 -j DROP
-A ufw-user-input -i enp6s0 -p udp -m udp --dport 67 -j DROP
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

答案1

您应该重置ufw为默认值并重新开始:

sudo ufw 重置

这将禁用ufw并重置ufw其安装默认值,这意味着

- deny all incoming and
- allow all outgoing connections.

然后只需添加一些规则以允许您要使用的应用程序的传入连接:

sudo ufw 允许 ssh
sudo 允许 http

现在您可以启用ufw

sudo ufw 启用

现在正在运行,并配置为拒绝除和ufw所需端口的连接之外的所有传入连接。始终允许传出连接,这通常是所需的。sshhttp

您不需要deny像在配置中那样为传入连接添加规则:

拒绝从任何端口 30:65535 proto tcp 进入 enp6s0`

此规则是不必要的,默认情况下拒绝传入连接。

如果您想要将传出连接配置得更加严格,您可以添加deny-rules 而不是将传出连接默认为deny,这样可以使规则更简单,大多数情况下您希望允许传出连接。Deny传出连接的 -rules 必须经过仔细设计。

sudo ufw 拒绝 6773

例如,拒绝端口 6773 上的所有传出连接,任何需要使用该端口的应用程序将无法再正常工作。

接口

使用多个接口会使事情变得有点复杂。默认值(拒绝进入,允许离开)适用于所有接口,未指定接口的规则也将适用于所有接口。您希望接口的行为有所不同,因此您必须为每个接口添加规则。

上面部分中的规则需要进行调整以匹配您的外部接口(您问题中的规则看起来像那样)。

所有接口默认允许传出连接,但不允许传入连接,因此您只需allow in为每个内部接口添加一个规则:

sudo 允许任何“接口”进入

规则顺序

另一个重要的事情是规则顺序。当一个包到达接口时,ufw将逐一检查规则。只要有规则匹配,就会应用该规则,并拒绝、拒绝或允许该包。此时尚未检查的其余规则则不会使用。对于您来说,我认为规则顺序没有太大相关性,但我们始终要提醒您,规则顺序可能很重要。

答案2

如果你不太了解 TCP/IP 的工作原理,但仍想保护你的计算机,请先使用gufw然后你有一个 GUI 前端来ufw

sudo apt install gufw

然后如果使用 Unity 则转到 dash 并输入gufw或转到System Administration Firewall configuration,将显示以下 UI:

gufw 用户界面

开始时,请放松,仅使用Home和配置文件,当您想在这两者之间执行某些操作时Public使用。Office

Home配置文件中,将所有内容保持打开状态(=禁用),因为您应该已经在 NAT 防火墙后面(您的路由器就是 NAT 防火墙),因此在家里不需要保护任何东西。

Public配置文件中,单击滑块启用防火墙Status,然后使用举报规则仅限最初几天:

gufw 预配置规则

然后进入终端并查看gufw为您创建了什么样的规则ufw

sudo ufw status

列表Report显示您当前的所有应用程序,单击一个应用程序行并单击其下方,+您将能够轻松地为该应用程序添加规则。基本上,该屏幕是netstatufw在一个屏幕中的组合。

然后,你会发现,你不需要添加额外的规则来在公共场所阻止传入连接:只需允许你需要启用的应用程序。

您使用的越多gufw,并且您越关注它ufw生成的防火墙规则,您就会发现,过一段时间您就会只使用防火墙ufw而忘记所有gufw高级设置。

相关内容