Назад | Перейти на главную страницу

Заблокировать 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-сервера. Есть предложения, почему это не работает?

Я исправил это, добавив следующие строки после 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?