Ist es besser, Regeln in ip6tables festzulegen oder ipv6 zu deaktivieren?

11

Ich habe die folgende Netzwerkkonfiguration:

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

Ich habe einen DHCP-Server in meinem Netzwerk und kann die folgende Lease erhalten:

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

Ich kann ping 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

Ich kann die IPv6-Adresse nicht anpingen fe80::2e0:4cff:fe75:309:

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

Ich habe einige iptables-Regeln festgelegt (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

Und es funktioniert wie erwartet für ipv4. Aber wenn ich ip6tables überprüfe, kann ich sehen, dass einige Pakete dorthin gehen:

# 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

Ich habe diese Anleitung befolgt und sie sagen, dass ich die iptables (ipv4) -Konfiguration kopieren und in ip6tables (ipv6) einfügen sollte. Aber wenn ich das mache, kann kein Paket die Regel RELATED,ESTABLISHEDin der IPv6-Tabelle durchlaufen . Alle von ihnen werden aufgrund der INPUT-Kettenrichtlinie ( DROP) gelöscht .

# 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

Wie Sie sehen, gibt es keine Ausgabepakete. Warum versuchen Google und Stack Exchange, eine Verbindung zu meinem Computer herzustellen? Und wie machen sie das, weil selbst ich meine IPv6-Adresse nicht anpingen kann?

Sie sagen auch, wenn mein ISP kein IPv6 hat (im Mietvertrag gibt es keinen IPv6-Eintrag), sollte ich IPv6 deaktivieren und hatte dies zuvor mit verwendet ipv6.disable=1. Ich habe eine ähnliche Frage an gestellt meta.stackoverflow.comund eine Antwort erhalten, dass ich ipv6 nicht deaktivieren sollte.

Ich habe keine Ahnung, was ich tun soll. Ich habe einige Verbindungsprobleme. Ich meine, manchmal kann ich beim Stapeltausch oder bei Google nicht auf Seiten zugreifen. Ich habe auch Probleme mit pastebin.com. In jedem Fall treten die gleichen Symptome auf - nachdem ich eine Adresse in meinen Browser eingegeben habe, muss ich manchmal einige Minuten warten, um auf die Site zuzugreifen, und nachdem ich sie 2-3 Mal neu geladen habe, kann ich sie frei durchsuchen, zumindest für a Bestimmter Zeitabschnitt.

Mikhail Morfikov
quelle

Antworten:

13

Ihre IPv6-Adresse beginnt mit fe80:und ist daher eine verbindungslokale Adresse. Solche Adressen können nur über dieselbe Verbindung wie die Netzwerkschnittstelle verwendet werden. Da auf jeder Netzwerkschnittstelle dasselbe verbindungslokale Subnetz vorhanden ist, müssen Sie angeben, welche Schnittstelle Sie verwenden möchten. Zum Beispiel, wenn Sie eine linklokale Adresse anpingen möchten.

Probieren Sie eines der folgenden ping6Beispiele aus. Beide machen das Gleiche:

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

Dies bedeutet auch, dass nur Systeme auf Ihrer lokalen Verbindung (Ihrem LAN) diese verbindungslokale Adresse verwenden können, um eine Verbindung zu Ihrem System herzustellen. Router leiten diese Adressen nicht weiter. Es gibt keine Möglichkeit, dass Google oder Stack Exchange IPv6-Datenverkehr an Ihren Computer senden, da Ihr Computer keine IPv6-Adresse hat, die von diesen aus erreichbar / routbar ist.

Also, was IPv6 - Verkehr ist zu sehen , die auf dem Interface? Wahrscheinlich Dinge wie mDNS ( Multicast-DNS ) und andere Protokolle, die automatisch eine Verbindung über die lokale Verbindung herstellen können. Zum Beispiel Apple Airplay und Windows Home Group .

Ihren Firewall-Regeln fehlt eine sehr wichtige Sache : ICMPv6. IPv6 verwendet ICMP viel häufiger als IPv4. Wenn Sie keine ICMP-Pakete zulassen, kann dies Ihren Datenverkehr erheblich beeinträchtigen, da Sie keine Fehlermeldungen zu diesem Datenverkehr erhalten. Dies kann zu langen Verzögerungen / Zeitüberschreitungen führen. Das Zulassen von ICMPv6-Datenverkehr schadet normalerweise nicht. Sie können dies also zu Ihren Firewall-Regeln hinzufügen:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Wenn Sie ping6Pakete blockieren möchten (obwohl ich nicht wirklich verstehe, warum die Leute das heutzutage immer noch tun, erschwert dies das Debuggen der Konnektivität erheblich), können Sie dies wie vor der vorherigen ACCEPTZeile hinzufügen :

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

Dies ist vor allem dann wichtig, wenn Sie eine echte globale IPv6-Konnektivität zu Ihrem Computer erhalten, aber es schadet nicht, wenn Sie sich bereits darauf vorbereiten :-)

