IPTables: permite apenas o acesso SSH, nada mais entra ou sai

11

Como você configurar o iptables para que ele irá única permitir SSH, e permitir que nenhum outro tráfego em ou fora ?

Alguma precaução de segurança que alguém possa recomendar?

Eu tenho um servidor que acredito ter sido migrado do GoDaddy com êxito e acredito que não está mais em uso.

Mas quero ter certeza apenas porque ... você nunca sabe. :)

Observe que este é um servidor virtual dedicado da GoDaddy ... Isso significa que não há backup e praticamente nenhum suporte.

Disco
fonte

Respostas:

13

Você precisa apenas definir a política padrão como DROP nas cadeias INPUT e OUTPUT.

Para permitir a entrada SSH, você precisa dos seguintes comandos:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Os dois últimos comandos permitem o tráfego de loopback, pois alguns aplicativos precisam para funcionar corretamente. Você pode restringir o acesso SSH de um IP específico usando a -s source_ipopção

A execução dos comandos na ordem mostrada acima fará com que sua sessão SSH atual seja interrompida. Isso ocorre porque os comandos iptables entram em vigor imediatamente. Você precisa executá-los em um script de shell para evitar perder a capacidade de conectar-se à sua máquina ao executá-los remotamente.

Khaled
fonte
4
--state RELATEDna última regra é desnecessário; --state ESTABLISHEDbasta. Você também pode permitir o tráfego DNS e provavelmente deve permitir qualquer coisa na interface de loopback, ou todo tipo de coisa pode se comportar de maneira muito estranha.
MadHatter
@MadHatter: Sim, você está certo, especialmente sobre o material de auto-retorno :)
Khaled
Obrigado, seria possível obter o arquivo inteiro de você? ou seja, algo que eu possa copiar e colar direto no / etc / sysconfig / iptables? Não tenho experiência suficiente com isso para confiar na minha intuição para fazer as edições apropriadas.
Disco
2
ps. estabelecer conexão será forçada a fechar após o primeiro comando
user956584 26/11
3
Você realmente deve alterar a ordem desses comandos. As linhas de política devem aparecer como as últimas. Qualquer um que copypasting isto em uma sessão ssh será HUPed e encerrado imediatamente
AndreasT
4

Algo assim:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
Mikel
fonte
1
Eu acho que você -i lonão quis dizer -s lo; novamente, apenas ESTABLISHEDé necessário nas regras estaduais, e provavelmente deve haver um --sport 22lá também. Por que todos estão tão interessados ​​em permitir RELATED?
precisa
@ MadHatter: Sobre RELATED: Na verdade, é útil para combinar coisas que não são TCP, como respostas de ping e respostas de DNS. Pelo menos, é o que eu sempre assumi.
Steven segunda-feira
2
Minha crença é que não corresponderá a nenhum deles. Corresponderia, por exemplo, a uma resposta proibida pelo administrador do host do ICMP, mas isso é o mais útil possível; e se não for qualificado, ele corresponderá a qualquer tráfego relacionado, não apenas ao tráfego relacionado à linha anterior.
precisa
@ MadHatter: Acho que vou ter que fazer alguns testes para ver se você está certo. Obrigado por desafiar minha suposição.
Steven segunda-feira
Sim, o estado ESTABELECIDO é tudo o que é necessário para corresponder às respostas DNS UDP e às respostas eco do ICMP.
Steven segunda-feira