Блокировать 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
Другие вопросы по тегам