iptables para iniciantes, curiosos, interessados ​​(2ª parte)

Quando SinceLinux tinha apenas alguns meses de idade, escrevi um tutorial extremamente simples de entender sobre iptables: iptables para iniciantes, curiosos, interessados ​​(1ª parte) . Usando metáforas como comparar nosso computador com nossa casa, nosso firewall com a porta de casa, entre outros exemplos, expliquei de forma divertida, sem tantos detalhes técnicos ou conceitos complicados, o que é firewall, o que é iptables e como começar a usar e configurar. Esta é a continuação, a 2ª parte do tutorial do iptables anterior 🙂

Acontece que há poucos dias usando um AP Linksys (Ponto de Acesso) coloquei um Wifi na casa da minha namorada, embora o local não seja o mais conhecedor em termos de tecnologia, ou seja, não é que haja muitos perigos de cracking , é sempre uma boa ideia ter uma segurança excelente tanto no Wifi como nos computadores.

Não vou comentar sobre a segurança do Wifi aqui, pois não é o objetivo do post, vou me concentrar na configuração do iptables que uso atualmente no meu laptop.

Os seguintes comandos são executados em um terminal, eles precisam ser executados com privilégios de administrador, irei acrescentar sudo a cada comando, você pode fazer o mesmo ou evitar o uso de sudo executando os comandos diretamente como root

No post anterior, expliquei que é necessário em um firewall primeiro negar todo o tráfego de entrada, para isso:

sudo iptables -P INPUT DROP

Então, devemos permitir que nosso próprio computador tenha permissão para inserir dados:

sudo iptables -A INPUT -i lo -j ACCEPT

Além de aceitar pacotes de solicitações originadas de nosso computador:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Para uma melhor compreensão dessas linhas, recomendo a leitura da primeira metade do artigo anterior: iptables para iniciantes, curiosos, interessados ​​(1ª parte)

Até agora nosso computador pode navegar na internet sem problemas, mas ninguém de nenhum outro ambiente (LAN, internet, Wifi, etc.) poderá acessar nosso computador de nenhuma maneira. Vamos começar a configurar o iptables de acordo com nossas necessidades.

Usando ulogd para gerar os logs do iptables em outro arquivo:

Por padrão, os logs do iptables vão para o log do kernel, o log do sistema, ou algo assim ... no Arch por padrão, agora eu nem me lembro para onde vão, é por isso que eu uso Ulogd para que os logs do iptables fiquem em outro arquivo.

sudo iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ULOG

Dar acesso ao meu servidor privado:

Eu não uso o VirtualBox ou algo semelhante para virtualizar, tenho meu servidor privado virtualizado com Qemu + KVM que deve ser capaz de se conectar ao meu laptop como tal, com as regras de iptables que acabei de especificar acima, ele não será capaz, é por isso que tenho que dar permissão ao IP do meu servidor virtual para que ele possa acessar meu laptop:

sudo iptables -A INPUT -i virbr0 -p tcp -s 192.168.122.88 -j ACCEPT

Vamos detalhar essa linha, é importante que você entenda o que significa cada parâmetro, pois eles se repetirão muito a partir de agora:

-A ENTRADA : Estou dizendo que vou declarar uma regra para o tráfego de entrada

-i virbr0 : Declaro que a interface pela qual aceitarei o tráfego não é etho (LAN) ou wlan0 (Wifi), digo especificamente que é a minha interface virbr0, ou seja, a interface de rede virtual (interna) pela qual meu laptop se comunica com meu servidor virtual (e vice-versa)

-p tcp : Eu especifico o protocolo, os mais usados ​​são UDP e TCP, aqui bastou realmente não colocar isso mas ... costuma-se especificar o tipo de protocolo a aceitar

-s 192.168.122.88 : A fonte, fonte dos pacotes. Ou seja, a regra se refere a pacotes que vêm especificamente do IP 192.168.122.88

-j ACEITAR : Já aqui digo o que quero fazer com os pacotes que correspondem ao anterior, neste caso aceitar.

