Фільтрування запитів на рівні DNS

Починаючи з версії 9.8.1 DNS-сервера bind з'явилася нова можливість – DNS RPZ. Це цікавий інструмент, який може бути дуже корисним для багатьох сисадмінів. Дивно, але в українськомовному сегменті інтернету ця тема зовсім не висвітлена. Поспішаю заповнити цю прогалину.

Що це за звір та з чим його їдять?

Формат зони

Як і для будь-якої іншої DNS-зони, потрібен SOA-запис і, як мінімум, один NS-запис. SOA — дійсний запис, що використовується для делегування зони, що має серійний номер і таймери, і вказує час життя записів (TTL). NS-запис ніколи не використовується та служить для сумісності. Зазвичай єдиний NS-запис має фіктивне значення localhost. Решта зони – це висловлювання для DNS-політик. Політики можуть застосовуватися до доменів або до шаблонів.

Як працює

Спрощено роботу RPZ можна представити наступною схемою:

запитів
У правій частині показано схему роботи зі звичайним кешуючим DNS-сервером, який повертає клієнту всі відповіді від конових серверів, як є. У випадку з RPZ з'являється Security Policy Provider (провайдер політик безпеки) — DNS-сервер, з якого ми беремо політики дозволу доменних імен. Наявність стороннього провайдера не обов'язково, ми можемо самі поставити свої локальні політики. Про це трохи пізніше, у прикладі.

Провайдерів може бути кілька, у тому числі ми можемо створити свій власний сервер RPZ:

рівні
Докладніше про роботу протоколу можна прочитати в офіційній документації (посилання нижче) — думаю, ті, кому потрібні деталі, подужають її самостійно.

Покажемо роботу RPZ з прикладу робочих конфігів. Тут мається на увазі, що у вас вже є налаштований DNS-сервер, я лише покажу опції, які потрібно включити, щоб усізапрацювало. Дія розгортається в Ubuntu 12.10.

Спочатку у файлі /etc/bind/named.conf.options опцією «response-policy» включаємо RPZ:

Усередині «response-policy» зон може бути кілька, причому кожна може мати свою політику (подробиці див. у специфікації).

У файлі /etc/bind/named.conf.local розміщуємо опис зони:

І, нарешті, сама зона (файл /etc/bind/db.rpz.zone):

Застосовуємо нові налаштування:

і дивимося, що в нас вийшло: