Suas regras FORWARD
permitem tráfego iniciado pela VM, saída e resposta, com estas regras:
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #reply traffic to the VM
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT #VM initiated
O que eles não permitem é o tráfego de entrada, pois as dicas de alto valor do contador estão na próxima regra FORWARD
:
[29309:1533140] -A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
Isso é bom para a segurança, mas você terá que adicionar exceções.
UPDATE : redireciona todo o tráfego, não apenas algumas portas.
O redirecionamento em si:
iptables -t nat -I PREROUTING -d 85.214.XXX.XXX -j DNAT --to-destination 192.168.122.58
Isto irá redirecionar todos os protocolos (icmp, tcp, udp (possivelmente outros)), você pode adicionar como você escreveu inicialmente -p tcp
para limitá-lo a tcp.
Você precisa ativar o tráfego redirecionado na cadeia FORWARD
, pois quando o tráfego for DNAT
ed, ele será encaminhado, portanto, estará sujeito à corrente FORWARD
(e não mais à INPUT
chain ). Ao mesmo tempo, para proteger contra qualquer uso incorreto de roteamento local (pelo gateway padrão, por exemplo), você pode limitar isso somente ao tráfego DNAT
ed, consultando conntrack (marcar pacotes na tabela mangle e verificá-los aqui teria funcionado também):
iptables -I FORWARD -d 192.168.122.58 -m conntrack --ctstate DNAT -j ACCEPT
Observe o -I
. Como você está competindo com as regras do provedor da VM (provavelmente o virt-manager), é necessário tomar cuidado para que suas regras de exceção sejam anteriores às regras DROP
/ REJECT
. O ideal seria vir depois da regra ... RELATED,ESTABLISHED ...
, mas você pode lidar com isso mais tarde.
Observe também que, pelo mesmo motivo (regra chegando tarde demais), o tráfego de saída da VM não está usando seu IP dedicado, mas o IP do host: a regra SNAT
chega tarde demais, depois da regra genérica MASQUERADE
. Você precisa inseri-lo com -I
e não -A
até descobrir como integrar isso com (provavelmente?) Virt-manager.
E, também, há um erro nesta regra, deve estar usando -s
não -d
como em:
iptables -t nat -I POSTROUTING -s 192.168.122.58/32 ! -d 192.168.122.0/24 -j SNAT --to-source 85.214.XXX.XXX
Sempre que (virtualmente?) o virt-manager reinsere sua regra (reiniciar etc.), você deve dar uma olhada novamente em suas regras para ver se tudo ainda está em uma ordem que permite o que você pretende.
Isso estaria fora do escopo deste Q / A para abordar a integração do virt-manager. Dê uma olhada lá por exemplo: