2012-12-31 20 views
11

Şu anda tüm UDP trafiğini engelleyen iptables var, ancak yalnızca belirli DNS sorgularının geçmesine izin vermek istiyorum.Ip iptables, DNS sorgularına yalnızca belirli bir alan adı için izin verebilir mi?

Örnek olarak google.com'u kullanalım.

İstekte etki alanı adını bulmak için dize eşleştirmeyi kullanmaya çalışıyorum ve buna izin ver. Bu benim ortaya çıktığım şey.

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --string "google.com" --algo bm -j ACCEP T

Ayrıca --dport 53 yerine --sport çalıştık. Nafile.

Eğer bunun nasıl yapılacağını bilen biri varsa ya da yanlış gittiğim yerleri görürseniz yardımınız takdir edilir!

sayesinde Jarred

cevap

19

Bu biraz geç olduğunu biliyorum ama DNS isteği paketinin içeriğine bakarsanız soru ...

kapatmadıklarından dolayı wireshark veya benzerlerinde nokta karakterinin kullanılmadığını görürsünüz. Alan adının her bölümü bir sayılır dize, yani google.com talebinin gerçek bayt olacaktır:

06 67 6f 6f 67 6c 65 03 63 6f 6d 

ilk bayt (06) 6 ASCII karakterle devam google uzunluğu, o zaman, olduğu com'un uzunluğu için bir sayı baytı (03) ve ardından ... fikri anlarsınız.

aşağıdaki kullanın iptables bu eşleştirmek için:

iptables -A OUTPUT -o eth0 -p udp --port 53 -m string --hex-string "|06|google|03|com" -algo bm -j ACCEPT 

--hex-string parametre dikey çubuklardan çiftleri tarafından sınırlanan heks değerleri için ideal bir mesafede dize ayrıştırır. Dikey çubukların dışındaki herhangi bir şey ASCII metni olarak yorumlanır.

ACCEPT  udp -- anywhere    anywhere    udp dpt:domain STRING match "|06676f6f676c6503636f6d|" ALGO name bm TO 65535 

Sen ayar yapabilirsiniz kural hafifçe - ve onu hızlandırmak - kullanarak arama aralığını kısıtlayarak: Eğer giriş ekledikten sonra ÇIKIŞ tablosunu listelerseniz

sen çizgisinde bir şeyler bulacaksınız --from ve --to parametreleri.

+0

Harika bir adam, Çok zaman kazandı. Bunu doğrulamak zaman alsa da. –

+0

Umarım aynı ipv6 ağı için de çalışır. –

+0

neden algo türü bm (Boyer-Moore)? –

3

O noktalı dizeleri ile güvenilir değildir bulundu.

Bu çalışacaktır:

iptables -A OUTPUT -o eth0 -p udp --port 53 -m string --string google --algo bm -j ACCEPT