Tengo un host con 2 interfaces de red: wifi y vpn sitio-sitio (nivel cero).
root@host:~# ifconfig wlp0s20f3
wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.38 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a098:2166:78af:d78d prefixlen 64 scopeid 0x20<link>
ether ac:12:03:ab:6e:31 txqueuelen 1000 (Ethernet)
RX packets 1071869 bytes 1035656551 (1.0 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 911450 bytes 134092251 (134.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@host:~# ifconfig ztklh3tu4b
ztklh3tu4b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2800
inet 10.147.18.192 netmask 255.255.255.0 broadcast 10.147.18.255
inet6 fe80::f8f6:d1ff:fe3d:4f09 prefixlen 64 scopeid 0x20<link>
ether fa:f6:d1:3d:4f:09 txqueuelen 1000 (Ethernet)
RX packets 8836 bytes 1146994 (1.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 667 bytes 281732 (281.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Quiero bloquear todo el tráfico (tanto entrante como saliente) a este host, excepto una IP detrás de la VPN. Entonces agregué las siguientes reglas de iptable:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -s 10.147.18.80 -j ACCEPT
iptables -A OUTPUT -d 10.147.18.80 -j ACCEPT
Cuando hago ping a este 10.147.18.80, no puedo hacerlo. Aquí están los resultados del ping:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3067ms
root@host:~# ping 10.147.18.80
PING 10.147.18.80 (10.147.18.80) 56(84) bytes of data.
^C
--- 10.147.18.80 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5097ms
Cuando cambio la IP en la regla iptables para que sea algo así como 8.8.8.8, todo funciona como se esperaba, es decir, no puedo comunicarme con nada excepto 8.8.8.8.
Editar El siguiente resultado de iptables -nvL muestra las cadenas:
root@host:~# iptables -nvL
Chain INPUT (policy DROP 23 packets, 4560 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 10.147.18.80 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 330 packets, 25776 bytes)
pkts bytes target prot opt in out source destination
8 672 ACCEPT all -- * * 0.0.0.0/0 10.147.18.80
El resultado anterior de iptables muestra que los paquetes se envían a la IP pero no se recibe respuesta cuando las reglas están vigentes.
Tcpdump en mi host muestra el mismo comportamiento:
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
13:28:32.323064 ztklh3tu4b Out IP (tos 0x0, ttl 64, id 17342, offset 0, flags [DF], proto ICMP (1), length 84)
10.147.18.192 > 10.147.18.80: ICMP echo request, id 61, seq 1, length 64
13:28:33.330145 ztklh3tu4b Out IP (tos 0x0, ttl 64, id 17567, offset 0, flags [DF], proto ICMP (1), length 84)
10.147.18.192 > 10.147.18.80: ICMP echo request, id 61, seq 2, length 64
13:28:34.354178 ztklh3tu4b Out IP (tos 0x0, ttl 64, id 17694, offset 0, flags [DF], proto ICMP (1), length 84)
10.147.18.192 > 10.147.18.80: ICMP echo request, id 61, seq 3, length 64
13:28:35.378135 ztklh3tu4b Out IP (tos 0x0, ttl 64, id 17714, offset 0, flags [DF], proto ICMP (1), length 84)
10.147.18.192 > 10.147.18.80: ICMP echo request, id 61, seq 4, length 64
Tcpdump en 10.147.18.80 no muestra ninguna solicitud de eco ICMP entrante desde 10.147.18.192. ¿Qué pudo haber salido mal?
Respuesta1
Si está utilizando un cliente VPN en este host para crear la segunda interfaz, no olvide tambiénpermitir conexiones al servidor VPN10.147.18.192
; de lo contrario, ya no será posible acceder a su IP local .
Deberá permitir al menos el tráfico entrante y saliente hacia/desde el servidor VPN en la interfaz wlp0s20f3
:
iptables -I OUTPUT -d $vpn_server_ip -p $proto --dport $vpn_port -j ACCEPT
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$proto
será udp
o tcp
, y $vpn_server_ip
: $vpn_port
la dirección IP o rango y puerto de los servidores VPN
No puedo ayudar mucho a adivinar estos valores, pero su documentación de VPN o tcpdump/wireguard con una conexión establecida y funcional al túnel VPN deberían brindarle esta información.
Respuesta2
Estos dos comandos que mencionas en tu pregunta:
iptables -A INPUT -s 10.147.18.80 -j ACCEPT
iptables -A OUTPUT -d 10.147.18.80 -j ACCEPT
Añaden esas reglas al final de las cadenas.
-A
La opción agrega la regla al final. Si usa -I
la opción, pondrá la regla en la parte superior de la cadena.
El problema aquí es que probablemente ya tenga una regla DROP
o REJECT
, antes de la ACCEPT
regla en una de las cadenas, que elimina el tráfico antes de que llegue al final de la cadena. Como, por ejemplo, una regla que reduce el tráfico hacia o desde una subred completa que contiene la IP 10.147.18.80.
Si tiene una regla en una cadena que descarta/rechaza el tráfico a esa IP, o desde esa IP, dependiendo de si es una cadena de ENTRADA o SALIDA, antes de la regla ACEPTAR, entonces, si la regla especifica solo esa IP o toda la subred, el tráfico se elimina y todas las demás reglas de la cadena ya no se procesan.
DROP
, REJECT
, ACCEPT
son objetivos finales, una vez que iptables coincide con esa regla, deja de procesar otras reglas en la cadena y no pasa a la siguiente regla.
Intentar
iptables -I INPUT -s 10.147.18.80 -j ACCEPT
iptables -I OUTPUT -d 10.147.18.80 -j ACCEPT
Esto colocará esas reglas en la parte superior de las cadenas, de modo que sean las primeras reglas en ser alcanzadas, y luego no se procesarán otras reglas para ese tráfico en esas cadenas.
Puedes enumerar todas las reglas en una cadena con algo como
iptables -nvL
o si quieres ver solo cadenas específicas
iptables -nvL INPUT
iptables -nvL OUTPUT
EDITAR
Dado el resultado que pegó y el hecho de que puede hacer ping si cambia las acciones predeterminadas a ACCEPT
esto, no parece ser el problema.
Puede usar algo como tcpdump para ver si el tráfico va y se devuelve.
Un comando como este le proporcionará todos los paquetes icmp que envía o recibe la máquina
tcpdump -nnvvi any icmp
Si obtienes algo como esto en la salida
10:13:48.866598 IP (tos 0x0, ttl 255, id 30625, offset 0, flags [DF], proto ICMP (1), length 84)
10.147.18.192 > 10.147.18.80: ICMP echo request, id 26621, seq 4, length 64
10:13:48.867771 IP (tos 0x0, ttl 53, id 0, offset 0, flags [none], proto ICMP (1), length 84)
10.147.18.80 > 10.147.18.192: ICMP echo reply, id 26621, seq 4, length 64
Luego, sus paquetes de ping se envían y devuelven, pero alguna otra regla los rechaza.
Puede verificar si tal vez tenga otras reglas en otras tablas como nat o mingle table, si tal vez algunas de las reglas allí estén en conflicto con el tráfico.
iptables -t nat -nvL
iptables -t mingle -nvL
También puede ver si los paquetes pasan por la regla ACEPTAR en la cadena de SALIDA mediante el número que aparece a continuación pkts
en el listado. Si ese número aumenta después de intentar hacer ping, pero el número en la cadena INPUT permanece en 0, entonces el problema está en las reglas de tráfico entrante.
También verifique sus rutas, con ip r
un comando o algo similar, si tal vez el tráfico no sale a través de la interfaz en la misma subred, por lo que la IP de origen de los paquetes que devuelven puede cambiar debido a algunas reglas NAT en el camino.