Iptables / KVM: autoriser uniquement le traffic de KVM, bloquer tout le reste

Tags: #<Tag:0x00007fc9e2afa628>

Je souhaite faire tourner des services exposés au net sur une VM debian 9 avec KVM. Pour des raisons de sécurité, je souhaiterais interdire tout le traffic sur l’hôte, sauf le traffic entrant et sortant des machines invitées sur KVM.

J’ai cherché un moment sur le net et n’ai rien trouvé sur la question! J’en viens à me demander si c’est possible?

L’interface réseau de KVM par défaut est virbr0 (192.168.122.0/24),.

Par défaut, KVM génère les règles iptables suivantes sur l’hôte:

# Generated by iptables-save v1.6.0 on Mon Jan  8 01:13:59 2018
*mangle
:PREROUTING ACCEPT [120:23571]
:INPUT ACCEPT [119:23264]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [138:12779]
:POSTROUTING ACCEPT [166:15285]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Mon Jan  8 01:13:59 2018
# Generated by iptables-save v1.6.0 on Mon Jan  8 01:13:59 2018
*nat
:PREROUTING ACCEPT [2:343]
:INPUT ACCEPT [1:36]
:OUTPUT ACCEPT [40:2486]
:POSTROUTING ACCEPT [40:2486]
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT
# Completed on Mon Jan  8 01:13:59 2018
# Generated by iptables-save v1.6.0 on Mon Jan  8 01:13:59 2018
*filter
:INPUT ACCEPT [21:8633]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [22:1832]
:f2b-sshd - [0:0]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A f2b-sshd -j RETURN
COMMIT
# Completed on Mon Jan  8 01:13:59 2018

J’ai essayé naïvement de rajouter

-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP

à la fin de ces règles pour tout interdire sauf ce qui précède, mais du coup je ne peux même plus me connecter aux VM.

J’imagine qu’il faut tout de même permettre le traffic sur l’interface wifi de l’hôte wlp5s0 sinon il n’y même pas de connexion internet. Puis le router sur virbr0?

Je sèche complètement, ma connaissance d’iptables est encore très rudimentaire pour m’aventurer plus loin.

Une idée quelqu’un?

EDIT: j’ai supprimé l’interface virbr1 pour simplifier les choses

Bonjour,

Tu utilise quel programme pour généré ton script ? Tu devrais commencer par tout bloquer et ensuite autorise ce que tu souhaite.