Rutas y firewall en KVM

Imagen de vfmBOFH

Entrada a modo de recordatorio/refresco/yasabíayoquemehabíapasaoantes:

Si confguramos KVM bajo Debian (hasta Jessie mínimo) y montamos una máquina virtual pinchada a una red en modo NAT, los parámetros de forwarding que monta KVM por defecto no permiten tráfico entrante a dicha máquina por mucho que retoquemos las rutas en el resto de máquinas de la red.

Poqué? Por ésto:

root@bestiaparda:~# iptables -nL FORWARD -v
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
19232   78M ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     cstate RELATED,ESTABLISHED
65638 3552K ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    6  1968 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    5   420 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Atentos a la primera línea de la chain FORWARD: Se permite el forward de tráfico hacia cualquier host de la red virtual desde cualquier interfaz, saliendo por el bridge virtual siempre y cuando se traten de conexiones previamente establecidas (se entiende que desde la vm) o relacionadas con una preexistente.

Con lo que un triste ping cascará miserablemente.

Así que la cosa sería tirar una regla iptables del tipo:

iptables -I FORWARD -o virbr0 -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT

Y crujir sin piedad la regla original:

root@bestiaparda:~# iptables -nL FORWARD -v --line-numbers
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0   0   ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     state NEW,RELATED,ESTABLISHED
2    19232   78M ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     cstate RELATED,ESTABLISHED
3    65638 3552K ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
4        6  1968 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
5        5   420 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
6        0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
 
root@bestiaparda:~· iptables -D FORWARD 2
 
root@bestiaparda:~# iptables -nL FORWARD -v
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0   0   ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     state NEW,RELATED,ESTABLISHED
65638 3552K ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    6  1968 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    5   420 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

(Atentos a la inteligente forma de encontrar qué regla crujir de forma pofesioná).

A partir de éste momento, las máquinas de la red podrán acceder a las máquinas virtuales sólo con añadirles la ruta apropiada. Evidentemente, esta regla abre el culo en modo goatse a todas las máquinas de la red virtual, así que lo suyo sería hacer reglas para los puertos apropiados, porsiaca y que las reglas REJECT de más abajo hagan lo suyo, pero el conceto es el conceto.

:wq

2 comments

17
Abr

Digo como recomendación usar macvtap y así puentearlas directamente y que sean un equipo 'mas' en la red total y no tener que tocar el firewall mas que como si fuera otra maquina(que al final es la idea y sigue estando 'aislada')

by miniminiyo

18
Abr

Imagen de vfmBOFH

Ya lo sé. Pero el asunto era que la red está montada como está. Así que hay que trabajar con lo que hay.

Cambiar toda la infraestructura de red porque los de livirt no hacen bien una estúpida regla de iptables sí que es una matada de cojones.

Atentamente, La voz ésa del interior de tu cabeza que oyes cuando lees algo.