Slavik

Блокування DNS-запитів за допомогою iptables

tags: tor, dns, iptables

Long story short, використовую Tor, як анонімний DNS-ceрвер. Проблема в тому, шо Tor підтримує ресолвінг тільки 3 типів DNS записів:

Якщо спробувати отримати, нариклад, МХ запис - то відповідь буде NOTIMP (Not implemented):

    dig MX -p 9053 debian.org 127.0.0.1
    ;; QUESTION SECTION:
    ;debian.org.                    IN      MX

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#9053(127.0.0.1) (UDP)

    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOTIMP, id: 25221

Але це неправда, бо домен debian.org насправді має мх записи:

    dig +short MX debian.org 8.8.8.8
    0 mitropoulos.debian.org.
    0 mailly.debian.org.
    0 muffat.debian.org.

Тому, шоб запобігти цьому я блокую всі запити до Tor-DNS крім A, AAAA та PTR:


    iptables -A INPUT -p udp --dport 9053 \
        -m string --hex-string "|000011|"  --algo bm \
        -j ACCEPT -m comment --comment 'Allow A'
    iptables -A INPUT -p udp --dport 9053 \
        -m string --hex-string "|00001c|"  --algo bm \
        -j ACCEPT -m comment --comment 'Allow AAAA'
    iptables -A INPUT -p udp --dport 9053 \
        -m string --hex-string "|0000ff|"  --algo bm
        -j DROP -m comment --comment 'Block records Tor does not support'

Туто [1] вуйко пише про string модуль для iptables i його параметри.

Refs

  1. Linux: Block DNS queries for specific zone with IPTables
  2. just duck DNS over Tor