Portál AbcLinuxu, 12. května 2025 15:40

Dotaz: iptables - záhada s vlastním IP

25.4.2006 05:05 Espinosa | skóre: 24 | blog: Espblog | London
iptables - záhada s vlastním IP
Přečteno: 498×
Odpovědět | Admin
Mám extrémně jednoduchou domácí síť. Dvě pracovní stanice a ADSL router/modem. Protože firewallu na modemu moc nedůvěřuji, rozhodl jsem se nakonfigurovat iptables na obou stanicích, pod heslem v jednoduchosti je krása: Z návodů na internetu se mi to téměř podařilo. Ale jedna záhada zbyla - v definici pravidla pro vnitřní síť.
iptables -A INPUT -p tcp -m iprange --dst-range 192.168.2.1-192.168.2.10 -j ACCEPT
Takhle to vypadá správně a neškodně, ale jakmile je v povoleném rozsahu (192.168.2.1-192.168.2.10) náhodou i stanice na které to právě testuji (např. 192.168.2.5) tak firewall jako by neexistoval a všechny porty počítače se z vnějšku tváří jako otevřené.

Jakmile má stanice náhodou IP mimo rozsah (např. 192.168.2.11) tak vše funguje jak má, z vnějšku je dostupné jen omezené "portové okénko" na případný GnomeMeeting nebo bittorent.

Jak jste asi poznali, síťařina není můj obor, ale zvolená politika sítě i síť sama se mi zdá natolik jednoduchá, že bych to snad i já mohl rozchodit, ne?

P.S. Pro zájemce kompletní skript:
#!/bin/sh

# Flush all chains
iptables --flush

# vychozi politika, vsechno prichozi zahazuj 
iptables -P INPUT DROP

# Allow unlimited traffic on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow DNS resolution
iptables -A OUTPUT  -p udp --destination-port 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT  -p tcp  --destination-port 53 -m state --state NEW -j ACCEPT

# vsechno z vnitrni (domaci) site povol, tcp, udp, ..
iptables -A INPUT -p tcp -m iprange --dst-range 192.168.2.1-192.168.2.10 -j ACCEPT

# volne "portove" okento pro okolni svet
iptables -A INPUT -p tcp --dport 7001:7010 -j ACCEPT
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.4.2006 07:04 Jiří Veselský | skóre: 30 | blog: Jirkovo | Ostrava
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Odpovědět | | Sbalit | Link | Blokovat | Admin

To je ale jasné, protože tím pravidlem povolujete veškerý příchozí provoz na IP adresy v rozsahu. Pokud je tedy "vaše" adresa v rozsahu, povolil jste si na svůj počítač jakýkoliv příchozí provoz. Vy zřejmě chcete povolit veškerý příchozí provoz z daného rozsahu adres. Místo --dst-range tak flákněte --src-range a bude.

25.4.2006 11:03 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Místo --dst-range tak flákněte --src-range a bude.
..no tohle mi taky vrtalo hlavou. Logické se zdá právě to co říkáte vy.

To je tak když opisujete přesně co neznáte. Problém je že většina návodů popisuje konfiguraci dedikovaného firewallu, chránícího síť za sebou, kdežto já se snažím nastavit firewall přímo na koncové stanici. Takže některé "směrovky" asi budou obráceně.
25.4.2006 08:33 macrek | skóre: 12
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Este som si tam vsimol:
ked povolujes domacu siet.. v poznamke mas ze povolujes aj tcp aj udp aj ... :), pricom povolujes len tcp. Na to aby si povolil aj udp potrebujes dalsie pravidlo (rovnake), so zmenou len -p udp.
An eye for an eye makes the whole world blind.
25.4.2006 10:36 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Já to trochu zkrátil, ty pravidla pro udp tam jsou, přesně jak radíte, omlouvám se za zmatení. Jaké porty povolit jako další? icmp? Je bezpečné zjednodušit si život a použít -p all ?
25.4.2006 12:05 macrek | skóre: 12
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
cez -p sa nepovoluju porty ale protokoly, icmp by sa hodilo a myslim si ze je v poriadku aj -p all.

