Jeden firewall, nie dwa
Debian 13 dostarcza nftables z /etc/nftables.conf i usługą, która go wczytuje. AlmaLinux 10 dostarcza firewalld na bazie nftables, a jego usługa czyta to, co zawiera /etc/sysconfig/nftables.conf. Wybierz jeden. Uruchamianie firewalld obok ręcznie napisanego zestawu reguł daje zestaw reguł, którego żaden z was nie napisał.
systemctl disable --now firewalld # AlmaLinux, if going manual
systemctl enable --now nftablesZestaw reguł
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set ssh_flood {
type ipv4_addr
flags dynamic, timeout
timeout 1h
}
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
ip6 nexthdr ipv6-icmp accept
tcp dport 22 ct state new add @ssh_flood { ip saddr limit rate over 6/minute } drop
tcp dport 22 accept
tcp dport { 80, 443 } accept
udp dport 443 accept
counter comment "dropped by policy"
}
chain forward {
type filter hook forward priority filter; policy drop;
}
chain output {
type filter hook output priority filter; policy accept;
}
}Części, które ludzie mylą:
- ICMPv6 jest akceptowany w całości celowo. Odkrywanie sąsiadów i pakiet-za-duży mieszkają tam, a ręczne filtrowanie ich psuje IPv6 w sposób, który objawia się jako błąd aplikacji przez półtora dnia.
- Zestaw
ssh_flooddodaje każdy adres przekraczający sześć nowych połączeń na minutę na listę z limitem czasu jednej godziny. Bez parsera logów, bez crona, bez drugiego demona. - Dla IPv6 zduplikuj zestaw z
type ipv6_addri regułę zip6 saddr. Zestawy są jednorodzinne. udp dport 443jest tam dla QUIC. Usuń go, jeśli go nie obsługujesz.
Załaduj to bez zamykania się na zewnątrz
systemd-run --on-active=120 nft flush ruleset
nft -f /etc/nftables.confPierwsze polecenie planuje jednostkę tymczasową, która czyści zestaw reguł za dwie minuty i wypisuje jej nazwę. Otwórz nową sesję. Jeśli działa, zatrzymaj timer:
systemctl stop run-u1234.timerJeśli nie działa, poczekaj, a maszyna sama cię wpuści z powrotem. Pusty zestaw reguł oznacza brak filtrowania, więc dokończ robotę, zamiast zostawiać go na noc.
Sprawdź, co faktycznie robi
nft list ruleset
nft -a list chain inet filter input
nft list set inet filter ssh_flood-a wypisuje uchwyty, co jest sposobem na usunięcie pojedynczej reguły bez przepisywania pliku:
nft delete rule inet filter input handle 12Liczniki odpowiadają na pytanie, którego nikt nie zadaje: reguła siedząca na zero po tygodniu jest albo błędna, albo niepotrzebna, a oba przypadki warto znać.
Śledzenie
Gdy pakiet odmawia zachowania się zgodnie z zestawem reguł:
nft add rule inet filter input tcp dport 8443 meta nftrace set 1
nft monitor traceUsuń regułę śledzenia po użyciu. Jest tania, a nie darmowa.
Do czego firewall hosta nie służy
Filtruje politykę, nie powodzie. Ataki wolumetryczne są odrzucane na brzegu na długo przed dotarciem do twojego portu, a reguła na instancji tylko marnowałaby twój procesor na pakiety, którymi już zajęto się. Szczegóły na ochronie DDoS.
Utrwal to
nft list ruleset > /etc/nftables.conf
systemctl restart nftablesUmieść shebang i linię flush ruleset z powrotem na górze wyeksportowanego pliku. Bez nich następne wczytanie dołączy do działającego zestawu reguł zamiast go zastąpić, a każda twoja reguła pojawi się dwukrotnie.