Постоянный набор nftables
Правила из nft add живут до перезагрузки. Постоянный набор — файл
/etc/nftables.conf: его загружает служба nftables
(ExecStart=/usr/sbin/nft -f /etc/nftables.conf). На учебной машине
служба выключена (disabled), а файл из пакета пускает всё: в его
цепочках нет ни правил, ни политики.
Базовый набор «всё, что не разрешено, — drop»:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
iif lo accept
ct state established,related accept
meta l4proto { icmp, ipv6-icmp } accept
tcp dport { 22, 80 } accept
counter
}
}
| Строка |
Зачем |
policy drop |
всё, что не разрешено ниже, отбрасывается |
iif lo accept |
машина говорит сама с собой: база и админка на 127.0.0.1 работают |
ct state established,related accept |
ответы на соединения, которые машина открыла сама |
meta l4proto { icmp, ipv6-icmp } accept |
ping и служебные сообщения ICMP |
tcp dport { 22, 80 } accept |
порты, открытые наружу, списком |
counter |
сколько пакетов дошло до политики drop |
sudo nft -c -f /etc/nftables.conf
sudo systemctl enable --now nftables
sudo nft list ruleset
nft -c печатает ошибку с местом в строке и кодом 1:
/tmp/bad.nft:1:54-54: Error: syntax error, unexpected '}'
table inet filter { chain input { tcp dport 22 acept } }
^
Снаружи — из другого пространства имён или с другой машины — закрытые
порты видны как filtered: пакет отброшен без ответа (см. nmap):
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
5432/tcp filtered postgresql
8080/tcp filtered http-proxy
flush ruleset в начале файла удаляет все таблицы, и чужие тоже:
таблица, созданная руками, после systemctl enable --now nftables
пропала. Таблицы fail2ban и Docker после restart nftables вернутся
только с перезапуском этих служб.