Pripadne je mozne obmedzit icmp len pre male packety napr. cez -m length --length 0:1000
An eye for an eye makes the whole world blind.
25.4.2006 12:12 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Ano, jak píšete, myslel jsem protokol, ne port.

K tomu icmp, tohle by mohlo být možná ještě účinnější
# Propoustime pouze ICMP ping
iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type echo-request -j ACCEPT
(ze skriptu od Herona)
25.4.2006 12:42 macrek | skóre: 12
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
jo.. to z icmpecka pusti len ping(tusim), avsak niekedy je vhodne povolit len mensie pingy.(obmedzit velkost pingu napr. na 100bytov)
iptables -A INPUT -i $INET_IFACE -p icmp -m length --length 0:100 --icmp-type echo-request -j ACCEPT
potom take daco:
ping ipecka -s 10000
nebude fungovat
An eye for an eye makes the whole world blind.
25.4.2006 08:53 temporary | skóre: 17
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Odpovědět | | Sbalit | Link | Blokovat | Admin
doporucuji tyto stranky: http://www.petricek.cz/mpfw/

najdete na nich vysvetleni a hlavne hotovy okomentovany script
Mostly harmless
Heron avatar 25.4.2006 09:33 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Odpovědět | | Sbalit | Link | Blokovat | Admin

Dost dobře nechápu, jak to může fungovat.

iptables -A INPUT -p tcp -m iprange --dst-range 192.168.2.1-192.168.2.10 -j ACCEPT

Tímto povilíte všechno pro všechny IP v tom rozsahu. Takže co vám to dělá, je správné.

Podle:

-m state --state NEW

soudím, že chcete používat stavový firewall. Chybí vám tam pravidlo:

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Co politiky pro ostatní chainy?

Zkrátka a dobře, tak jednoduché to nebude. Pokud chcete, můžete si stáhnout (a upravit) můj firewall (skript je řešený jako služba pro FC4, ale jistě si z toho vytáhnete vše potřebné).

Heron
25.4.2006 12:06 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Problém je že většina návodů popisuje konfiguraci dedikovaného firewallu, chránícího síť za sebou, kdežto já se snažím nastavit firewall přímo na koncové stanici.

Váš skript je také určený pro dedikovaný firewall - vidím tři síťovky, dvě do vnitřní sítě (LAN1_IFACE, LAN2_IFACE) a jedna do internetu (INET_IFACE). To máte pak jednoduché :) poznáte vnitřní síť podle interfacu! Já mám koncovou stanici, jedna síťovka, vnitřní síť musím poznávat podle rozsahu IP adres. A na tohle právě nemohu sehnat žádný návod!

Ale zpět k vašemu skriptu.

Co mohu přeskočit na koncové stanici: pravidla spojená s FORWARD, masquerede a NAT, to o to se skutečně stará router. Optimalizace sítě, TOS, asi také.

Naopak ochrana proti SPOOFING, syn-flooding, zahlceni icmp - tady bych inspiraci najít mohl.

Samozřejmě děkuji za všechny reakce! Ten ideální návod ale stále ještě hledám :(
Heron avatar 25.4.2006 12:16 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Váš skript je také určený pro dedikovaný firewall - vidím tři síťovky, dvě do vnitřní sítě (LAN1_IFACE, LAN2_IFACE) a jedna do internetu (INET_IFACE). To máte pak jednoduché :) poznáte vnitřní síť podle interfacu! Já mám koncovou stanici, jedna síťovka, vnitřní síť musím poznávat podle rozsahu IP adres. A na tohle právě nemohu sehnat žádný návod! Ale zpět k vašemu skriptu. Co mohu přeskočit na koncové stanici: pravidla spojená s FORWARD, masquerede a NAT, to o to se skutečně stará router. Optimalizace sítě, TOS, asi také.

Můj script je určen přímo pro můj PC. Routuju ještě na LAN2_IFACE. Ale to je všechno.

Moje síť:

INET_IFACE -- veřejná IP, cesta do Internetu
LAN1_IFACE -- lokálka
LAN2_IFACE -- lokálka, sem routuju Internet.

