Fórum Root.cz

Hlavní témata => Sítě => Téma založeno: a903user 21. 12. 2011, 08:28:06

Název: Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: a903user 21. 12. 2011, 08:28:06
Ahoj, může mi někdo nějak jednoduše vysvětlit pravidlo, kdy je do firewallu nutné zapsat obousměrné pravidlo a kdy stačí pouze jednosměrné. Nejlépe s příkladem... Mnohdy bych řekl, že musí být obousměrné a kupodivu stačí pouze jednosměrné a naopak.

Díky
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: aaa158 21. 12. 2011, 10:06:04
Mno podla mna staci povolit kompletne outgoing traffic (pokial nechces obmedzovat userov), a do incoming dat "iptables -P INPUT DROP; iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT" a potom len pridavat povolene incoming porty. Na zabezpecenie koncovej stanice staci, na router/firewall to bude zrejme komplikovanejsie :-)

Prave to "-m state --state ESTABLISHED,RELATED -j ACCEPT" sposobi to ze "jednosmerne" pravidlo funguje "obojsmerne".
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: a903user 21. 12. 2011, 12:14:52
Jde mi spíše tak nějak o princip. Nejdříve jsem si myslel, že např. pro TCP spojení je potřeba vytvořit povolovací pravidlo (vše ostatní je zakázáno) tam/ven i zpět/dovnitř (jelikož pakety putují tam i zpět) a pro UDP pouze tam/ven (z principu protokolu). Pak jsem došel na to, že pro některá TCP spojení stačí definovat pravidlo pouze tam/ven. Teď mě ovšem mate, že některá TCP spojení musím povolit obousměrně a některá jen jednosměrně. Co je tím faktorem, který to rozhoduje?
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: Ondřej Caletka 21. 12. 2011, 12:25:10
Jde o to, že klasicky se konfiguruje firewall jako stavový, to znamená, že sleduje jednotlivá spojení a obvykle je někde na začátku zadáno povolení již navázaných (--state ESTABLISHED)  spojení. Takže stačí přidat explicitní povolovací pravidlo pro ten směr, ve kterém je žádoucí spojení navazovat. O všechny následující pakety daného spojení v tomto i opačném směru se pak postará uvedené pravidlo stavového firewallu. Protokol TCP samozřejmě bez obousměrné průchodnosti nikdy nenaváže spojení.

Pro zjištění, co se vlastně děje ve firewallu se hodí počítadla, co jsou vidět ve výpisu iptables -L -v.
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: a903user 21. 12. 2011, 12:38:41
Jde o to, že klasicky se konfiguruje firewall jako stavový, to znamená, že sleduje jednotlivá spojení a obvykle je někde na začátku zadáno povolení již navázaných (--state ESTABLISHED)  spojení. Takže stačí přidat explicitní povolovací pravidlo pro ten směr, ve kterém je žádoucí spojení navazovat. O všechny následující pakety daného spojení v tomto i opačném směru se pak postará uvedené pravidlo stavového firewallu. Protokol TCP samozřejmě bez obousměrné průchodnosti nikdy nenaváže spojení.

Pro zjištění, co se vlastně děje ve firewallu se hodí počítadla, co jsou vidět ve výpisu iptables -L -v.
Aha, takže pokud je firewall nakonfigurován jako stavový (má na začátku hromadné pravidlo s --state ESTABLISHED), tak se jednotlivými pravidly již pouze definuje, kdo (+ další parametry) může a nemůže navazovat spojení. Opačný směr se poté povolí automaticky. Pokud ovšem toto pravidlo chybí, tak se jedná o bezestavový a je nutné pro každé TCP spojení povolit směr tam i ven, pak ovšem nemáme kontrolu nad tím, kdo spojení navázal. Tudíž to může být nebezpečné.

