Como permito certos ips e bloqueio todas as outras conexões no iptables?
Como permito certos ips e bloqueio todas as outras conexões no iptables?
Respostas:
Escrevi um post no blog sobre regras básicas do Iptables para o usuário de desktop há muito tempo e você provavelmente deveria lê-lo, e seu artigo vinculado sobre o design do firewall Stateful . Mas o pré-kernel 2.6.39 (que inclui ipset
e você pode querer usá-lo para os IPs da lista de permissões, se você tiver mais de 10 na lista de permissões (onde 10 é arbitrário)).
Primeiro, identifique os estados que sabemos que queremos aceitar ou descartar e faça a interface.
iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
Se você deseja apenas permitir um IP apenas, sem estado
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
é provável que você tenha problemas para fazer isso, e sugiro usar o estado para facilitar sua vida. Por exemplo, não permitir -i lo
e -o lo
certamente causará problemas para certos aplicativos.
iptables -F
isso para limpar todas as regras, não consigo nem executar ping no ubuntu.com
Aqui está um exemplo (não testado!) Que bloqueia apenas as conexões de entrada . São permitidas conexões pela interface de loopback, provenientes de 192.168.3.x, ICMP ou à porta SSH. Todas as outras conexões são rejeitadas.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
lo
no exemplo acima é excluído da correspondência de estado e sempre permitido.
A regra abaixo permitirá apenas o seu IP e bloqueia todos os outros IPs na porta 22 ou ssh. Teste com um novo terminal antes de desconectar.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddress
adicionar alguns endereços IP e intervalos? E se eu estiver usando SSH em uma porta não padrão como 2888, o comando mudaria o 22
do seu exemplo para 2288
? Além disso, isso também bloqueia rsync, sftp, etc para este servidor de todos os IPs, exceto os permitidos?
-p tcp
é importante aqui porque --dport
não funciona sem ele. Eu também sugeriria usar em -j REJECT
vez de DROP
porque REJECT
torna a porta idêntica à porta fechada e DROP
torna os pacotes destinados a essa porta ocultos em preto. Na prática, o atacante remoto pode detectar DROP
portas configuradas de portas realmente fechadas.
Aqui está um exemplo completo de trabalho.
Também faz com que os aplicativos funcionem (re: meu comentário sobre o keepass não está sendo iniciado)