È meglio impostare regole in ip6tables o disabilitare ipv6?


11

Ho la seguente configurazione di rete:

# 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)

Ho un server DHCP nella mia rete e posso ottenere il seguente contratto di locazione:

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;
}

Posso fare un rumore metallico 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

Non riesco a eseguire il ping dell'indirizzo ipv6 fe80::2e0:4cff:fe75:309:

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

Ho impostato alcune regole di 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

E funziona come previsto per ipv4. Ma quando controllo ip6tables, posso vedere alcuni pacchetti andare lì:

# 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

Ho seguito questa guida e mi dicono che dovrei copiare la configurazione di iptables (ipv4) e incollarla in ip6tables (ipv6). Ma quando lo faccio, nessun pacchetto può passare attraverso la regola RELATED,ESTABLISHEDnella tabella ipv6. Tutti vengono eliminati a causa della politica della catena INPUT ( 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

Come puoi vedere non ci sono pacchetti di output, quindi perché google e stack exchange provano a connettersi alla mia macchina? E come lo fanno perché anche io non riesco a eseguire il ping del mio indirizzo ipv6?

Dicono anche che se il mio ISP non ha ipv6 (nel contratto di locazione, non c'è alcuna voce ipv6) dovrei disabilitare ipv6 e lo avevo già fatto prima usando ipv6.disable=1. Ho fatto una domanda simile a meta.stackoverflow.com, e ho avuto una risposta che non avrei dovuto disabilitare ipv6.

Non ho idea di cosa fare. Ho dei problemi di connessione, a volte non riesco ad accedere alle pagine in cambio di stack, o google, ho anche problemi con pastebin.com. In ogni caso ci sono gli stessi sintomi - dopo aver digitato un indirizzo nel mio browser, devo aspettare a volte diversi minuti per accedere al sito e dopo averlo ricaricato 2-3 volte, posso navigare liberamente, almeno per un certo periodo di tempo.

Risposte:


13

Il tuo indirizzo IPv6 inizia con fe80:ed è quindi un indirizzo locale di collegamento. Tali indirizzi sono utilizzabili solo sullo stesso collegamento dell'interfaccia di rete. Poiché esiste la stessa sottorete di collegamento locale su ogni interfaccia di rete, è necessario specificare quale interfaccia si desidera utilizzare. Ad esempio, quando si desidera eseguire il ping di un indirizzo locale di collegamento.

Prova uno dei seguenti ping6esempi. Entrambi fanno lo stesso:

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

Questo significa anche che solo i sistemi sul tuo collegamento locale (la tua LAN) possono usare questo indirizzo locale per il collegamento al tuo sistema. I router non instraderanno quegli indirizzi. Non è possibile che Google o Stack Exchange stiano inviando traffico IPv6 al tuo computer, perché il tuo computer non ha un indirizzo IPv6 raggiungibile / instradabile da esso.

Allora, che cosa il traffico IPv6 sta vedendo sulla vostra interfaccia? Probabilmente cose come mDNS ( DNS multicast ) e altri protocolli che possono connettersi automaticamente sul collegamento locale. Ad esempio Apple Airplay e Windows Home Group .

Le regole del firewall mancano una cosa molto importante: ICMPv6. IPv6 utilizza ICMP molto più di IPv4 e non consentire l'ingresso dei pacchetti ICMP può paralizzare gravemente il tuo traffico perché non riceverai messaggi di errore relativi a quel traffico. Ciò può causare lunghi ritardi / timeout. Consentire il traffico ICMPv6 di solito non fa male, quindi è possibile aggiungere questo alle regole del firewall:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Se vuoi bloccare i ping6pacchetti (anche se non capisco davvero perché la gente lo faccia ancora in questi giorni, rende molto più difficile il debug della connettività) puoi aggiungere questo come prima della ACCEPTriga precedente :

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

Questo è importante soprattutto quando ottieni una reale connettività IPv6 globale al tuo computer, ma non ti farà male se ti prepari già per questo :-)


1
Ora capisco. Ho aggiunto la icmpv6regola ma limitato a 20 / min e posso vedere che i pacchetti vanno lì. ping6 -I eth0 fe80::2e0:4cff:fe75:309funziona anche.
Mikhail Morfikov,

2

Prendo sempre la posizione, quando gestisco i sistemi, che tutto ciò di cui non ho esplicitamente bisogno per fornire i servizi su tale sistema, debba essere disattivato. Questa filosofia va a tutto sia che si tratti di:

  • disinstallazione di software non necessario
  • disabilitazione di un desktop GUI su un server
  • disabilitazione e / o esclusione di hardware non autorizzato
  • disabilitazione di IPv6
  • disabilitazione dei servizi non richiesti
  • eccetera.

Ho la stessa filosofia, ma in questo caso non so davvero cosa fare. Alcune persone dicono che dovrei disabilitare ipv6, altri dicono qualcosa di diverso. Ho problemi anche quando ipv6 è disabilitato.
Mikhail Morfikov,

@MikhailMorfikov: il tuo ISP esegue qualsiasi proxy / NAT in cui i suoi clienti utilizzano IPv6 solo per accedere all'ISP. Non penso che questo sia un problema per te, altrimenti avresti un indirizzo IPv6 ma ci hai pensato.
slm

Non ne ho idea, forse dovrei chiederglielo, e forse faranno qualcosa e risolveranno il problema.
Mikhail Morfikov,

2

Dicono anche che se il mio ISP non ha ipv6 (nel contratto di locazione, non c'è alcuna voce ipv6) dovrei disabilitare ipv6 e lo avevo già fatto prima usando ipv6.disable = 1. Ho fatto una domanda simile su meta.stackoverflow.com e ho avuto una risposta che non avrei dovuto disabilitare ipv6.

ovviamente non vedresti un lease di indirizzi IPv6 con DHCP - questo è DHCPv6: DHCP e DHCPv6 non sono compatibili.

A partire dalla disattivazione o meno di IPv6: se non è necessario e l'ISP non lo fornisce ancora, disattivarlo ma prepararsi alla sua introduzione . Ciò include la rimozione / riprogettazione di tutto ciò che si basa esplicitamente su IP legacy, come indirizzi IP con codice fisso o utilizzo di broadcast.

A proposito di disattivare IPv6: attenzione che, ad esempio, Microsoft considera IPv6 parte integrante del sistema operativo, quindi la disattivazione di IPv6 potrebbe influire sul supporto che si ottiene da essi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.