ssh port forwarding com firewall-cmd

2

Estou tentando fazer um túnel ssh em um servidor por trás do NAT:

ssh do laptop - > Host com encaminhamento de porta no firewall - > Entre diretamente no guest (172.16.0.2, atrás do host NAT).

Usando o iptables no host - ele funcionará:

# iptables -I OUTPUT  -d 0.0.0.0/0 -j ACCEPT
# iptables -I FORWARD  -d 0.0.0.0/0 -j ACCEPT
# iptables -I INPUT  -d 0.0.0.0/0 -j ACCEPT
# iptables -t nat -I PREROUTING -d 0.0.0.0/0 -p tcp --dport 222 -j DNAT --to-destination 172.16.0.2:22

No entanto , o iptables não é salvo na reinicialização do host, pois o serviço firewalld está em execução (o firewalld é o padrão no RHEL 7).

Por isso, estou tentando fazer o mesmo encaminhamento de porta com o firewall-cmd .

Usando o firewall-cmd no host - ele NÃO funcionará:

# firewall-cmd --permanent --zone=public --add-forward-port=port=222:proto=tcp:toport=22:toaddr=172.16.0.2'
# firewall-cmd --permanent --zone=public --add-masquerade
# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -d 0.0.0.0/0 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 0.0.0.0/0 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -d 0.0.0.0/0 -j ACCEPT

# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -d 0.0.0.0/0 -p tcp --dport 222 -j DNAT --to-destination 172.16.0.2:22

# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" forward-port port="222" protocol="tcp" to-port="22" to-addr='"172.16.0.2"

# firewall-cmd --reload

# firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp4s0f0
  sources: 
  services: ssh dhcpv6-client
  ports: 8139/tcp
  protocols: 
  masquerade: yes
  forward-ports: port=222:proto=tcp:toport=22:toaddr=172.16.0.2
  source-ports: 
  icmp-blocks: 
  rich rules: 
     rule family="ipv4" destination address="0.0.0.0/0" forward-port port="222" protocol="tcp" to-port="22" to-addr="172.16.0.2" 

# firewall-cmd --direct --get-all-rules

ipv4 filter INPUT 0 -d 0.0.0.0/0 -j ACCEPT
ipv4 filter OUTPUT 0 -d 0.0.0.0/0 -j ACCEPT
ipv4 filter FORWARD 0 -d 0.0.0.0/0 -j ACCEPT
ipv4 nat PREROUTING 0 -d 0.0.0.0/0 -p tcp --dport 222 -j DNAT --to-destination 172.16.0.2:22

Agora, ao tentar se conectar ao convidado - do meu laptop, via porta do host 222 - a conexão ssh é recusada:

ssh -l stack my-host -p 222
ssh: connect to host my-host port 222: Connection refused

Alguma ideia do que estou perdendo?

    
por Noam Manos 05.06.2018 / 12:33

2 respostas

2

Você pode tentar firewall-cmd --add-forward-port :

firewall-cmd --permanent --add-forward-port=port=222:proto=tcp:toaddr=172.x.x.x:toport=22
firewall-cmd --reload

Sintaxe geral ( link ):

firewall-cmd [--permanent] [--zone=zone] \
 --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]] \
 [--timeout=timeval]
    
por 07.09.2018 / 12:09
0

Já enfrentou um problema semelhante pessoalmente e essa solução veio em meu socorro. Por favor, experimente-me e deixe-me saber se isso ajudou.

Existem algumas maneiras de acessar um servidor por trás do NAT: Encaminhamento de porta, você pode configurar o roteador / firewall para encaminhar o tráfego de entrada para um servidor interno. Normalmente, você precisa especificar o protocolo (UDP / TCP), porta de serviço externo e porta de serviço interno.

Para o encaminhamento de porta ssh com firewall-cmd, por favor, tente este comando:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 222 -j DNAT \--to 172.x.x.x.:22 

Do código dado, eu meio que entendo que isso é o que você está tentando alcançar. Então, por favor, certifique-se de verificar a porta. No meu caso, tentei o mesmo com a porta 80.

Esta regra especifica a tabela NAT para usar a cadeia PREROUTING integrada para encaminhar solicitações HTTP de entrada exclusivamente para o endereço IP de destino listado

    
por 13.06.2018 / 18:18