Блокировать DNS-запрос с помощью pfctl
Я пытаюсь создать правило, разрешающее DNS-запросам (порт 53) только 8.8.8.8
сервер ( Google DNS). DNS-запросы ко всем остальным серверам не должны выполняться.
Я добавил следующие строки в /etc/pf.conf
файл
anchor "com.xyz"
load anchor "com.xyz" from "/etc/pf.anchors/com.xyz"
а потом я добавляю файл com.xyz
в /etc/pf.anchors
папка. Содержание com.xyz
файл приведен ниже:
# Options
set block-policy drop
set fingerprints "/etc/pf.os"
set ruleset-optimization basic
set skip on lo0
pass out proto tcp from any to 8.8.8.8 port 53
pass out proto udp from any to 8.8.8.8 port 53
Это не работает, я могу получить доступ к Интернету с другого DNS-сервера. Любые предложения, почему это не работает?
2 ответа
Ваш фрагмент выглядит хорошо, хотя я подозреваю, что нам не хватает кусков. Минималистичный набор правил, делающий то, что вы ищете:
pass out
pass in inet proto { tcp udp } from any to 8.8.8.8 port domain
block drop in quick inet proto { tcp udp } from any to any port domain
И в некоторых случаях вам также может понадобиться что-то вроде:
match out on em0 from 10.0.0.0/8 nat-to 1.2.3.4
Я полагаю, вы уже включили IP-пересылку?
Я исправил это, добавив следующие строки после options
,
block out proto tcp from any to any port 53
block out proto udp from any to any port 53
Итак, в основном спросите pfctl
заблокировать все DNS-пакеты, а затем попросить его разрешить только DNS-запросы 8.8.8.8
, Итак, ниже мой полный com.xyz
файл.
# Options
set block-policy drop
set fingerprints "/etc/pf.os"
set ruleset-optimization basic
set skip on lo0
block out proto tcp from any to any port 53
block out proto udp from any to any port 53
pass out proto tcp from any to 8.8.8.8 port 53
pass out proto udp from any to 8.8.8.8 port 53