U mě beží: FTP, WWW, SVN, SSHD. Proto ty input pravidla. A funguji i jako http proxi cache a dns cache (pro LAN2).

Připomněl jste mi, že bych to mohl dopsat jako dokumentaci k tomu skriptu.

25.4.2006 15:44 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Aha, trochu mě zmátly ty tři síťové karty a forwardování.

Bohužel v mém případě se $LAN1_IFACE == $INET_IFACE, takže vaše elegantní pravidlo na neomezování vnitřní sítě:
# Lokalni sit nebudeme omezovat
$IPTABLES -A INPUT -i $LAN1_IFACE -j ACCEPT
..přesně to co bych potřeboval, je pro mě nepoužitelné :( Musím tam dostat nějak to rozmezí IP adres.

Je to vůbec bezpečné testovat vnitřní síť podle rozsahu IP adres? Je reálné riziko podvrhu?
Heron avatar 25.4.2006 18:49 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP

Jestli dobře rozumím vašemu problému: Máte router, který vám přiděluje adresu (DHCP) v rozsahu .1 až .10 (nebylo by lepší to nastavit natvrdo?). Potřebujete k sobě routovat nějaké porty z venku. A spoučastně potřebujete přístup na to druhé PC. Btw jakou adresu má router?

Pokud jsem to pochopil právně, tak si to nastavte: INPUT z IProutru filtrujte a povolte jen ty porty, které potřebujete. A ostatní IP z vnitřní sítě nechte otevřené.

#implicitně zahodíme vse
$IPTABLES -P INPUT DROP
#povolime vnitrni sit
$IPTABLES -A INPUT -s rozsah_adres_vnitrnich_PC -j ACCEPT
#z routru jen na povolené porty
$IPTABLES -A INPUT -s ip_adresa_routeru -p protokol --dport vase_porty -J ACCEPT
#pro navazana spojeni
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Je to vůbec bezpečné testovat vnitřní síť podle rozsahu IP adres? Je reálné riziko podvrhu?

Jak reálné je riziko podvrhu nevím. Ale uvědomte si, že útočník se stejně může připojit jen na programy, které u vás běží a poslouchají na síťovce. Viz netstat -lnp. Pokud budete mít dobře konfigurované služby a spuštěné jen ty, co nutně potřebujete, nemáte se čeho bát.

25.4.2006 18:59 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Ale uvědomte si, že útočník se stejně může připojit jen na programy, které u vás běží a poslouchají na síťovce.

To je hojně rozšířený omyl, který vychází z historické terminologie, jež se traduje z pradávných dob, kdy jeden interface mohl mít jen jednu přiřazenou IP adresu. Ve skutečnosti nic takového jako "poslouchat jen na určitém rozhraní" neexistuje. Proces naslouchá prostřednictvím socketu a ten má určitou (lokální) adresu. Ta je buď 0.0.0.0 a pak socket přijme jakoukoli komunikaci, nebo je nenulová a pak socket přijme jen komunikaci, která má odpovídající cílovou adresu. To, na jaký interface příslušné pakety přišly, v tom nehraje nejmenší roli. Pokud to chcete zohlednit, je třeba to provést pomocí pravidel netfilteru, na úrovni aplikace to provést nelze.

Heron avatar 25.4.2006 19:06 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Špatně jsem to vyjádřil -- o tohle vím, myslel jsem to tak, že se musí jednat o síťový program a ještě k tomu musí naslouchat. Na webový prohlížeč se jen těžko připojíš z venku. :-)

Třeba: pokud tam bude mít SSHD nakonfigurované na klíče (nikoliv login/pass), tak se nemusí bát.
25.4.2006 22:44 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Už se to začíná hezky rýsovat :)

Jestli dobře rozumím vašemu problému: Máte router, který vám přiděluje adresu (DHCP) v rozsahu .1 až .10 (nebylo by lepší to nastavit natvrdo?).

Předpokládám že přiděluje v plném rozsahu 1 - 255. Ale maximum zatím byla 12. Rád bych to vyřešil s dynamickým přidělováním. Nechce se mi udržovat žádné statické seznamy a SW na routeru je dost buggy, UI určitě, špatně se s tím pracuje.

