Como posso encaminhar a porta http e ssh para o meu servidor interno usando o iptables?

4

Eu não tenho o roteador, então eu faço o sistema Linux no roteador tendo centos 6.4 para encaminhar o tráfego da rede pública para a minha LAN local.Tem as duas placas NIC. um para ip público (eth1) e outro para ip privado (eth2).

Eu tenho um servidor que está conectado à minha LAN local, suponha 192.168.1.2.

x.x.x.x é para ip público (este ip está em eth1).

Linux system router ip, suponha 192.168.1.1 (este ip está em eth2)

Eu quero isso quando alguém de qualquer rede de qualquer lugar usar isso, por exemplo

ssh x.x..x.x (ip público) ou usando putty

irá para o servidor.

Eu desabilite o firewall do Selinux e do iptables no servidor

Eu fiz algumas modificações do Iptables no roteador do sistema Linux, mas ele vai para si mesmo, que funciona como um roteador, não para o servidor principal de outra rede e da mesma rede também.

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

mas não funciona.

e novamente eu quero encaminhar todo o tráfego http (80) para o meu servidor interno usando iptables do mesmo roteador do sistema Linux.

Eu preciso disso gentilmente me dê solução sobre isso.

    
por Rahul 01.01.2014 / 13:46

4 respostas

6

Antes de tudo, certifique-se de que o encaminhamento de pacotes esteja ativado no kernel

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

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

net.ipv4.ip_forward = 1

Você precisa fazer isso no Linux Machine agindo como um roteador. Você pode tentar a seguinte regra na máquina do roteador.

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 sobre a saída das regras NAT na caixa do roteador.

iptables -t nat -L -n -v
    
por 01.01.2014 / 14:17
1

Baseado neste incrível DigitalOcean sobre como encaminhar portas, decidi reescrevê-lo aqui.

Eu passei muitas horas de pesquisa sobre como isso funciona. Eu sou novo no Linux e os princípios nem sempre são fáceis. Aqui está um exemplo de 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: yy.yy.yy.yy
  • Interface pública: eth0
  • Interface privada: eth1
Servidor

Interno (por exemplo, ssh, web) (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

Definir 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 somente o ADMIN IP pode acessar o SSH (se não for necessário, você pode excluí-lo)
  • -m conntrack é o mesmo que -m estado
  • Eu recomendo mudar a porta padrão do SSH para outra porta, como 1xxxx (em / etc / ssh / sshd_config)
  • verifique Lista de números de porta TCP e UDP
  • eu uso a porta 15xx1 para acessar o SSH no servidor de 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 regras usadas são descritos perfeitamente no tutorial mencionado.

Isso é tudo de mim, espero que isso ajude você.

    
por 09.04.2017 / 01:55
1

Embora esta questão seja sobre o iptables, caso você também tenha o FirewallD rodando, 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.

    
por 24.12.2017 / 13:11
0

Primeiro, habilite o roteamento no gateway Linux:

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

Em seguida, adicione as seguintes regras à sua interface de rede (por exemplo, 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 pkts e bytes mostrarão quais regras estão sendo correspondidas.

    
por 01.01.2014 / 14:25