Por que meus iptables entradas bloco não ping uma máquina virtual Xen? [fechadas]
Pergunta
Eu estou escrevendo um script bash para adicionar firewall simples para Xen.
Aqui está a configuração de firewall real:
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
Eu gostaria de adicionar uma nova cadeia para cada uma das minhas máquinas virtuais (cada um deles tem uma interface virtual chamado vif1.0, vif2.0, etc). interface de saída (ponte) é xenbr0.
Aqui está o que eu faço (por exemplo, para pingue bloco 'in'to 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
Mas .. não trabalho, eu ainda sou capaz de ping-in / out a domU.
Deve ser algo realmente 'burro', mas eu não consigo descobrir o que está errado.
Qualquer pistas?
Thx
Solução
Uma vez que você estiver usando XEN com a rede em ponte, os pacotes estão sendo interceptado em um nível antes dos comandos do iptables comuns podem influenciá-los. Assim, você provavelmente precisará usar o comando ebtables
para pacote influência encaminhamento da maneira que você quiser.
- ebtables / iptables interação em uma ponte baseado em Linux
- ebtables (8) - página man Linux
- Xen Wiki * XenNetworking
resposta Original esquerda abaixo que irá trabalhar para outras configurações, mas não para XEN com a rede em ponte.
Vou fingir por causa do exemplo que o endereço IP de vif1.0
é 192.168.1.100.
Eu refazer a lógica para não verificar o dispositivo de entrada, mas em vez disso, verifique por endereço IP. Na cadeia de entrada, o pacote é proveniente de (digamos) eth0
dispositivo, não a partir de vif1.0
. Assim, esta regra:
iptables -I INPUT -i vif1.0 -j domUFirewall
que eu propus anteriormente nunca encontrou nenhum pacotes. No entanto, se você fazer o seguinte, ele deve fazer o que você quer:
iptables -I INPUT -d 192.168.1.100 -j domUFirewall
, onde neste caso o domUFirewall
cadeia está configurado por:
iptables -N domUFirewall
iptables -F domUFirewall
iptables -A domUFirewall -p icmp -j DROP
Se uma determinada cadeia é para um único dispositivo, então você quer fazer esta verificação antes salto na cadeia, em uma regra com a ação "-j chainName
". Em seguida, na própria cadeia, você nunca tem que verificar para o dispositivo ou Endereço IP.
Em segundo lugar, eu sempre flush (esvaziar) a cadeia em seu script, apenas no caso de você estiver re-executar o script. Note que quando voltar a executar o script, você pode obter queixas sobre a linha -N
. Isso é OK.
Existem outras maneiras que você poderia fazer isso, mas para dar um exemplo diferente, eu preciso saber especificamente como sua VM está configurada - ponte de rede? NAT? Etc. Mas o exemplo que dei aqui deve funcionar em qualquer um desses modos.
Aqui estão alguns links úteis para o futuro: