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