Ubuntu, IPTABLES, Bind9: klienseken külső DNS tiltása

Fórumok

Sziasztok!

Szeretném egy Ubuntu szerveren megoldani, hogy a hozzá kapcsolódó kliens gépek kizárólag a szervert kérdezhessék DNS ügyben, tehát ne tudjanak névfeloldást csinálni pl a google szerverével.

Odáig meg van oldva a dolog, hogy a szerver ellátja a névfeloldást (a forwarders ebben az esetben az OpenDNS ingyenes 208.67.220.123-as szervere, ami a felnőtt tartalmakat szűri), de nem tudtam megoldani, hogy kikerülhetetlen legyen.
A tűzfal beállító script így néz ki:


#!/bin/sh
IPTABLES=/sbin/iptables

$IPTABLES --flush
$IPTABLES --delete-chain

$IPTABLES -t nat --delete-chain
$IPTABLES -t nat --delete-chain

$IPTABLES --policy INPUT DROP
$IPTABLES --policy FORWARD DROP
$IPTABLES --policy OUTPUT DROP

#localhost forgalom engedélyezése
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

#bejövő kérések szabályai
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -s 192.168.10.0/24 -p icmp -j DROP #ping tiltása külső hálóró
$IPTABLES -A INPUT -s 192.168.56.0/24 -p icmp -j ACCEPT #ping engedélyezése belső hálóról
$IPTABLES -A INPUT -p tcp -m multiport --ports 22 -j ACCEPT #ssh engedélyezése
$IPTABLES -A INPUT -p udp -m multiport --ports 53 -j ACCEPT #dns kérés engedélyezése
$IPTABLES -A INPUT -p udp -m multiport --ports 137,138,17500,67 -j DROP

#átmenő forgalom szabályai
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT

#kimenő forgalom szabályai
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p udp -m multiport --ports 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m multiport --ports 80,443 -j ACCEPT

#logolás beállítása
$IPTABLES -A INPUT -j LOG --log-prefix "bejovo tuzfal " --log-level 7
$IPTABLES -A FORWARD -j LOG --log-prefix "atmeno tuzfal " --log-level 7
$IPTABLES -A OUTPUT -j LOG --log-prefix "kimeno tuzfal " --log-level 7

###NAT
$IPTABLES -t nat -A POSTROUTING -o enp0s3 -j SNAT --to-source 192.168.10.185

Ez eddig jól működik. De ha hozzáadom a következő sort:


$IPTABLES -A FORWARD -p udp -m multiport --ports 53 -j DROP #DNS kérés elutasítása

akkor nem tud a szerver sem feloldani.
Mit rontok el? Hogyan kellene csinálnom?

Gábor

Hozzászólások

Ne minden IP-re engedd, csak amin figyel a DNS:

$IPTABLES -A OUTPUT -p udp -m multiport -d 192.168.1.1 --ports 53 -j ACCEPT

IP cím értelemszerűen a szervered címe.

Elnézést, javítanom kell a hozzászólásom.
Szóval az input láncra megadva ezt, úgy tűnik, működik

A jó beállítás:


#!/bin/sh
IPTABLES=/sbin/iptables

$IPTABLES --flush
$IPTABLES --delete-chain

$IPTABLES -t nat --delete-chain
$IPTABLES -t nat --delete-chain

$IPTABLES --policy INPUT DROP
$IPTABLES --policy FORWARD DROP
$IPTABLES --policy OUTPUT DROP

#localhost forgalom engedélyezése
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

#bejövő kérések szabályai
# udp 137,138:windows
# udp 17500: DropBox
# udp 67
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -s 192.168.10.0/24 -p icmp -j DROP #ping tiltása külső hálóró
$IPTABLES -A INPUT -s 192.168.56.0/24 -p icmp -j ACCEPT #ping engedélyezése belső hálóról
$IPTABLES -A INPUT -p tcp -m multiport --ports 22 -j ACCEPT #ssh engedélyezése
$IPTABLES -A INPUT -p udp -m multiport --ports 53 -d 192.168.56.185 -j ACCEPT #dns kérés engedélyezése kizárólag akkor, ha ez a szerver a cél
$IPTABLES -A INPUT -p udp -m multiport --ports 137,138,17500,67 -j DROP

#átmenő forgalom szabályai
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p udp -m multiport --ports 53 -j DROP #DNS kérés elutasítása
$IPTABLES -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT

#kimenő forgalom szabályai
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p udp -m multiport --ports 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m multiport --ports 80,443 -j ACCEPT

#logolás beállítása
$IPTABLES -A INPUT -j LOG --log-prefix "bejovo tuzfal " --log-level 7
$IPTABLES -A FORWARD -j LOG --log-prefix "atmeno tuzfal " --log-level 7
$IPTABLES -A OUTPUT -j LOG --log-prefix "kimeno tuzfal " --log-level 7

###NAT
$IPTABLES -t nat -A POSTROUTING -o enp0s3 -j SNAT --to-source 192.168.10.185

Tök jó, két probléma sakkozik egymással, az egyiket időközben sikerült megoldanom.
Az előző megoldás tesztelésénél első körben azért kaptam hibás eredményt, mert a bind9 beállításai között (named.conf.options) a következő szerepelt:


forwarders {
208.67.222.123;
208.67.220.123;
};

Ez valami miatt nem működik így (egyébként ez az OpenDNS FamilyShield névszervere). Ha a google DNS-ét teszem be, akkor jó:


forwarders {
8.8.8.8;
};

Mi lehet a baj? Az OpenDNS beállítás esetén lokálisan fel tudja oldani a címet, a kliens viszont nem. A google DNS-ét használva mindkét helyről megy.

Gábor

A lenti hozzászólásodban látom, hogy végülis a dnssec-validation kikapcsolása megoldotta. Ezért kérdeztem a TCP-t:

"From a network perspective, DNS and DNSSEC packets are very similar, DNSSEC packets are just bigger, which means DNS is more likely to use TCP. "
https://users.isc.org/~jreed/dnssec-guide/dnssec-guide.html