Mam dwa interfejsy na moim VPS: eth0
i eth0:0
. Chcę zablokować przychodzące pakiety na porcie 80 przy eth0:0
użyciu iptables. Próbowałem tego, ale to nie działa:
iptables -A INPUT -i "eth0:0" -p tcp --destination-port 80 -j DROP
Jeśli zmienię eth0:0
na eth0
to, działa poprawnie. Jaki jest problem?
Odpowiedzi:
Krótka historia: sposób, w jaki to zrobiłeś, jest poprawny (zgodnie z komentarzem do pytania).
Długa historia: w Linuksie nazywane „urządzenie” sieciowe
foo:bar
to alias „foo” używany, gdy musimy przypisać wiele ustawień sieciowych do interfejsu „foo”, np. Aby odpowiadał w wielu podsieciach na tym samym przewodzie.Jest to niechlujny sposób na zrobienie tego i niekonsekwentne uruchamianie. W przypadku IPv6 wszystkie adresy przypisane do interfejsu eth0 są wymienione razem pod wpisem eth0. Istnieje bardziej nowoczesna metoda robienia tego (za pomocą
ip addr
polecenia).Możesz wykryć interfejsy aliasów, ponieważ
:
w nazwach mają dwukropek , część po lewej stronie dwukropka to zachowana nazwa interfejsu, a zwrotka interfejsuifconfig
jest bardzo krótka.HWaddr
Powinny również być identyczny z interfejsem „macierzystego”. Nie będą również wymienione w/proc/net/dev
. Jeśli chcesz powiedziećip addr
,eth0:0
pokaże się jako drugi adres interfejsueth0
. (poszukaj wciętej linii zaczynającej się odinet
)Aliasy i ich rodzice mają wiele ustawień i pól, ponieważ dzielą warstwę fizyczną. Jądro nie traktuje ich jako całkowicie oddzielnych interfejsów. Po pierwsze, ruch pojawia się w interfejsie nadrzędnym , a nie w aliasie. Być może zauważyłeś, że alias nie ma nawet liczników pakietów / bajtów!
Jeśli musisz wąchać ruch, zaporę ogniową itp. W interfejsie aliasu, musisz zamiast tego użyć jego elementu nadrzędnego. Ponieważ jedyną różnicą, jaką alias ma od swojego rodzica, są ustawienia IPv4, jedynym sposobem dopasowania ruchu na aliasie jest użycie tych ustawień IP. Za pomocą
iptables
dopasowujesz adres IPv4 aliasu, tak jak w komentarzu do odpowiedzi.źródło