Como posso encaminhar a porta HTTP e SSH para meu servidor interno usando iptables?

Como posso encaminhar a porta HTTP e SSH para meu servidor interno usando iptables?

Como não tenho o roteador, transformei meu sistema CentOS 6.4 Linux em um roteador, encaminhando o tráfego da rede pública para minha LAN local. Possui duas placas NIC, uma para o endereço IP público (eth1) e outra para o endereço IP privado (eth2).

Eu tenho um servidor conectado à minha LAN local, digamos em 192.168.1.2.

Roteador

  • eth1: x.x.x.x, o endereço IP público
  • eth2: 192.168.1.1, o endereço do roteador interno

Quando alguém de uma rede externa executa o ssh no IP público, ele deve ser redirecionado para o servidor:

ssh x.x.x.xou usandoMassa

Desativei o firewall SELinux e iptables no servidor. Tentei algumas modificações do iptables no roteador do sistema Linux, mas a solicitação SSH ainda não é redirecionada:

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.1 --dport 22 -j DNAT --to-destination 192.168.1.2:22

Também quero encaminhar todo o tráfego HTTP (80) para meu servidor interno usando iptables do mesmo roteador do sistema Linux.

Responder1

Primeiro de tudo, certifique-se de que o encaminhamento de pacotes esteja habilitado no kernel

# echo 1 > /proc/sys/net/ipv4/ip_forward

Você também pode torná-lo permanente adicionando a linha abaixo ao/etc/sysctl.conf

net.ipv4.ip_forward = 1

Você tem que fazer isso na máquina Linux atuando como roteador. Você pode tentar a seguinte regra na máquina roteadora.

iptables -t nat -A PREROUTING -i eth1 -d x.x.x.x -p tcp --dport 22 -j  DNAT --to-destination 192.168.1.2:22

Informe-nos também a saída de suas regras NAT da caixa do roteador.

iptables -t nat -L -n -v

Responder2

Baseado neste incrívelOceano Digitaldo tutorial sobre como encaminhar portas, decidi reescrevê-lo aqui.

Passei muitas horas pesquisando sobre como isso funciona. Sou novo no Linux e o começo nem sempre é fácil. Aqui está um exemplo dos meus servidores e seu encaminhamento de porta:

Servidor de firewall (2 placas NIC) - detalhes da rede:

  • Endereço IP público:xx.xx.xx.xx
  • Endereço IP privado:aa.aa.aa.aa
  • Interface pública:eth0
  • Interface privada:eth1

interno(por exemplo, ssh, web) servidor (1 placa NIC) - detalhes da rede:

  • Endereço IP privado:zz.zz.zz.zz
  • Interface privada:eth0

Solução:

Habilite o encaminhamento de pacotes no kernel:

echo 1 > /proc/sys/net/ipv4/ip_forward

Defina variáveis:

# Admin IP address (e.g. public home ip)
ADMIN="aa.aa.aa.aa"

# IP addresses of servers (e.g. in cloud):
FW_eth0_ip="xx.xx.xx.xx"
FW_eth1_ip="yy.yy.yy.yy"
WEB_eth0_ip="zz.zz.zz.zz"

# Services:
SSH="22"
HTTP="80"

Encaminhamento de porta Iptables (com -m conntrack):

iptables -t nat -A PREROUTING -i eth0 -s $ADMIN -d $FW_eth0_ip -p tcp --dport $SSH -j DNAT --to-destination $WEB_eth0_ip
iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport $SSH -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport $SSH -d $WEB_eth0_ip -j SNAT --to-source $FW_eth1_ip

Algumas notas:

  • "..-s $ADMIN -d $FW_eth0_ip.." (1ª linha) - adicionado apenas por motivos de segurança - significa que apenas o IP ADMIN pode acessar o SSH (se não for necessário, você pode excluí-lo)
  • -m conexãoé o mesmo que-m estado
  • Eu recomendo alterar a porta padrão do SSH para outra porta, como 1xxxx (em /etc/ssh/sshd_config)
  • verificarLista de números de porta TCP e UDP
  • Eu uso a porta 15xx1 para acessar SSH no servidor Firewall e 15xxx2 o interno

Terminal:

# access firewall server
$ ssh [email protected] -p 15xx1

# access internal server
$ ssh [email protected] -p 15xx2

Mais detalhes sobre as regras utilizadas estão perfeitamente descritos no tutorial mencionado.

Isso é tudo meu, espero que ajude você.

Responder3

Embora esta questão seja sobre iptables, caso você também tenha o FirewallD em execução, veja como acessar o HTTP da rede interna.

Primeiro permita o tráfego http no seu servidor interno FirewallD:

# firewall-cmd --permanent --add-service=http

Em seguida, encaminhe o tráfego http do ip externo para a porta 80 do ip interno:

# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=10.0.0.11

A mesma coisa pode ser feita para o serviço SSH.

Responder4

Primeiro de tudo, habilite o roteamento no gateway Linux:

echo 1 > /proc/sys/net/ipv4/ip_forward

Em seguida, adicione as seguintes regras à sua interface de rede (ou seja, eth1) e às portas desejadas:

iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.2
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.2
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Verifique suas regras com iptables -L -v, as colunas pacotes e bytes mostrarão quais regras estão sendo correspondidas.

informação relacionada