Potřebujete k sobě routovat nějaké porty z venku. A spoučastně potřebujete přístup na to druhé PC. Btw jakou adresu má router?

Přesně tak si to představuji. Router má natvrdo 192.168.2.1

Pokud jsem to pochopil právně, tak si to nastavte: INPUT z IProutru filtrujte a povolte jen ty porty, které potřebujete. A ostatní IP z vnitřní sítě nechte otevřené.

Vida, použít adresy routeru mě nenapadlo! Je zaručené že příchozí požadavek z internetu bude mít vždy adresu routeru?

#implicitně zahodíme vse
$IPTABLES -P INPUT DROP
Tohle je jasné
#povolime vnitrni sit
$IPTABLES -A INPUT -s rozsah_adres_vnitrnich_PC -j ACCEPT
Tohle mě zajímá, liší se -m iprange --src-range 192.168.2.1-192.168.2.10 co navrhuje Jiří Veselský od -s 192.168.2.1-192.168.2.10 co navrhujete vy?

A taky by asi chtělo nastavit protokoly ne? Takže -p all. Nebo to se myslí defaultně?

#z routru jen na povolené porty
$IPTABLES -A INPUT -s ip_adresa_routeru -p protokol --dport vase_porty -J ACCEPT
Je zaručené že příchozí požadavek z internetu (vněšku) bude mít vždy adresu routeru? Router dělá NAT, tak asi jo. A když by NAT nedělal - teď se ptám ze zvědavosti - to by šlo toto pravidlo použít také?

Ten parametr -J (jump) má být asi malé -j
#pro navazana spojeni
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Tohle je něco jako optimalizace? Je to nezbytné? No, všichni mi to doporučují, tak to tam dám, proč ne :)

Pokud budete mít dobře konfigurované služby a spuštěné jen ty, co nutně potřebujete, nemáte se čeho bát.

Mám puštěný VNC server, zaheslovaný, ale přes šifrovaný kanál to zrovbna nejede, takže potenciál ke zneužití tu obávám se, je. VNC musí být bezpečně dostupné jen z vnitřní sítě!
Heron avatar 25.4.2006 23:06 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP

Bez urážky, naučte se nejprve něco o sítích.

Nenapsal jsem vám skript pro copy-paste, a to ani není cílem diskuse.

Tohle mě zajímá, liší se -m iprange --src-range 192.168.2.1-192.168.2.10 co navrhuje Jiří Veselský od -s 192.168.2.1-192.168.2.10 co navrhujete vy?

Pro rozsah adres použijte --src-range, pro jednu adresu -s. Myslel jsem, že tohle je jasné.

#pro navazana spojeni
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Tohle je něco jako optimalizace? Je to nezbytné? No, všichni mi to doporučují, tak to tam dám, proč ne :)

Není to optimalizace. Je to povolení pro navázané spojení. Když prohlížečem jdete na nějaký web, tak se vám musí vrátit packety zpět. A protože už je spojení navázané (šel jste ven), tak se pustí i dovnitř aniž byste to nastavoval jako povolený port.

Nebudu to už psát jako pravidla pro iptables, jen pseudokódem:
1) DROP INPUT
2) INPUT ACCEPT rozsah vnitrnich adres (mimo adresu routeru)
3) INPUT ACCEPT port1 z adresy routeru
...
4) INPUT ACCEPT portn z adresy routeru
5) INPUT ACCEPT navázaných spojení

Dá se to doplnit o logování, TOS, ICMP flood filter atd. Vše najdete v mém skriptu

26.4.2006 00:12 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Re: iptables - záhada s vlastním IP
Žádný strach, nejsem urážlivý tip :) Moje znalosti síťování jsou silně útržkovité, takže se radši ptám víc.

Myslím, že teď už jsem nashromáždil dostatek informací abych zbytek dal dohromady sám. Určitě je v podobné situaci více lidí, takže Ještě jednou všem děkuju, speciálně pak Heronovi.

O výsledek se podělím, určitě se bude hodit nejen mě.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.