Encaminhamento de porta local dependente de IP no Linux

2

Eu configurei o sshd do meu servidor para escutar em uma porta não-padrão 42.

No entanto, no trabalho, estou atrás de um firewall / proxy, que apenas permite conexões de saída para as portas 21, 22, 80 e 443. Consequentemente, não consigo fazer ssh em meu servidor do trabalho, o que é ruim. Eu não quero retornar o sshd para a porta 22.

A ideia é a seguinte: no meu servidor, a porta de encaminhamento local 22 para a porta 42 se o IP de origem estiver correspondendo ao IP externo da rede do meu trabalho. Para maior clareza, vamos supor que o IP do meu servidor é 169.1.1.1 (na eth1), e o meu IP externo do trabalho é 169.250.250.250. Para todos os IPs diferentes de 169.250.250.250, meu servidor deve responder com uma 'conexão recusada' esperada, como acontece para uma porta que não escuta.

Sou muito novo no iptables. Eu examinei brevemente o longo manual do iptables e essas questões relevantes / relacionadas:

No entanto, essas questões lidam com cenários de vários hosts mais complicados, e não está claro para mim quais tabelas e cadeias devo usar para o encaminhamento de porta local, e se eu deveria ter duas regras (para "pergunta" e " responder "pacotes", ou apenas 1 regra para pacotes "pergunta".

Até agora, só habilitei o encaminhamento via sysctl. Eu começarei a testar soluções amanhã e apreciarei ponteiros ou talvez exemplos específicos de caso para implementar meu cenário simples.

O rascunho da solução abaixo está correto?

iptables -A INPUT [-m state] [-i eth1] --source 169.250.250.250 -p tcp
    --destination 169.1.1.1:42 --dport 22 --state NEW,ESTABLISHED,RELATED
    -j ACCEPT

Devo usar a tabela mangle em vez de filter ? E / ou FORWARD chain em vez de INPUT ?

    
por chronos 03.06.2010 / 00:00

2 respostas

2

Para encaminhar / redirecionar as coisas, você deve editar a tabela NAT.

Uma regra como essa provavelmente está mais próxima do que você precisa.

/sbin/iptables --table nat --append PREROUTING --protocol tcp \
               --source 169.250.250.250 --dport 22 \
               --jump REDIRECT --to-ports 42

Seria muito mais fácil e provavelmente melhor deixar o SSH na porta padrão e protegê-lo corretamente. Usar uma porta alternativa só retardaria um invasor motivado por alguns segundos. Configure um sistema de prevenção de intrusões como denyhosts / fail2ban e desative a autenticação baseada em senha. Ou considere as conexões ssh de entrada com limite de taxa.

Veja:

por 03.06.2010 / 00:17
1

Eu usaria o Shorewall para gerenciar tabelas ip. Ele configura um firewall base decente e fazer coisas como você quer é simples. Adicione uma regra ao / etc / shorewall / rules como:

Rede DNAT: 169.250.250.250 loc: 169.250.250.250 tcp 42 22

Como os outros, não sei por que você roda o sshd em outra porta. Se esta for uma porta da Internet, talvez você queira ver a porta batendo para manter a porta fechada, a menos que você acesse outra porta primeiro. Shorewall lida com isso de maneira simples.

    
por 03.06.2010 / 01:39