Portál AbcLinuxu, 6. května 2025 07:35

Dotaz: Nefunguje iptables rule pokud specifikuji input interface

4.5.2018 00:35 v.
Nefunguje iptables rule pokud specifikuji input interface
Přečteno: 225×
Odpovědět | Admin
Ahoj, lámu si hlavu nad tímto. Zkoušel jsem v ip6tables v chainu INPUT následující pravidla (vždy jen jedno):
    4   301 test  all      ens224 *       ::/0                 ::/0
    5   365 test  all      *      *       ::/0                 ::/0
    0     0 test  all      docker0 *       ::/0                 ::/0
    0     0 test  all      !docker0 *       ::/0                 ::/0
A pokaždé jsem zkoušel s dotyčným strojem komunikovat tak, abych viděl narůstající počty paketů. Pokud je v chainu jen pravidlo "0 0 test all !docker0 * ::/0 ::/0", pak se neaplikuje a do chainu test se vůbec nejde. Pokud je tam toto " 4 301 test all ens224 * ::/0 ::/0", pak ano.

Proč když řeknu, aby to platilo pro všechna rozhraní mimo docker0 tak to nefunguje, ale když uvedu, aby to platilo pro ens224, tak to jede? Vždyť by to mělo dělat to samé... pokud jde komunikace z ens224 (tzn. platí že nejde z docker0)?
Díky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.5.2018 08:43 NN
Rozbalit Rozbalit vše Re: Nefunguje iptables rule pokud specifikuji input interface
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je jen nejaky vypis? Kde vidis pravidla? Je to allow, nebo deny? Je to input, nebo output rozhrani? Mohl by jsi poslat zapis tech providel ie.:
ip6tables -A INPUT ! -o docker0 -j DROP
Dale hraje roli poradi vsech pravidel, jestli se nejedna o forward etc.
4.5.2018 09:14 Sten
Rozbalit Rozbalit vše Re: Nefunguje iptables rule pokud specifikuji input interface
Odpovědět | | Sbalit | Link | Blokovat | Admin
To bude proto, že druhé pravidlo je * *, takže matchne všechno, ten řetěz test zpracování ukončí a další pravidla se už neaplikují.
4.5.2018 09:50 v.
Rozbalit Rozbalit vše Re: Nefunguje iptables rule pokud specifikuji input interface
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jedná se o input interface a jak jsem psal je tam vždy jen jedno pravidlo. Tzn. například toto jedinné pravidlo se neaplikuje:
ip6tables -I INPUT 1 -i !docker0 -j test
Pokud ale nespecifikuji input interface nebo dám jako input interface ens224 (vnější - ethernet), pak se to aplikuje:
ip6tables -I INPUT 1 -i ens224 -j test
Zkouším to tak, že v INPUT chainu je naráz pouze jedno pravidlo, aby se navzájem neovlivňovaly.
4.5.2018 10:15 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Nefunguje iptables rule pokud specifikuji input interface
-i !docker0

Nejsem si jistý, jestli tohle vůbec někdy fungovalo - a jestli to bez escapování vůbec projde přes shell. Přes bash určitě ne:

  unicorn:~ # iptables -A test -i !docker0
  -bash: !docker0: event not found

Stará syntaxe byla

  -i \! docker0

ale tenhle zápis je už nějaký pátek deprecated (a třeba iptables 1.6.2 už ho nepodporuje) a mělo by se používat

  \! -i docker0

Zrada ovšem je, že "iptables -L" vypíše oboje stejně:

unicorn:~ # iptables -N test
unicorn:~ # iptables -A test -i \!docker0
unicorn:~ # iptables -A test -i \! docker0
Bad argument `docker0'
Try `iptables -h' or 'iptables --help' for more information.
unicorn:~ # iptables -A test \! -i docker0
unicorn:~ # iptables -nvL test
Chain test (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0            all  --  !docker0 *       0.0.0.0/0            0.0.0.0/0           
    0     0            all  --  !docker0 *       0.0.0.0/0            0.0.0.0/0           
unicorn:~ # iptables-save 
# Generated by iptables-save v1.6.2 on Fri May  4 10:10:07 2018
*filter
:INPUT ACCEPT [35:7638]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [20:1452]
:test - [0:0]
-A test -i !docker0
-A test ! -i docker0
COMMIT
# Completed on Fri May  4 10:10:07 2018
4.5.2018 10:51 v.
Rozbalit Rozbalit vše Re: Nefunguje iptables rule pokud specifikuji input interface
Supr. Díky moc, už to funguje. Zrada byla s tím pořadím vykřičník vs. přepínač. Tzn. ve výpise se to zobrazuje stejně, ale nefunguje stejně. (escapování vykříčníku dávám, jen jsem ho nenapsal sem do diskuse)
4.5.2018 11:10 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Nefunguje iptables rule pokud specifikuji input interface
Nejde ani tak o pořadí (to by prostě žádné pravidlo nepřidalo - a se starší verzí by to fungovalo správně), ale o to, že jste mezi vykřičníkem a jménem rozhraní neudělal mezeru, takže se vykřičník považoval za součást jména rozhraní.

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.