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ê.