Chápu to správně?
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: a903user 21. 12. 2011, 13:15:01
O tom, že se to musí některým pravidlem povolit opačný směr apod. již navázaných spojení jsem netušil. Myslel jsem si, že tato funkce je zapnuta automaticky (defaultně) již z faktu, že iptables je stavový firewall.
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: kmarty 21. 12. 2011, 17:09:29
To sice ano, ale to pouze znaci je umi rozlisovat stav spojeni. A je na tobe (a tvych pravidlech) co s temi stavy v netfilteru udelas.
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: kmarty 21. 12. 2011, 17:10:54
Sakra: "je umi" = "ze umi"
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: V. 21. 12. 2011, 17:51:16
V gentoo mam conntrack-tools ... link je http://conntrack-tools.netfilter.org ... dá se vypsat navázaná spojení a manipulovat s nimi ...
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: a903user 22. 12. 2011, 08:49:36
To sice ano, ale to pouze znaci je umi rozlisovat stav spojeni. A je na tobe (a tvych pravidlech) co s temi stavy v netfilteru udelas.
Aha, takže je to systém. Umíme. Pokud to chceš používat, tak si to zapni. Já jsem si právě myslel, že to je automaticky "zapnuté".
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: kmarty 22. 12. 2011, 10:00:00
2a903user: Ani ne tak "zapni", jako spis "pouzij".

V tom je rozdil od paketoveho filtru ktery timto nedisponuje.
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: Mirek Prýmek 22. 12. 2011, 10:38:44
Aha, takže pokud je firewall nakonfigurován jako stavový (má na začátku hromadné pravidlo s --state ESTABLISHED), tak se jednotlivými pravidly již pouze definuje, kdo (+ další parametry) může a nemůže navazovat spojení. Opačný směr se poté povolí automaticky. Pokud ovšem toto pravidlo chybí, tak se jedná o bezestavový a je nutné pro každé TCP spojení povolit směr tam i ven, pak ovšem nemáme kontrolu nad tím, kdo spojení navázal. Tudíž to může být nebezpečné.

Chápu to správně?

Myslím, že ne. Jak už říkali předřečníci, obvykle se to dělá tak, že se pravidla píšou jenom pro PRVNÍ paket daného spojení a všechny další už spadnou do established/related. Kontrolu nad tím, kdo spojení navázal, pochopitelně máme, protože ten první paket jde nějakým směrem...

Taky bych ještě dodal, že "related" znamená, že paket se nějakého existujícího spojení týká, ale není přímo jeho součástí (nejrůznější ICMP apod. nebo dokonce i FTP datové spojení)
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: a903user 22. 12. 2011, 10:54:08
Myslím, že ne. Jak už říkali předřečníci, obvykle se to dělá tak, že se pravidla píšou jenom pro PRVNÍ paket daného spojení a všechny další už spadnou do established/related. Kontrolu nad tím, kdo spojení navázal, pochopitelně máme, protože ten první paket jde nějakým směrem...

Taky bych ještě dodal, že "related" znamená, že paket se nějakého existujícího spojení týká, ale není přímo jeho součástí (nejrůznější ICMP apod. nebo dokonce i FTP datové spojení)
Ano, však tak jsem to myslel. Píšou se pouze pro první paket daného spojení (kdo spojení navazuje), ale někde v pravidlech musí být uvedeno i pravidlo se zmiňovaným --state ESTABLISHED,RELATED, jinak tento princip definování pouze prvního paketu nebude fungovat, jelikož nebude firewall nakonfigurován jako stavový. Pokud bychom toto pravidlo s --state ESTABLISHED,RELATED neuvedli, tak to nebude fungovat... Nebo ne?
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: Mirek Prýmek 22. 12. 2011, 11:05:08
Ano, však tak jsem to myslel. Píšou se pouze pro první paket daného spojení (kdo spojení navazuje), ale někde v pravidlech musí být uvedeno i pravidlo se zmiňovaným --state ESTABLISHED,RELATED, jinak tento princip definování pouze prvního paketu nebude fungovat, jelikož nebude firewall nakonfigurován jako stavový. Pokud bychom toto pravidlo s --state ESTABLISHED,RELATED neuvedli, tak to nebude fungovat... Nebo ne?

Jo.

Ale jinak se samozřejmě stavový firewall dá používat i jako nestavový - pak je potřeba ty pravidla napsat jinak.
Název: Re:Jednosměrné vs obousměrné pravidlo v iptables
Přispěvatel: Mirek Prýmek 22. 12. 2011, 11:10:16
ale někde v pravidlech musí být uvedeno i pravidlo se zmiňovaným --state ESTABLISHED,RELATED

Ještě možná malou poznámku: tohle pravidlo je dobrý dát ne "někam", ale pokud možno na začátek, aby se snížil počet pravidel, kterýma musí každý paket procházet.