Perché le mie voci iptables non bloccano il ping di una macchina virtuale Xen? [chiuso]
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
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.
- interazione ebtables / iptables su un bridge basato su Linux
- ebtables (8) - Pagina man di Linux
- Xen Wiki * XenNetworking
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: