Для брандмауэра freebsd pf; Я хочу, чтобы он блокировал пакеты для неустановленных соединений. Например, злоумышленник не должен отправлять пакеты Reset для неизвестного, еще не установленного соединения.
В Linux это легко сделать
-d targethost -m state --state NEW -j ACCEPT
-m state --state RELATED,ESTABLISHED -j ACCEPT
Это позволит создавать новые состояния и блокировать любые другие вещи, кроме пакетов для установленного состояния (ESTABLISHED).
Я думаю, что freebsd pf тоже должен работать так. Есть ли у pf что-нибудь такое? Как вы думаете, должен ли приведенный ниже набор правил разрешать пакеты Reset для неустановленного соединения?
# pfctl -sr -vvv
@0 pass in log (all) quick from <administrators:4> to any flags S/SA synproxy state
[ Evaluations: 423 Packets: 0 Bytes: 0 States: 4 ]
[ Inserted: uid 0 pid 25567 State Creations: 4 ]
@1 block drop log (all) quick inet6 all
[ Evaluations: 419 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 25567 State Creations: 0 ]
@2 block drop log (all) quick from <blacklist:0> to any
[ Evaluations: 419 Packets: 0 Bytes: 0 States: 0 ]
[ Inserted: uid 0 pid 25567 State Creations: 0 ]
@3 pass log (all) quick all flags S/SA keep state
[ Evaluations: 419 Packets: 103 Bytes: 10941 States: 15 ]
[ Inserted: uid 0 pid 25567 State Creations: 19 ]
tcpdump -i pflog0 не принимает (передавать или блокировать) пакеты для сброса пакетов, предназначенных для хоста за брандмауэром.
Все правила передачи автоматически создают запись состояния, когда пакет соответствует правилу. Это можно явно отключить, используя
no state
вариант.
Итак, вы уже сохраняете состояние.
И чтобы уточнить, FreeBSD иногда портирует pf
из OpenBSD, поэтому их документация относится к основным функциям.