Perché le mie voci iptables non bloccano il ping di una macchina virtuale Xen? [chiuso]

StackOverflow https://stackoverflow.com/questions/653812

  •  19-08-2019
  •  | 
  •  

Domanda

Sto scrivendo uno script bash per aggiungere un semplice firewall per Xen.

Ecco la configurazione effettiva del firewall:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:ha-cluster
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Vorrei aggiungere una nuova catena per ciascuna delle mie macchine virtuali (ognuna di esse ha un'interfaccia virtuale chiamata vif1.0, vif2.0, ecc.). L'interfaccia di output (bridge) è xenbr0.

Ecco cosa faccio (ad esempio per bloccare il ping 'in' a domU1, vif1.0):

iptables -N domUFirewall
iptables -I FORWARD -j domUFirewall
iptables -I INPUT -j domUFirewall
iptables -A domUFirewall -i vif1.0 -p icmp -j DROP

Ma .. non funziona, sono ancora in grado di eseguire il ping in / out di domU.

Deve essere qualcosa di veramente 'stupido' ma non riesco a scoprire cosa c'è che non va.

Qualche indizio?

Thx

È stato utile?

Soluzione

Dato che stai usando XEN con una rete a ponte, i pacchetti vengono intercettati a un livello prima che i normali comandi iptables possano influenzarli. Pertanto, sarà probabilmente necessario utilizzare il comando ebtables per influenzare il routing dei pacchetti nel modo desiderato.

Risposta originale lasciata in basso che funzionerà per altre configurazioni, ma non per XEN con reti collegate.

Farò finta, per esempio, che l'indirizzo IP di vif1.0 sia 192.168.1.100.

Vorrei ripetere la logica per non controllare il dispositivo di input, ma per controllare invece tramite l'indirizzo IP. Nella catena di input, il pacchetto proviene dal (diciamo) dispositivo eth0 , non da vif1.0 . Pertanto, questa regola:

iptables -I INPUT -i vif1.0 -j domUFirewall

che ho precedentemente proposto non corrisponderà mai a nessun pacchetto. Tuttavia, se fai quanto segue, dovrebbe fare quello che vuoi:

iptables -I INPUT -d 192.168.1.100 -j domUFirewall

dove in questo caso la catena domUFirewall è impostata da:

iptables -N domUFirewall
iptables -F domUFirewall
iptables -A domUFirewall -p icmp -j DROP

Se una determinata catena è per un singolo dispositivo, allora vuoi fare questo segno prima di saltare nella catena, su una regola con " -j chainName " azione. Quindi, nella catena stessa, non devi mai controllare il dispositivo o l'indirizzo IP.

In secondo luogo, svuotare sempre (svuotare) la catena nel tuo script, nel caso in cui lo stia eseguendo nuovamente. Si noti che quando si esegue nuovamente lo script, è possibile che vengano visualizzati reclami sulla riga -N . Va bene.

Ci sono altri modi in cui potresti farlo, ma per fare un esempio diverso, dovrei sapere in modo specifico come è impostata la tua macchina virtuale: rete con bridge? NAT? Ecc. Ma l'esempio che ho dato qui dovrebbe funzionare in una di queste modalità.

Ecco alcuni link utili per il futuro:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top