Jednosměrné vs obousměrné pravidlo v iptables

Jednosměrné vs obousměrné pravidlo v iptables
« kdy: 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


aaa158

  • ***
  • 238
    • Zobrazit profil
    • E-mail
Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #1 kdy: 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".

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #2 kdy: 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?

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #3 kdy: 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.

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #4 kdy: 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ě?


Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #5 kdy: 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.

kmarty

  • ***
  • 193
    • Zobrazit profil
Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #6 kdy: 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.

kmarty

  • ***
  • 193
    • Zobrazit profil
Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #7 kdy: 21. 12. 2011, 17:10:54 »
Sakra: "je umi" = "ze umi"

V.

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #8 kdy: 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 ...

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #9 kdy: 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é".

kmarty

  • ***
  • 193
    • Zobrazit profil
Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #10 kdy: 22. 12. 2011, 10:00:00 »
2a903user: Ani ne tak "zapni", jako spis "pouzij".

V tom je rozdil od paketoveho filtru ktery timto nedisponuje.

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #11 kdy: 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í)

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #12 kdy: 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?

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #13 kdy: 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.

Re:Jednosměrné vs obousměrné pravidlo v iptables
« Odpověď #14 kdy: 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.