Como Gilles demonstra, o conceito é o seguinte: Adicione regras ACEITAR para cada coisa específica que você deseja permitir, seja por IP de origem ou outras qualificações, depois defina a política padrão como REJECT.
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 loe -o locertamente causará problemas para certos aplicativos.
Eu tentei as duas configurações e o KeePass2 não inicia, alguma ideia? Além disso, se eu fizer iptables -Fisso para limpar todas as regras, não consigo nem executar ping no ubuntu.com
Pawel Cioch
@PawelCioch Por que o KeePass2 precisaria de conexão com a Internet?
Alex
@ Alex para armazenar arquivo de banco de dados no local remoto, isso eu quero único IP. Mas eu descobri tudo, a configuração é mais complicada que o exemplo aqui
Pawel Cioch
10
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
@Gilles para usar corretamente os estados RELACIONADOS e ESTABELECIDOS, você precisa corresponder o pacote inicial como um estado NOVO. lono exemplo acima é excluído da correspondência de estado e sempre permitido.
precisa saber é o seguinte
@ penguin359: Você poderia explicar por que NEW é necessário? Como estou longe de ser um especialista em iptables, copiei parcialmente essas regras do meu roteador doméstico, que não corresponde a NEW. Até onde eu entendi, tudo o que resta após a primeira regra são pacotes NOVOS (ou NÃO TRILHADOS). (Se eu estiver muito errado e você não puder explicar em um comentário, publique suas versões com explicações como resposta e eu excluirei as minhas.)
Gilles 'SO- stop stop be evil'
@Gilles Eu sempre largo o estado INVÁLIDO antes de aceitar qualquer coisa ... que torne algo que não é INVÁLIDO, RELACIONADO, ESTABELECIDO, deve ser um estado NOVO. Mas não sei por que motivo tudo deve especificar NEW. Em teoria, se você não manipular INVALID e não especificar NEW, poderá aceitar INVALID. Porém, uma vez que INVALID é tratado, parece-me que a verificação de NOVO estado em todas as regras simplesmente requer mais processamento para o pacote.
Xenoterracide
O @Gilles também é uma política padrão de rejeição ruim, porque envia um pacote de rejeição para cada pacote recebido, isso cria um ataque do DOS.
obrigado pela resposta sucinta. Como isso mudaria se eu quisesse permitir alguns IPs e intervalos de IPs. Em vez de yourIPaddressadicionar 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 22do seu exemplo para 2288? Além disso, isso também bloqueia rsync, sftp, etc para este servidor de todos os IPs, exceto os permitidos?
PKHunter
1
Observe que -p tcpé importante aqui porque --dportnão funciona sem ele. Eu também sugeriria usar em -j REJECTvez de DROPporque REJECTtorna a porta idêntica à porta fechada e DROPtorna os pacotes destinados a essa porta ocultos em preto. Na prática, o atacante remoto pode detectar DROPportas configuradas de portas realmente fechadas.
Mikko Rantalainen
0
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)
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.
Se você deseja apenas permitir um IP apenas, sem estado
é 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.fonte
iptables -F
isso para limpar todas as regras, não consigo nem executar ping no ubuntu.comAqui 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.
fonte
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.
fonte
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 o22
do seu exemplo para2288
? 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 deDROP
porqueREJECT
torna a porta idêntica à porta fechada eDROP
torna os pacotes destinados a essa porta ocultos em preto. Na prática, o atacante remoto pode detectarDROP
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)
https://github.com/skironDotNet/linux-allow-only-single-ip
fonte