Sander Steffann
quelle
1
Ich verstehe es jetzt. Ich habe die icmpv6Regel hinzugefügt, aber auf 20 / min begrenzt, und ich kann sehen, dass Pakete dorthin gehen. ping6 -I eth0 fe80::2e0:4cff:fe75:309funktioniert auch.
Mikhail Morfikov
2

Ich gehe bei der Verwaltung von Systemen immer davon aus, dass alles, was ich nicht explizit benötige, um die Dienste auf diesem System bereitzustellen, deaktiviert werden sollte. Diese Philosophie gilt für alles, ob es sich um Folgendes handelt:

  • unnötige Software deinstallieren
  • Deaktivieren eines GUI-Desktops auf einem Server
  • Deaktivieren und / oder Ausschließen nicht benötigter Hardware
  • IPv6 deaktivieren
  • Deaktivieren nicht benötigter Dienste
  • etc.
slm
quelle
Ich habe die gleiche Philosophie, aber in diesem Fall weiß ich wirklich nicht, was ich tun soll. Einige Leute sagen, dass ich ipv6 deaktivieren sollte, andere sagen etwas anderes. Ich habe Probleme, auch wenn IPv6 deaktiviert ist.
Mikhail Morfikov
@MikhailMorfikov - führt Ihr ISP einen Proxy / NAT durch, bei dem seine Kunden IPv6 nur für den Zugriff auf den ISP verwenden. Ich denke nicht, dass dies ein Problem für Sie ist, sonst hätten Sie eine IPv6-Adresse, aber Sie haben nur daran gedacht.
slm
Ich habe keine Ahnung, vielleicht sollte ich sie fragen, und vielleicht werden sie etwas tun und das Problem beheben.
Mikhail Morfikov
2

Sie sagen auch, wenn mein ISP kein IPv6 hat (im Mietvertrag gibt es keinen IPv6-Eintrag), sollte ich IPv6 deaktivieren und hatte dies zuvor mit ipv6.disable = 1 getan. Ich habe auf meta.stackoverflow.com eine ähnliche Frage gestellt und eine Antwort erhalten, dass ich ipv6 nicht deaktivieren sollte.

Natürlich würden Sie keine IPv6-Adress-Lease mit DHCP sehen - dafür ist DHCPv6 gedacht: DHCP und DHCPv6 sind nicht kompatibel.

Abstellen von IPv6 oder nicht: Wenn Sie es nicht benötigen und Ihr ISP es noch nicht bereitstellt, schalten Sie es aus, aber bereiten Sie sich auf seine Einführung vor . Dies umfasst das Entfernen / Neugestalten aller Elemente, die explizit von älteren IP-Adressen abhängen, z. B. fest codierte IP-Adressen oder die Verwendung von Broadcast.

Apropos Deaktivieren von IPv6: Beachten Sie, dass Microsoft beispielsweise IPv6 als integralen Bestandteil des Betriebssystems betrachtet. Wenn Sie IPv6 dort deaktivieren, kann dies die Unterstützung beeinträchtigen, die Sie von IPv6 erhalten.

Gegenmodus
quelle