Ou seja, resumindo, vou aceitar pacotes que venham desse IP 192.168.122.88, mas caso queira inserir pacotes que venham desse IP MAS! Eles entram de uma interface que não é virbr0, ou seja, digamos que tentem inserir pacotes do IP 192.168.122.88 mas sejam de um computador da nossa rede Wifi, se for o caso os pacotes serão rejeitados. porque? Porque especificamos claramente que sim, aceitamos pacotes de 192.168.122.88 sim, mas e somente mas, eles também têm que entrar na interface virbr0 (interface de rede virtual interna), se os pacotes vierem de outra interface (LAN, RAS, Wifi, etc), então eles não serão aceitos. Especificando a interface como você pode ver, podemos restringi-la ainda mais, podemos ter um melhor controle sobre o que entra (ou não entra) em nosso computador.

Aceitando ping de qualquer IP do Wifi doméstico:

De algum outro computador que se conecta ao Wifi, se você tentar fazer ping no meu laptop, quero permitir. razão? A ideia também é que nas próximas semanas ligar o PC da casa ao lado da rede, então compartilhar informações ficaria menos complexo, mais fluido, quando eu começar a fazer testes para vincular o desktop ao Wifi, irei preciso fazer o ping do meu laptop para verificar a conectividade, se meu laptop não der ping de volta posso pensar que o AP está falhando, ou que ocorreu um erro ao acessar o Wifi, por isso quero permitir o ping.

sudo iptables -A INPUT -i wlo1 -p icmp -s 192.168.1.0/24 -d 192.168.1.51 -j ACCEPT

-A ENTRADA : O mesmo que antes, me refiro ao tráfego de entrada

-eu quero1 : Semelhante a antes. No caso anterior eu especifiquei a interface virtual, neste caso eu especifico outra interface, a do meu wifi: wlo1

-p icmp : Protocolo Icmp, icmp = ping. Ou seja, não estou permitindo SSH ou algo semelhante, só permito ping (icmp)

-s 192.168.1.0/24 : A origem dos pacotes, ou seja, desde que os pacotes venham de um IP 192.168.1.? será aceito

-d 192.168.1.51 : IP de destino, ou seja, meu IP.

-j ACEITAR : Indico o que fazer com os pacotes que correspondem ao anterior, aceito.

Isto é, e para explicar isso de uma forma corrente, eu aceito que eles me façam ping (protocolo icmp) cujo destino é especificamente meu IP, desde que venham de um IP como 192.168.1 .__ mas também, eles não podem vir de qualquer interface de rede, eles devem entrar especificamente na minha interface de rede Wifi (wlo1)

Aceite SSH apenas para um IP:

Às vezes preciso me conectar por SSH do meu smartphone para controlar o laptop, é por isso que devo permitir o acesso SSH ao meu laptop a partir dos IPs do meu Wifi, para isso:

sudo iptables -A INPUT -i wlo1 -p tcp -s 192.168.1.0/24 -d 192.168.1.51 --dport 22 -j ACCEPT

Desta linha a única coisa que é diferente ou que merece destaque é: –Dport 22 (Porta SSH que uso)

Ou seja, eu aceito tentativas de conexão ao meu laptop pela porta 22, desde que venham de qualquer IP do meu wifi, elas também devem ter meu IP como destino específico e também venham pela interface wlo1, ou seja, meu wifi (não a lan, etc)

Permitindo que eles vejam seu site:

Não é o meu caso, mas se algum de vocês tem um site hospedado e não deseja negar o acesso a ninguém, ou seja, que qualquer pessoa de qualquer lugar possa acessar aquele site, é muito mais simples do que você imagina:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Em outras palavras, aqui eles estão permitindo todo o tráfego de entrada (tcp) através da porta 80. Como você pode ver, eu não especifico de quais IPs ou rede eu permito o acesso, ao não especificar uma faixa de IP para permitir, o iptables assume que eu desejo permitir o acesso todos os intervalos de IP existentes, ou seja, para todo o mundo 🙂

Outras combinações:

Tenho muitas outras regras como, por exemplo, aceitar ping para IPs da minha LAN doméstica (para isso é basicamente a mesma linha acima, alterando os intervalos de IP), que é mais do mesmo que acabei de explicar acima ... no meu laptop como tal eu não uso coisas realmente complexas, de limitação de conexões, anti DDoS, deixo isso para os servidores, no meu laptop não preciso disso

Enfim, até agora o artigo.

Como você pode ver, trabalhar com iptables não é tão complexo de forma alguma, uma vez que você constrói um script no qual você escreve suas regras, é muito simples modificá-lo, adicionar ou remover regras de seu firewall.

Não me considero um especialista no assunto longe disso, apesar das dúvidas que possa ter, eles comentam aqui, tentarei ajudá-lo no máximo que puder.

lembranças


O conteúdo do artigo segue nossos princípios de ética editorial. Para relatar um erro, clique Clique aqui.

31 comentários, deixe o seu

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   arriscar dito

    Muito bom, muito bem explicado, ótimo.
    Eu amo esse tipo de postagem.

    1.    KZKG ^ Gaara dito

      Muito obrigado por comentar 🙂

      Este post foi uma dívida que eu tinha há muito tempo, é agradável e agradável no final poder saldá-la ^ _ ^

      lembranças

      1.    FIXOCONN dito

        uma pergunta você está em cuba?
        … Acontece que há alguns dias usando um AP Linksys (Ponto de Acesso) coloquei um Wifi na casa da minha namorada

        1.    KZKG ^ Gaara dito

          Sim, claro, nasci e moro em Cuba. por que a pergunta?

        2.    Sam burgos dito

          @FIXOCONN: Olá amigo e perdoe o offtopic da pergunta, mas como você define o Cinnamon para aparecer como um ambiente de desktop no user-agent? Eu uso o Mint 13 com o Cinnamon, mas de forma alguma faço com que o logotipo do Cinnamon apareça no meu user-agent toda vez que comento neste site

          Você poderia ter a gentileza de me passar os detalhes do seu agente de usuário, se não for muito problema? Eu gostaria de saber esses dados para colocá-los sozinho =)

          Deixo uma página para que você possa revisá-la e me dar as informações. Obrigado e administradores, perdoem o "trolling" (se você pode chamá-lo assim) da minha parte com esta informação -> http://user-agent-string.info/

          1.    KZKG ^ Gaara dito

            Adicione "Canela" (sem as aspas) a qualquer parte do UserAgent, então o logotipo deve aparecer em comentários futuros 🙂

  2.   Bruno cascio dito

    Muito bom o post! muito claro 😀

    1.    KZKG ^ Gaara dito

      Obrigado por ler e obrigado pelo seu comentário 🙂

  3.   vale dito

    Obrigado! Isso realmente me ajuda muito!

  4.   Oscar granada dito

    Olá, antes de mais muitos parabéns pelo blog, acho ótimo.
    Algo que convém mencionar é que a opção de logar com ULOG não funciona em sistemas operacionais que possuem ulogd2, para este caso a regra deveria ser:
    sudo iptables -A INPUT -p tcp -m tcp –tcp-flags FIN, SYN, RST, ACK SYN -j NFLOG

    1.    KZKG ^ Gaara dito

      Em primeiro lugar, muito obrigado pelo que você fala sobre o blog 🙂

      No Arch tenho ulogd v2.0.2-2 instalado, e a linha que coloquei funciona sem problemas (tive que colocar um loglevel = 1 em /etc/ulogd.conf, mas leva os logs para outro arquivo sem problemas.

      Usando ulogd v2 ou superior, a linha que deixei funciona incorretamente para você?

      Saudações e obrigado por comentar.

  5.   Citux dito

    Fiquei sempre esperando a segunda parte, lembro quando li a primeira (era minha iniciação nos firewalls). Obrigado @ KZKG ^ Gaara, cumprimentos 🙂

    1.    KZKG ^ Gaara dito

      Obrigado por me ler 😀
      E hehe sim, eu falei ... esse post foi uma dívida que eu tinha há muito tempo ^ _ ^

  6.   Imagem de Jose Luis Gonzalez placeholder dito

    Saudações. Muito bom o post. Estou tentando configurar regras de iptables para redirecionar o tráfego do squid para o dansguardian e ainda não atingiu o objetivo. Eu apreciaria alguma ajuda a esse respeito.

    1.    KZKG ^ Gaara dito

      iptables para isso? Isso não é feito diretamente com ACLs no Squid?

  7.   sem nome dito

    "Eu tenho muitas outras regras como .."
    Isso é o que eu chamo de paranóia garoto
    Um pouco mais e você coloca um pacote de Rotwailer em cada porta aberta do seu modem / roteador 🙂

    1.    KZKG ^ Gaara dito

      HAHAHAHAHAHAHAHAHA Estou morrendo de rir com os rottwailers hahahaha

  8.   Ivan dito

    Saudações amigo, acontece que preciso de ajuda para configurar o IPTables de forma que negue o acesso apenas para a porta 80 quando digito o endereço no navegador dos meus servidores de nomes personalizados, ou seja, quando por exemplo digito ns1.mydomain.com e ns2.mydomain. com (que são meus servidores de nomes) IPtables negam acesso à porta 80 para que o navegador tente carregar a página, mas depois de um tempo ela expira e nunca carrega, acontece que eu já tentei com comandos como este:

    iptables -A INPUT -d ns1.midomini.com -p tcp –dport 80 -j DROP
    iptables -A INPUT -d ns2.midomini.com -p tcp –dport 80 -j DROP

    Mas a única coisa que ele faz é negar a entrada na porta 80 em todos os meus domínios (já que eles estão compartilhando o mesmo IP do host virtual), quero que esteja apenas na url dos meus servidores de nomes e no IP para o qual meus servidores de nomes apontam, ou seja, as tabelas de IP negam acesso à porta 80 em:

    ns1.midomini.com (Apontando A) -> 102.887.23.33
    ns2.midomini.com (Apontando A) -> 102.887.23.34

    e os IPs para os quais os servidores de nomes apontam

    102.887.23.33
    102.887.23.34

    Um exemplo de empresa que possui este sistema é: Dreamhost
    Seus servidores de nomes: ns1.dreamhost.com e ns2.dreamhost.com e os IPs para os quais eles apontam não respondem quando digitados na barra de endereços do navegador

    Muito obrigado desde já pela atenção, gostaria muito que me ajudassem com isso, eu realmente preciso e com urgência !!

    Bom Dia !!

    1.    KZKG ^ Gaara dito

      Olá Ivan

      Contate-me por e-mail (kzkggaara [at] desdelinux [dot] net) para falar com mais calma e explicar melhor, amanhã sem falta responderei (hoje estou passando)

      O que você quer fazer é simples, não sei por que as linhas que você me diz não funcionam para você, deveriam, mas você tem que verificar os logs e outras coisas que seriam muito longas por aqui.

      Saudações e espero seu email

  9.   Neysonv dito

    teoricamente com o iptables eu poderia evitar solicitações de desconexão de programas como o aircrack. Estou certo??? Bem, eu vou fazer testes, mas se você me disser, você me deixaria muito feliz XDDD

    1.    KZKG ^ Gaara dito

      Em teoria eu acho que sim, agora não sei como poderia ser feito, nunca fiz ... mas repito, em teoria, acho que poderia.

  10.   Alex dito

    Depois de aplicar as regras de iptables, é impossível para mim acessar as pastas compartilhadas do Windows na rede local. Que regra devo aplicar para corrigir isso?
    Obrigado.

    1.    KZKG ^ Gaara dito

      Quais regras de iptables você aplicou?
      Esta é a 2ª parte de "iptables for newbies", você leu a primeira? Eu pergunto para saber se você aplicou as regras que estavam no post anterior

      1.    Alex dito

        Sim, li ambas as partes. Para o script, baseio-me em outro post que você postou sobre como iniciar regras com o systemd.

        #! / Bin / bash
        # - UTF 8 -

        # Iptables binary
        iptables = »/ usr / bin / iptables»

        jogou fora ""

        ## Limpar tabelas ##
        $ iptables -F
        $ iptables -X
        $ iptables -Z
        #echo »- Feito FLUS para iptables» && echo »»

        ## Estabelecendo logs com ULOGD ##
        $ iptables -A INPUT -p tcp -m tcp -tcp-flags FIN, SYN, RST, ACK SYN -j ULOG

        ## Definir política DROP padrão ##
        $ iptables -P INPUT DROP
        $ iptables -P FORWARD DROP
        #echo »- Política DROP definida por padrão» && echo »»

        ## Permitir tudo para localhost ##
        $ iptables -A INPUT -i lo -j ACEITAR
        $ iptables -A SAÍDA -o lo -j ACEITAR
        #echo »- Todos permitidos para localhost» && echo »»

        ## Permitir a entrada de pacotes de conexões que iniciei ##
        $ iptables -A INPUT -m state –state ESTABELECIDO, RELACIONADO -j ACEITAR
        #echo »- Pacotes de conexão permitidos iniciados por mim» && echo »»

        jogou fora " ##############################"
        echo »## IPTABLES CONFIGURADOS OK! ## »
        jogou fora " ##############################"

        Li na internet que para o samba você deve ter as seguintes regras no script:

        $ iptables -A INPUT -p tcp –dport 139 -j ACEITAR
        $ iptables -A INPUT -p tcp –dport 445 -j ACEITAR
        $ iptables -A INPUT -p udp –sport 137 -j ACEITAR
        $ iptables -A INPUT -p udp –dport 137 -j ACEITAR
        $ iptables -A INPUT -p udp –dport 138 -j ACEITAR

        Porém, nem mesmo com eles vejo grupos de trabalho do Windows. : S

      2.    Alex dito

        Problema resolvido. Modifique o grupo de trabalho e os hosts permitem parâmetros no arquivo de configuração do samba.

  11.   otkmanz dito

    Excelente artigo, ótimo !!!!
    Acabei de ler e adoro a maneira como você o explica e o uso realmente útil do iptables, gostaria muito de aprender como usá-lo com mais profundidade.
    Saudações e excelente artigo, espero que publique mais sobre Iptables! ^^

  12.   LEO dito

    Querida;

    Tenho um proxy com iptables e uma das minhas redes não consegue pingar http://www.google.cl por isso estou com as portas bloqueadas e tentando mil maneiras de abrir as portas e nada acontece. Se eu não consigo ping, não consigo conectar o Outlook

  13.   Borja dito

    Parabéns pela postagem! Muito bom. Mas eu tenho uma pergunta. Às vezes, o endereço IP que é atribuído a você na rede pode mudar (se for verdade que poderíamos atribuir um IP aos nossos endereços MAC), mas existe a possibilidade com o Iptables permitir o acesso ao nosso servidor via SSH por endereço MAC?

    Espero ter me explicado bem.

    Saudações e muito obrigado!

  14.   Fernando Martin Gan dito

    Olá, você sabe que eu tinha um servidor linux configurado e depois de digitar esses comandos bloqueei tudo e perdi o acesso, consegui recuperar quase tudo mas estou faltando 2 coisas. * Não consigo mais acessar de um navegador web através do cname «servidor» se por ip, 10.10.10.5 e por outro lado não vejo os recursos compartilhados do windows explorer na rede, antes de colocar \\ servidor e viu todos os recursos compartilhados. Espero que você possa me ajudar, eu sei que é bobo mas não estou conseguindo resolver, obrigado

  15.   seu dito

    Cito literalmente:
    '
    Protocolo Icmp, icmp = ping. Ou seja, não estou permitindo SSH ou algo semelhante, só permito ping (icmp)
    '

    ICMP e PING não são iguais. O ping faz parte do protocolo ICMP, mas não é tudo. O protocolo ICMP (Internet Control Message Protocol) tem muitos outros usos, alguns deles com certos perigos. E você está aceitando todo o tráfego ICMP. Você teria que se restringir apenas ao ping.

    Saludos!

  16.   Ozkr dito

    Tenho que fazer um estágio, mas não entendo muito de iptables, você poderia me ajudar….
    obrigado!!!!!!!