Добрый день.
Решил таки нормально настроить фаерволл, в Федоре по умолчанию используется firewalld. Он активно использует т.н. зоны. По-дефолту используется зона «FedoraWorkstation». Попробуйте определить какая policy используется в ней по-умолчанию:
❯ sudo firewall-cmd --zone=FedoraWorkstation --list-all
FedoraWorkstation (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: enp4s0
sources:
services: dhcpv6-client mdns samba-client ssh
ports: 1025-65535/udp 1025-65535/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Если вы не поняли гениальную задумку инженеров Шапки, то это «target: default». Что такое default? А хрен его знает.
Ну ладно, можно же посмотреть в документации, что такое default и просто запомнить? Можно. Но для каждой зоны этот дефолт свой. Может быть ACCEPT, может быть REJECT, может быть DROP.
На чистой Федоре, с зоной FedoraWorkstation, вообще без юзерских правил, firewalld высирает следующее в таблицу правил nftables (т.е. современный бэкенд):
$ sudo nft list ruleset
table inet firewalld { # progname firewalld
flags owner,persist
chain mangle_PREROUTING {
type filter hook prerouting priority mangle + 10; policy accept;
jump mangle_PREROUTING_POLICIES
}
chain mangle_PREROUTING_POLICIES {
iifname "enp0s3" jump mangle_PRE_policy_allow-host-ipv6
iifname "enp0s3" jump mangle_PRE_public
iifname "enp0s3" return
jump mangle_PRE_policy_allow-host-ipv6
jump mangle_PRE_public
return
}
chain nat_PREROUTING {
type nat hook prerouting priority dstnat + 10; policy accept;
jump nat_PREROUTING_POLICIES
}
chain nat_PREROUTING_POLICIES {
iifname "enp0s3" jump nat_PRE_policy_allow-host-ipv6
iifname "enp0s3" jump nat_PRE_public
iifname "enp0s3" return
jump nat_PRE_policy_allow-host-ipv6
jump nat_PRE_public
return
}
chain nat_POSTROUTING {
type nat hook postrouting priority srcnat + 10; policy accept;
jump nat_POSTROUTING_POLICIES
}
chain nat_POSTROUTING_POLICIES {
iifname "enp0s3" oifname "enp0s3" jump nat_POST_public
iifname "enp0s3" oifname "enp0s3" return
oifname "enp0s3" jump nat_POST_public
oifname "enp0s3" return
iifname "enp0s3" jump nat_POST_public
iifname "enp0s3" return
jump nat_POST_public
return
}
chain nat_OUTPUT {
type nat hook output priority dstnat + 10; policy accept;
jump nat_OUTPUT_POLICIES
}
chain nat_OUTPUT_POLICIES {
oifname "enp0s3" jump nat_OUT_public
oifname "enp0s3" return
jump nat_OUT_public
return
}
chain filter_PREROUTING {
type filter hook prerouting priority filter + 10; policy accept;
icmpv6 type { nd-router-advert, nd-neighbor-solicit } accept
meta nfproto ipv6 fib saddr . mark check missing drop
}
chain filter_INPUT {
type filter hook input priority filter + 10; policy accept;
ct state { established, related } accept
ct status dnat accept
iifname "lo" accept
ct state invalid drop
jump filter_INPUT_POLICIES
reject with icmpx admin-prohibited
}
chain filter_FORWARD {
type filter hook forward priority filter + 10; policy accept;
ct state { established, related } accept
ct status dnat accept
iifname "lo" accept
ct state invalid drop
ip6 daddr { ::/96, ::ffff:0.0.0.0/96, 2002::/24, 2002:a00::/24, 2002:7f00::/24, 2002:a9fe::/32, 2002:ac10::/28, 2002:c0a8::/32, 2002:e000::/19 } reject with icmpv6 addr-unreachable
jump filter_FORWARD_POLICIES
reject with icmpx admin-prohibited
}
chain filter_OUTPUT {
type filter hook output priority filter + 10; policy accept;
ct state { established, related } accept
ct status dnat accept
oifname "lo" accept
ip6 daddr { ::/96, ::ffff:0.0.0.0/96, 2002::/24, 2002:a00::/24, 2002:7f00::/24, 2002:a9fe::/32, 2002:ac10::/28, 2002:c0a8::/32, 2002:e000::/19 } reject with icmpv6 addr-unreachable
jump filter_OUTPUT_POLICIES
}
chain filter_INPUT_POLICIES {
iifname "enp0s3" jump filter_IN_policy_allow-host-ipv6
iifname "enp0s3" jump filter_IN_public
iifname "enp0s3" reject with icmpx admin-prohibited
jump filter_IN_policy_allow-host-ipv6
jump filter_IN_public
reject with icmpx admin-prohibited
}
chain filter_FORWARD_POLICIES {
iifname "enp0s3" oifname "enp0s3" jump filter_FWD_public
iifname "enp0s3" oifname "enp0s3" reject with icmpx admin-prohibited
iifname "enp0s3" jump filter_FWD_public
iifname "enp0s3" reject with icmpx admin-prohibited
oifname "enp0s3" jump filter_FWD_public
oifname "enp0s3" reject with icmpx admin-prohibited
jump filter_FWD_public
reject with icmpx admin-prohibited
}
chain filter_OUTPUT_POLICIES {
oifname "enp0s3" jump filter_OUT_public
oifname "enp0s3" return
jump filter_OUT_public
return
}
chain filter_IN_public {
jump filter_IN_public_pre
jump filter_IN_public_log
jump filter_IN_public_deny
jump filter_IN_public_allow
jump filter_IN_public_post
meta l4proto { icmp, ipv6-icmp } accept
}
chain filter_IN_public_pre {
}
chain filter_IN_public_log {
}
chain filter_IN_public_deny {
}
chain filter_IN_public_allow {
tcp dport 22 accept
ip daddr 224.0.0.251 udp dport 5353 accept
ip6 daddr ff02::fb udp dport 5353 accept
ip6 daddr fe80::/64 udp dport 546 accept
}
chain filter_IN_public_post {
}
chain filter_OUT_public {
jump filter_OUT_public_pre
jump filter_OUT_public_log
jump filter_OUT_public_deny
jump filter_OUT_public_allow
jump filter_OUT_public_post
}
chain filter_OUT_public_pre {
}
chain filter_OUT_public_log {
}
chain filter_OUT_public_deny {
}
chain filter_OUT_public_allow {
}
chain filter_OUT_public_post {
}
chain nat_OUT_public {
jump nat_OUT_public_pre
jump nat_OUT_public_log
jump nat_OUT_public_deny
jump nat_OUT_public_allow
jump nat_OUT_public_post
}
chain nat_OUT_public_pre {
}
chain nat_OUT_public_log {
}
chain nat_OUT_public_deny {
}
chain nat_OUT_public_allow {
}
chain nat_OUT_public_post {
}
chain nat_POST_public {
jump nat_POST_public_pre
jump nat_POST_public_log
jump nat_POST_public_deny
jump nat_POST_public_allow
jump nat_POST_public_post
}
chain nat_POST_public_pre {
}
chain nat_POST_public_log {
}
chain nat_POST_public_deny {
}
chain nat_POST_public_allow {
}
chain nat_POST_public_post {
}
chain filter_FWD_public {
jump filter_FWD_public_pre
jump filter_FWD_public_log
jump filter_FWD_public_deny
jump filter_FWD_public_allow
jump filter_FWD_public_post
}
chain filter_FWD_public_pre {
}
chain filter_FWD_public_log {
}
chain filter_FWD_public_deny {
}
chain filter_FWD_public_allow {
oifname "enp0s3" accept
}
chain filter_FWD_public_post {
}
chain nat_PRE_public {
jump nat_PRE_public_pre
jump nat_PRE_public_log
jump nat_PRE_public_deny
jump nat_PRE_public_allow
jump nat_PRE_public_post
}
chain nat_PRE_public_pre {
}
chain nat_PRE_public_log {
}
chain nat_PRE_public_deny {
}
chain nat_PRE_public_allow {
}
chain nat_PRE_public_post {
}
chain mangle_PRE_public {
jump mangle_PRE_public_pre
jump mangle_PRE_public_log
jump mangle_PRE_public_deny
jump mangle_PRE_public_allow
jump mangle_PRE_public_post
}
chain mangle_PRE_public_pre {
}
chain mangle_PRE_public_log {
}
chain mangle_PRE_public_deny {
}
chain mangle_PRE_public_allow {
}
chain mangle_PRE_public_post {
}
chain filter_IN_policy_allow-host-ipv6 {
jump filter_IN_policy_allow-host-ipv6_pre
jump filter_IN_policy_allow-host-ipv6_log
jump filter_IN_policy_allow-host-ipv6_deny
jump filter_IN_policy_allow-host-ipv6_allow
jump filter_IN_policy_allow-host-ipv6_post
}
chain filter_IN_policy_allow-host-ipv6_pre {
}
chain filter_IN_policy_allow-host-ipv6_log {
}
chain filter_IN_policy_allow-host-ipv6_deny {
}
chain filter_IN_policy_allow-host-ipv6_allow {
icmpv6 type mld-listener-done accept
icmpv6 type mld-listener-query accept
icmpv6 type mld-listener-report accept
icmpv6 type mld2-listener-report accept
icmpv6 type nd-neighbor-advert icmpv6 code 0 accept
icmpv6 type nd-neighbor-solicit icmpv6 code 0 accept
icmpv6 type nd-redirect icmpv6 code 0 accept
icmpv6 type nd-router-advert icmpv6 code 0 accept
}
chain filter_IN_policy_allow-host-ipv6_post {
}
chain nat_PRE_policy_allow-host-ipv6 {
jump nat_PRE_policy_allow-host-ipv6_pre
jump nat_PRE_policy_allow-host-ipv6_log
jump nat_PRE_policy_allow-host-ipv6_deny
jump nat_PRE_policy_allow-host-ipv6_allow
jump nat_PRE_policy_allow-host-ipv6_post
}
chain nat_PRE_policy_allow-host-ipv6_pre {
}
chain nat_PRE_policy_allow-host-ipv6_log {
}
chain nat_PRE_policy_allow-host-ipv6_deny {
}
chain nat_PRE_policy_allow-host-ipv6_allow {
}
chain nat_PRE_policy_allow-host-ipv6_post {
}
chain mangle_PRE_policy_allow-host-ipv6 {
jump mangle_PRE_policy_allow-host-ipv6_pre
jump mangle_PRE_policy_allow-host-ipv6_log
jump mangle_PRE_policy_allow-host-ipv6_deny
jump mangle_PRE_policy_allow-host-ipv6_allow
jump mangle_PRE_policy_allow-host-ipv6_post
}
chain mangle_PRE_policy_allow-host-ipv6_pre {
}
chain mangle_PRE_policy_allow-host-ipv6_log {
}
chain mangle_PRE_policy_allow-host-ipv6_deny {
}
chain mangle_PRE_policy_allow-host-ipv6_allow {
}
chain mangle_PRE_policy_allow-host-ipv6_post {
}
}
Тут 366 строчек и одному Господу ведомо сколько пустых цепочек. Напоминаю, система чистая в Виртулбоксе, никаких юзерских правил. Тут открывается несколько портов <1025 (22 и т.д.) и все порты >1024. Т.е., буквально, 6 полезных правил.
На главной странице https://firewalld.org/ я нашел четыре упоминания слова «simple».
А потом они спрашивают почему пользователи не используют фаерволл.
Я не большой мастер секьюрности, но настроить и понять iptables мне было СИЛЬНО проще. Не, можно, конешно, заучить несколько заклинаний, но я просто отказываюсь пользоваться этим высером.
Причем, насколько я понимаю, основной selling point firewalld был в том, что соединения не рвутся при изменении правил, а теперь nftables это умеет по умолчанию.
UPD1: Похоже target: default – это значение, которое определено в исходном коде и означает «INPUT: REJECT, кроме icmp»:
man firewall-cmd
...
default is similar to REJECT, but it implicitly allows ICMP packets.
...
Извиняюсь, если ввел в заблуждение. Поведение все еще не очевидное.









