ipchains - jak povolit pristup I

Miroslav BENES mbenes na tenez.cz
Úterý Červenec 4 10:58:11 CEST 2000


Preji krasny den !

Pokousim se nastavit na fw pravidla pomoci ipchains-1.3.9-5, ale 
nedari se mi to uplne dokonale. Zakladni nastaveni jsem prevzal z 
dokumentace balicku ipchains. Na rozdil od prikladu ale nepouzivam 
"Demilitarizovanou zonu" (DMZ), ale nektere sluzby (ntp, www, ..) 
bezi primo na stejnem stroji.

Zatim jsem narazil na tyto problemy :

a) DNS dotazy do sveta

V prikladu je DNS server na DMZ a jsou popsany pravidla pro pristup 
k nemu. Ja bych ale potreboval, aby se pripadne dotazy smerovaly na 
"venkovni" DNS servery (u providera). Metodou pokus-omyl jsem 
nastavil pravidla :

ipchains -A bad-if -p tcp ! -y -s A.B.C.D domain -j ACCEPT
ipchains -A bad-if -p udp      -s A.B.C.D domain -j ACCEPT
ipchains -A bad-if -p tcp ! -y -s W.X.Y.Z domain -j ACCEPT
ipchains -A bad-if -p udp      -s W.X.Y.Z domain -j ACCEPT

kde A.B.C.D a W.X.Y.Z jsou IP adresy DNS serveru a "bad-if" je 
vstupni fronta rozhrani "ze sveta".

Zajimalo by me, nakolik je toto nastaveni "ciste" a bezpecne. Slo by 
nejak rict "pust veskerou DNS komunikaci ze serveru vyjmenovanych v 
/etc/resolv.conf" ? Nebo je potreba povolit komunikaci se vsemi DNS 
servery ? 
Verejny DNS server pro nasi domenu tu nepobezi (zatim).



b) DNS dotazy z fw a vnitrni site

Pokud mam nastaveny DNS servery providera v /etc/resplv.conf a vyse 
uvedena pravidla podle a), muzu pomoci nslookup polozit DNS dotaz.

Problem nastane, pokud nainstaluji balicky caching-nameserver + bind 
a do resolv.conf pridam adresu 127.0.0.1.
Dokud mam vypnute fw pravidla, chodi cache nameserver dobre, sbira 
zaznamy a odpovida na dotazy. Kdyz je zapnu, vraci mi lokalni cache 
DNS pouze "non-authoritative" odpovedi. Jakykoliv novy dotaz neni 
schopen vyresit. V cem muze byt zakopany pes ?



c) sluzby pro vnitrni sit (ntp, www, proxy, ssh ..)

# good-if je vstupni interface eth pro vnitrni sit
ipchains -A good-if -i ! eth1                  -j DENY

Trochu jsem se do toho zamotal. Zkousel jsem pouzit pravidla :

ipchains -A good-if -p tcp  --dport     3128   -j ACCEPT
ipchains -A good-if -p tcp  --dport     domain -j ACCEPT
ipchains -A good-if -p udp  --dport     domain -j ACCEPT
ipchains -A good-if -p udp  --dport     53     -j ACCEPT
ipchains -A good-if -p tcp  --dport     ssh    -j ACCEPT

Ale nechodilo to - nenavazalo se ani ssh spojeni, neodpovidal squid,
nechodily DNS dotazy. Nakonec jsme povolil na vnitrni siti veskery 
provoz :


# povoluji vsechno
ipchains -A good-if -p tcp -s 192.168.128.0/24 -j ACCEPT
ipchains -A good-if -p udp -s 192.168.128.0/24 -j ACCEPT
ipchains -A good-if -p tcp -d 192.168.128.0/24 -j ACCEPT
ipchains -A good-if -p udp -d 192.168.128.0/24 -j ACCEPT

Je takove nastaveni bezpecne ? Nepredpokladam utok vedeny z vnitrni 
site, ale asi by to melo byt lip zajistene. Potreboval bych :

 - ssh z vnitrni site na tento stroj
 - ssh z tohoto stroje do vnitrni site
 - DNS server (caching nameserver) pro vnitrni sit
 - ntp server pro vnitrni sit
 - proxy server (squid) pro vnitrni sit

atd. Jak se to da korektne a bezpecne zapsat ? 



d) ntptrace "zabloudil"

Vstupni rozhrani "ze sveta" ma mj. tyto pravidla :

ipchains -A bad-if -p tcp --dport ntp -j ACCEPT
ipchains -A bad-if -p udp --dport ntp -j ACCEPT

Na fw bezi timeserver, ktery se synchronizuje podle serveru ve svete. 
Samotna synchronizace slape dobre. Kdyz ale pouziju prikaz ntptrace, 
dostanu :

localhost: stratum 3, offset -0.000107, synch distance 0.23288
praha-fast-1-1-0.vol.cz:        *Timeout*


Stejne se chova, pokud chci pomoci ntptrace zjisit stav kterehokoliv 
time serveru na Inetu. Cim to muze byt ? Co je potreba povolit, aby 
to slo ?

Zajimave ale je, ze tento fw poskytuje synchronizaci pro stroje z 
vnitrni site a ty dokazou zjistit celou cestu :

# ntptrace
localhost: stratum 4, offset 0.000273, synch distance 0.24509
newfw-tenez: stratum 3, offset -0.012864, synch distance 0.25534
praha-fast-1-1-0.vol.cz: stratum 2, offset -0.025396, synch distance
0.17419 
err.ee.ethz.ch: stratum 1, offset -0.049486, synch distance 0.00124, 
refid 'DCFa'



e) maskarada

Podle vzoru je definovano pravidlo pro prestup z vnitrni site do 
sveta :

ipchains -A forward -s 192.168.128.0/24 -i eth1 -j good-bad

Na nej jsou povesena maskaradovaci pravidla (prevzato z prikladu v 
dokumentaci) :

ipchains -A good-bad -p tcp  --dport     www         -j MASQ
ipchains -A good-bad -p tcp  --dport     ssh         -j MASQ
ipchains -A good-bad -p udp  --dport     33434:33500 -j MASQ
ipchains -A good-bad -p icmp --icmp-type ping        -j MASQ
ipchains -A good-bad                                 -j REJECT -l


K cemu slouzi porty 33434:33500 ? 
Kam se ma zaradit pravidlo pro skryte presmerovani www -> proxy ?
Asi neco jako :

ipchains -A forward -s 192.168.128.0/24 -i eth1 -j good-bad
...
ipchains -A good-bad -p tcp --dport www -j REDIRECT 3128
...
ipchains -A good-bad -p tcp --dport ssh -j MASQ
atd.


Bohuzel to nechodi - prohlizec se marne snazi navazat spojeni. Co je 
na tom spatne ?



Diky za nakopnuti.


P.S. Neni nekde podrobny popis ipchains v cestine ?



--------------------------
Miroslav BENES
E-mail   : mbenes na tenez.cz
TENEZ Chotebor, a.s
--------------------------


Další informace o konferenci Linux