¿Es mejor establecer reglas en ip6tables o deshabilitar ipv6?

11

Tengo la siguiente configuración de red:

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

Tengo un servidor DHCP en mi red y puedo obtener el siguiente contrato de arrendamiento:

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

Puedo hacer 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

No puedo hacer ping a la dirección ipv6 fe80::2e0:4cff:fe75:309:

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

He establecido algunas reglas de 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

Y funciona como se esperaba para ipv4. Pero cuando reviso ip6tables, puedo ver que algunos paquetes van allí:

# 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

Seguí esta guía y dicen que debería copiar la configuración de iptables (ipv4) y pegarla en ip6tables (ipv6). Pero cuando hago esto, ningún paquete puede pasar por la regla RELATED,ESTABLISHEDen la tabla ipv6. Todos ellos se descartaron debido a la política de la cadena 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

Como puede ver, no hay paquetes de salida, entonces, ¿por qué Google y el intercambio de pila intentan conectarse a mi máquina? ¿Y cómo lo hacen porque ni siquiera yo puedo hacer ping a mi dirección ipv6?

También dicen que si mi ISP no tiene ipv6 (en el contrato de arrendamiento, no hay entrada de ipv6), debería desactivar ipv6 y lo había hecho antes usando ipv6.disable=1. Hice una pregunta similar en meta.stackoverflow.com, y obtuve una respuesta que no debería deshabilitar ipv6.

No tengo ni idea de qué hacer. Tengo algunos problemas de conexión, quiero decir que a veces no puedo acceder a las páginas en stack exchange, o google, también tengo problemas con pastebin.com. En cada caso, hay los mismos síntomas: después de escribir una dirección en mi navegador, tengo que esperar a veces varios minutos para acceder al sitio y después de volver a cargarlo 2-3 veces, puedo navegarlo libremente, al menos por un cierto periodo de tiempo.

Mikhail Morfikov
fuente

Respuestas:

13

Su dirección IPv6 comienza con fe80:y, por lo tanto, es una dirección local de enlace. Dichas direcciones solo se pueden usar en el mismo enlace que la interfaz de red. Debido a que existe la misma subred de enlace local en cada interfaz de red, tendrá que especificar qué interfaz desea usar. Por ejemplo, cuando desea hacer ping a una dirección local de enlace.

Pruebe uno de los siguientes ping6ejemplos. Ambos hacen lo mismo:

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

Esto también significa que solo los sistemas en su enlace local (su LAN) pueden usar esta dirección de enlace local para conectarse a su sistema. Los enrutadores no enrutarán esas direcciones. No hay forma de que Google o Stack Exchange envíen tráfico IPv6 a su máquina, porque su máquina no tiene una dirección IPv6 a la que se pueda acceder / enrutar.

Entonces, ¿qué tráfico IPv6 está viendo en su interfaz? Probablemente cosas como mDNS ( DNS de multidifusión ) y otros protocolos que pueden conectarse automáticamente en el enlace local. Por ejemplo Apple Airplay y Windows Home Group .

Las reglas del cortafuegos están perdiendo una cosa muy importante: ICMPv6. IPv6 usa ICMP mucho más que IPv4, y no permitir que los paquetes ICMP entren puede dañar gravemente su tráfico porque no recibirá mensajes de error relacionados con ese tráfico. Esto puede causar largas demoras / tiempos de espera. Permitir el tráfico ICMPv6 generalmente no hace daño, por lo que puede agregar esto a las reglas de su firewall:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Si desea bloquear ping6paquetes (aunque realmente no entiendo por qué la gente todavía lo hace en estos días, hace que la conectividad de depuración sea mucho más difícil) puede agregar esto como antes de la ACCEPTlínea anterior :

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

Esto es muy importante cuando obtienes conectividad IPv6 global real a tu máquina, pero no te hará daño si ya te preparas para eso :-)

Sander Steffann
fuente
1
Ahora lo entiendo. Agregué la icmpv6regla pero la limité a 20 / min, y puedo ver que los paquetes van allí. ping6 -I eth0 fe80::2e0:4cff:fe75:309También funciona.
Mikhail Morfikov
2

Cuando manejo sistemas, siempre tomo la posición de que todo lo que no necesito explícitamente para proporcionar los servicios en dicho sistema, que debería estar apagado. Esta filosofía se aplica a todo, ya sea:

  • desinstalar software innecesario
  • deshabilitar un escritorio GUI en un servidor
  • deshabilitar y / o excluir hardware innecesario
  • deshabilitar IPv6
  • deshabilitar servicios innecesarios
  • etc.
slm
fuente
Tengo la misma filosofía, pero en este caso realmente no sé qué hacer. Algunas personas dicen que debería deshabilitar ipv6, otras dicen algo diferente. Tengo problemas incluso cuando ipv6 está desactivado.
Mikhail Morfikov
@MikhailMorfikov: ¿su ISP realiza algún proxy / NAT en el que están haciendo que sus clientes usen IPv6 solo para acceder al ISP? No creo que esto sea un problema para usted, de lo contrario tendría una dirección IPv6, pero solo pensé en ello.
slm
No tengo idea, tal vez debería preguntarles, y tal vez hagan algo y solucionen el problema.
Mikhail Morfikov
2

También dicen que si mi ISP no tiene ipv6 (en el contrato de arrendamiento, no hay entrada de ipv6), debería deshabilitar ipv6 y lo había hecho antes usando ipv6.disable = 1. Hice una pregunta similar en meta.stackoverflow.com, y obtuve una respuesta que no debería desactivar ipv6.

por supuesto, no vería un contrato de arrendamiento de direcciones IPv6 con DHCP; para eso está DHCPv6: DHCP y DHCPv6 no son compatibles.

A partir de desactivar IPv6 o no: si no lo necesita y su ISP aún no lo proporciona, apáguelo pero prepárese para su introducción . Esto incluye eliminar / rediseñar todo lo que se basa explícitamente en IP heredada, como las direcciones IP codificadas o el uso de broadcast.

A propósito de desactivar IPv6: tenga en cuenta que, por ejemplo, Microsoft considera que IPv6 es una parte integral del sistema operativo, por lo que desactivar IPv6 allí podría afectar el soporte que obtiene de ellos.

contramodo
fuente