Czy lepiej jest ustawić reguły w ip6tables, czy wyłączyć ipv6?


11

Mam następującą konfigurację sieci:

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:e0:1c:73:02:09
          inet addr:10.1.4.41  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::2e0:4cff:fe75:309/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:858600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1069549 errors:0 dropped:0 overruns:5 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:142871181 (136.2 MiB)  TX bytes:717982640 (684.7 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:37952 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3396918 (3.2 MiB)  TX bytes:3396918 (3.2 MiB)

Mam serwer DHCP w swojej sieci i mogę uzyskać następującą dzierżawę:

lease {
  interface "eth0";
  fixed-address 10.1.4.41;
  option subnet-mask 255.255.0.0;
  option routers 10.1.255.253;
  option dhcp-lease-time 120;
  option dhcp-message-type 5;
  option domain-name-servers 82.160.125.52,213.199.198.248,82.160.1.1;
  option dhcp-server-identifier 192.168.22.22;
  renew 3 2014/01/01 18:34:41;
  rebind 3 2014/01/01 18:35:30;
  expire 3 2014/01/01 18:35:45;
}

Mogę pingować 127.0.0.1, ::1, 10.1.4.41:

$ ping 10.1.4.41
PING 10.1.4.41 (10.1.4.41) 56(84) bytes of data.
64 bytes from 10.1.4.41: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 10.1.4.41: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 10.1.4.41: icmp_seq=3 ttl=64 time=0.085 ms
^C
--- 10.1.4.41 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.065/0.075/0.085/0.008 ms

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.055 ms
^C
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.055/0.059/0.066/0.005 ms

$ ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms
^C
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.037/0.046/0.052/0.006 ms

Nie mogę pingować adresu IPv6 fe80::2e0:4cff:fe75:309:

$ ping6 fe80::2e0:4cff:fe75:309
connect: Invalid argument

Ustawiłem kilka reguł iptables (ipv4):

# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N TCP
-N UDP
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A OUTPUT -m conntrack --ctstate INVALID -j DROP

I działa zgodnie z oczekiwaniami dla ipv4. Ale kiedy sprawdzam ip6tables, widzę, że niektóre pakiety tam idą:

# ip6tables -nvL
Chain INPUT (policy ACCEPT 381 packets, 27624 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 390 packets, 26296 bytes)
 pkts bytes target     prot opt in     out     source               destination

Postępowałem zgodnie z tym przewodnikiem, a oni mówią, że powinienem skopiować konfigurację iptables (ipv4) i wkleić ją do ip6tables (ipv6). Ale kiedy to robię, żaden pakiet nie może przejść przez regułę RELATED,ESTABLISHEDw tabeli ipv6. Wszystkie zostały usunięte z powodu INPUT łańcucha strategii ( DROP).

# ip6tables -nvL
Chain INPUT (policy DROP 5 packets, 360 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all      eth0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0
    0     0 ACCEPT     all      tun0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID
    0     0 UDP        udp      *      *       ::/0                 ::/0                 ctstate NEW
    0     0 TCP        tcp      *      *       ::/0                 ::/0                 tcp flags:0x17/0x02 ctstate NEW
    0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
    0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID

Chain TCP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain UDP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Jak widać, nie ma pakietów wyjściowych, więc dlaczego Google i wymiana stosów próbują połączyć się z moim komputerem? I jak to robią, bo nawet ja nie mogę pingować mojego adresu IPv6?

Mówią także, że jeśli mój dostawca usług internetowych nie ma ipv6 (w umowie nie ma wpisu ipv6) powinienem wyłączyć ipv6 i robiłem to wcześniej, używając ipv6.disable=1. Zadałem podobne pytanie na meta.stackoverflow.comi otrzymałem odpowiedź, że nie powinienem wyłączać ipv6.

Nie mam pojęcia co robić. Mam pewne problemy z połączeniem, to znaczy czasami nie mogę uzyskać dostępu do stron przy wymianie stosów lub google, mam również problemy z pastebin.com. W każdym przypadku występują te same objawy - po wpisaniu adresu w przeglądarce muszę czasem czekać kilka minut, aby uzyskać dostęp do strony, a po ponownym załadowaniu 2-3 razy mogę go swobodnie przeglądać, przynajmniej dla pewien okres czasu.

Odpowiedzi:


13

Twój adres IPv6 zaczyna się od, fe80:dlatego jest to adres lokalny dla łącza. Takie adresy są dostępne tylko na tym samym łączu, co interfejs sieciowy. Ponieważ ta sama podsieć lokalna dla łącza istnieje w każdym interfejsie sieciowym, musisz określić, którego interfejsu chcesz użyć. Na przykład, jeśli chcesz pingować adres lokalny dla łącza.

Wypróbuj jeden z następujących ping6przykładów. Oba robią to samo:

ping6 fe80::2e0:4cff:fe75:309%eth0
ping6 -I eth0 fe80::2e0:4cff:fe75:309

Oznacza to również, że tylko systemy na twoim lokalnym łączu (twojej sieci LAN) mogą używać tego adresu lokalnego dla połączenia z twoim systemem. Routery nie będą kierować tych adresów. Nie ma możliwości, aby Google lub Stack Exchange wysyłały ruch IPv6 do twojego komputera, ponieważ twoje urządzenie nie ma adresu IPv6, który jest z niego dostępny / możliwy do routingu.

Więc, jaki ruch IPv6 widzisz na interfejsie? Prawdopodobnie takie rzeczy jak mDNS ( multicast DNS ) i inne protokoły, które mogą automatycznie łączyć się z lokalnym łączem. Na przykład Apple Airplay i Windows Home Group .

Regułach zapory brakuje bardzo ważną rzecz: ICMPv6. IPv6 używa ICMP o wiele bardziej niż IPv4, a niedopuszczenie pakietów ICMP może poważnie spowolnić ruch, ponieważ nie otrzymasz komunikatów o błędach związanych z tym ruchem. Może to powodować duże opóźnienia / przekroczenia limitu czasu. Zezwolenie na ruch ICMPv6 zwykle nie boli, więc możesz dodać to do reguł zapory:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Jeśli chcesz zablokować ping6pakiety (chociaż tak naprawdę nie rozumiem, dlaczego ludzie wciąż to robią, utrudnia to debugowanie łączności), możesz dodać to tak, jak przed poprzednią ACCEPTlinią:

ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j DROP

Jest to szczególnie ważne, gdy uzyskasz rzeczywistą globalną łączność IPv6 ze swoim komputerem, ale nie zaszkodzi, jeśli już się na to przygotujesz :-)


1
Teraz rozumiem. Dodałem icmpv6regułę, ale ograniczoną do 20 / min, i widzę, że pakiety tam idą. ping6 -I eth0 fe80::2e0:4cff:fe75:309działa również.
Michaił Morfikow

2

Podczas zarządzania systemami zawsze uważam, że wszystko, czego nie muszę wyraźnie świadczyć w tym systemie, powinno zostać wyłączone. Ta filozofia dotyczy wszystkiego, czy to:

  • odinstalowanie niepotrzebnego oprogramowania
  • wyłączanie pulpitu GUI na serwerze
  • wyłączanie i / lub wykluczanie niepotrzebnego sprzętu
  • wyłączanie IPv6
  • wyłączanie niepotrzebnych usług
  • itp.

Mam tę samą filozofię, ale w tym przypadku tak naprawdę nie wiem, co robić. Niektórzy mówią, że powinienem wyłączyć ipv6, inni mówią coś innego. Mam problemy, nawet gdy ipv6 jest wyłączony.
Michaił Morfikow

@MikhailMorfikov - czy Twój dostawca usług internetowych wykonuje jakieś proxy / NAT, w których zmusza klientów do korzystania z IPv6 tylko w celu uzyskania dostępu do ISP. Nie sądzę, że jest to problem dla ciebie, w przeciwnym razie miałbyś adres IPv6, ale po prostu o tym pomyślałem.
slm

Nie mam pojęcia, może powinienem ich zapytać, a może coś zrobią i naprawią problem.
Michaił Morfikow

2

Mówią też, że jeśli mój dostawca usług internetowych nie ma ipv6 (w umowie nie ma wpisu ipv6) powinienem wyłączyć ipv6 i robiłem to wcześniej, używając ipv6.disable = 1. Zadałem podobne pytanie na meta.stackoverflow.com i otrzymałem odpowiedź, że nie powinienem wyłączać ipv6.

oczywiście nie zobaczyłbyś dzierżawy adresu IPv6 z DHCP - po to jest DHCPv6: DHCP i DHCPv6 nie są kompatybilne.

W momencie wyłączenia IPv6, czy nie: Jeśli nie potrzebujesz go, a twój dostawca usług internetowych go jeszcze nie zapewnia, wyłącz go, ale przygotuj się na jego wprowadzenie . Obejmuje to usunięcie / przeprojektowanie wszystkiego, co wyraźnie opiera się na starszych adresach IP, takich jak zakodowane adresy IP lub korzystanie z rozgłaszania.

Apropos wyłączanie IPv6: strzeż się, że na przykład Microsoft uważa IPv6 za integralną część systemu operacyjnego, więc wyłączenie IPv6 w tym miejscu może wpłynąć na wsparcie, które od nich otrzymujesz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.