Я пытаюсь создать правило, разрешающее 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-сервера. Есть предложения, почему это не работает?
Я исправил это, добавив следующие строки после 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
Ваш фрагмент выглядит хорошо, хотя я подозреваю, что нам не хватает частей. Минималистичный набор правил, делающий то, что вы ищете:
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?