Introdução ao iptables
        
        
          O iptables é um aplicativo de
          linha de comando do espaço do(a) usuário(a) usado para configurar o
          conjunto de regras de filtragem de pacote do núcleo Linux 2.4 e
          posteriores.
        
        
          Esse pacote é conhecido por construir e funcionar corretamente
          usando uma plataforma LFS 12.4.
        
        
          Informação do Pacote
        
        
        
          Dependências do iptables
        
        
          Opcionais
        
        
          libpcap-1.10.5 (exigido para suporte ao
          compilador BPF ou nfsynproxy), bpf-utils (exigido para
          suporte ao Berkeley Packet Filter), libnfnetlink
          (exigido para suporte ao connlabel), libnetfilter_conntrack
          (exigido para suporte ao connlabel) e nftables
        
       
      
        
          Configuração do
          Núcleo
        
        
          Um firewall no Linux é realizado por meio da interface netfilter.
          Para usar o iptables para
          configurar a netfilter, os seguintes parâmetros de configuração do
          núcleo são exigidos:
        
        
[*] Networking support --->                                                [NET]
  Networking options --->
    [*] Network packet filtering framework (Netfilter) --->          [NETFILTER]
      [*] Advanced netfilter configuration                  [NETFILTER_ADVANCED]
      Core Netfilter Configuration --->
        <*/M> Netfilter connection tracking support               [NF_CONNTRACK]
        <*/M> Netfilter Xtables support (required for ip_tables)
                                                        ...  [NETFILTER_XTABLES]
        <*/M>   LOG target support                     [NETFILTER_XT_TARGET_LOG]
      IP: Netfilter Configuration --->
        <*/M> IP tables support (required for filtering/masq/NAT)
                                                           ...  [IP_NF_IPTABLES]
        
          Inclua quaisquer protocolos de rastreamento de conexão que serão
          usados, bem como quaisquer protocolos que você desejar usar para
          corresponder ao suporte sob a seção "Configuração Central da
          Netfilter". As opções acima são suficientes para se executar o
          Criando um Firewall Pessoal Com o iptables
          abaixo.
        
       
      
        
          Instalação do iptables
        
        
          
          
            Nota
          
          
            A instalação abaixo não inclui a construção de algumas
            bibliotecas de extensão especializadas que exigem os cabeçalhos
            crus no código fonte do Linux.
            Se desejar construir as extensões adicionais (se não tiver
            certeza, então provavelmente não deseja), [então] você pode olhar
            no arquivo INSTALL para ver um
            exemplo do como mudar o parâmetro KERNEL_DIR= para apontar para o
            código fonte do Linux. Observe
            que, se atualizar a versão do núcleo, [então] possivelmente
            precisará também recompilar o iptables e isso a equipe do BLFS não testou
            usando os cabeçalhos crus do núcleo.
          
         
        
          Instale iptables executando os
          seguintes comandos:
        
        ./configure --prefix=/usr     \
            --disable-nftables \
            --enable-libipq    &&
make
        
          Esse pacote não vem com uma suíte de teste.
        
        
          Agora, como o(a) usuário(a) root:
        
        make install
       
      
        
          Explicações do Comando
        
        
          --disable-nftables: Essa
          chave desabilita a construção da compatibilidade do nftables.
        
        
          --enable-libipq: Essa chave
          habilita a construção da libipq.so a
          qual pode ser usada por alguns pacotes fora do BLFS.
        
        
          --enable-nfsynproxy: Essa chave
          habilita a instalação da ferramenta de configuração do SYNPROXY
          nfsynproxy.
        
       
      
        
          Configurando iptables
        
        
          
          
            Nota
          
          
            Nas seguintes configurações de exemplo, LAN1 é usada para a interface
            interna da LAN e WAN1 é usada para a interface
            externa conectada com a Internet. Você precisará substituir esses
            valores por nomes apropriados de interface para o seu sistema.
          
         
        
          
            Firewall Pessoal
          
          
            Um Firewall Pessoal é projetado para permitir que você acesse
            todos os serviços oferecidos na Internet enquanto mantém o seu
            computador seguro e os seus dados privados.
          
          
            Abaixo está uma versão ligeiramente modificada da recomendação do
            Rusty Russell oriunda do 
            Linux 2.4 Packet Filtering HOWTO. Ela ainda é aplicável aos
            núcleos Linux 6.x.
          
          cat > /etc/rc.d/rc.iptables << "EOF"
#!/bin/sh
# Início do rc.iptables
# Insere módulos de rastreamento de conexão
# (não necessário se construído internamente ao kernel)
modprobe nf_conntrack
modprobe xt_LOG
# Habilita difusão echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Desabilita Pacotes Fonte Roteados
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
# Habilita a Proteção SYN Cookie do TCP
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Desabilita a Aceitação de Redireção de ICMP
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
# Não envia Mensagens de Redireção
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# Descarta Pacotes Falsificados entrantes em uma interface, onde as 
# respostas resultariam na resposta indo para uma interface diferente.
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Registra pacotes com endereços impossíveis.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
# Seja detalhado acerca de endereços de IP dinâmicos (não necessário no caso de IP estático)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr
# Desabilita a Notificação Explícita de Congestão
# roteadores demais ainda são ignorantes
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# Configura um estado conhecido
iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -P OUTPUT  DROP
# Estas linhas estão aqui no caso das regras já estiverem no lugar e o conjunto de comandos sequenciais for até mesmo
# reexecutado em tempo real. Nós queremos remover todas as regras e cadeias preexistentes definidas por usuário(a)
# antes de implementarmos novas regras.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Permite conexões locais somente
iptables -A INPUT  -i lo -j ACCEPT
# Libera a saída gerada em qualquer interface para qualquer IP para 
# qualquer serviço (igual a -P ACCEPT)
iptables -A OUTPUT -j ACCEPT
# Permite respostas em conexões já estabelecidas e permite novas 
# conexões relacionadas às estabelecidas (por exemplo, modo de porta 
# ftp)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Descarte qualquer pacote MULTICAST ou BROADCAST entrante antes de registrar:
# A caixa gera vários deles ao usar netbios ou mDNS e aqueles aparecem imediatamente
# como entrantes, o que sobrecarrega o log.
iptables -A INPUT -m addrtype --dst-type BROADCAST,MULTICAST -j DROP
# Registra tudo o mais.
iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "
# Fim do $rc_base/rc.iptables
EOF
chmod 700 /etc/rc.d/rc.iptables
          
            Esse script é bastante simples; ele descarta todo o tráfego
            entrante no seu computador que não foi iniciado a partir do seu
            computador; porém, considerando que você está simplesmente
            surfando na Internet, é improvável que exceda os limites dele.
          
          
            Se você encontrar frequentemente certos atrasos ao acessar
            servidores FTP, [então] dê uma olhada em Exemplo número quatro de BusyBox com
            o iptables.
          
          
            Mesmo se você tiver processos de segundo plano ou serviços
            executando em seu sistema, esses estarão inacessíveis em todos os
            lugares, exceto a partir do seu próprio computador. Se quiser
            permitir o acesso a serviços na sua máquina, tais como o
            ssh ou o
            ping, [então] dê
            uma olhada em Criando um BusyBox Com o iptables.
          
         
        
          
            Roteador
            de Mascaramento
          
          
            Um Firewall de Rede de Comunicação tem duas interfaces, uma
            conectada com uma intranet, neste exemplo LAN1 e uma conectada com a
            Internet, aqui WAN1.
            Para fornecer a máxima segurança para o próprio firewall, tenha
            certeza de que não existem servidores desnecessários executando
            nele, tais como o X11. Como um
            princípio geral, o próprio firewall não deveria acessar qualquer
            serviço não confiável (pense em um servidor remoto dando
            respostas que fazem com que um processo de segundo plano no seu
            sistema quebre; ou ainda pior, que implementa um verme via um
            estouro do buffer).
          
          cat > /etc/rc.d/rc.iptables << "EOF"
#!/bin/sh
# Início do rc.iptables
echo
echo "Você está usando a configuração de exemplo para uma configuração de um firewall"
echo "oriunda do Beyond Linux From Scratch."
echo "Este exemplo está longe de ser completo; ele é entendido para ser"
echo "somente uma referência."
echo "A segurança do firewall é um problema complexo, que excede o escopo"
echo "das regras de configuração abaixo."
echo "Você pode encontrar informação adicional"
echo "acerca de firewalls no Capítulo 4 do livro BLFS."
echo "https://www.linuxfromscratch.org/blfs"
echo
# Insere módulos do iptables (não necessário se construído internamente ao kernel).
modprobe nf_conntrack
modprobe nf_conntrack_ftp
modprobe xt_conntrack
modprobe xt_LOG
modprobe xt_state
# Habilita difusão echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Desabilita Pacotes Fonte Roteados
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Habilita a Proteção SYN Cookie do TCP
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Desabilita a Aceitação de Redireção de ICMP
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Não envia Mensagens de Redireção
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# Descarta Pacotes Falsificados entrantes em uma interface, onde as 
# respostas resultariam na resposta indo para uma interface diferente.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Registra pacotes com endereços impossíveis.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# Seja verboso a respeito de endereços dinâmicos de IP (não necessário no caso de IP estático)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr
# Desabilita a Notificação Explícita de Congestão
# roteadores demais ainda são ignorantes
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# Configura um estado conhecido
iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -P OUTPUT  DROP
# Estas linhas estão aqui no caso das regras já estiverem no lugar e o script for mesmo
# reexecutado em tempo real.  Nós queremos remover todas as regras e cadeias preexistentes
# definidas por usuário(a) antes de implementarmos novas regras.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Permite conexões locais
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Permite o encaminhamento se a iniciada na intranet
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD ! -i WAN1 -m conntrack --ctstate NEW       -j ACCEPT
# Faz o mascaramento (não necessário se a intranet não estiver usando 
# endereços IP privados)
iptables -t nat -A POSTROUTING -o WAN1 -j MASQUERADE
# Registra tudo para depuração (última de todas as regras, porém antes 
# das regras de política)
iptables -A INPUT   -j LOG --log-prefix "FIREWALL:INPUT "
iptables -A FORWARD -j LOG --log-prefix "FIREWALL:FORWARD "
iptables -A OUTPUT  -j LOG --log-prefix "FIREWALL:OUTPUT "
# Habilita o Encaminhamento de IP
echo 1 > /proc/sys/net/ipv4/ip_forward
EOF
chmod 700 /etc/rc.d/rc.iptables
          
            Com esse script sua intranet deveria estar razoavelmente segura
            contra ataques externos. Ninguém deveria estar apto(a) a
            configurar uma conexão nova para qualquer serviço interno e, se
            estiver mascarada, torna a sua intranet invisível para a
            Internet. Além disso, o seu firewall deveria estar relativamente
            a salvo, pois não existem serviços executando que um cracker
            pudesse atacar.
          
         
        
          
            BusyBox
          
          
            Este cenário não é muito diferente do Criando um Roteador de Mascaramento
            Com o iptables, porém, adicionalmente, oferece alguns
            serviços para a sua intranet. Exemplos disto podem ser quando
            você quer administrar o seu firewall a partir de outro
            dispositivo na sua intranet ou usá-lo como um proxy ou como um
            servidor de nome.
          
          
            
            
              Nota
            
            
              Delinear especificamente como proteger um servidor que oferece
              serviços na Internet vai bem além do escopo deste documento.
              Vejam-se as referências em “Informação Extra” para mais informação.
            
           
          
            Seja cauteloso(a). Cada serviço que você tenha habilitado torna a
            sua configuração mais complexa e o seu firewall menos seguro.
            Você está exposto(a) aos riscos dos serviços mal configurados ou
            de executar um serviço com um defeito explorável. Um firewall
            geralmente não deveria executar quaisquer serviços extras.
            Veja-se a introdução ao Criando um Roteador de Mascaramento
            Com o iptables para mais alguns detalhes.
          
          
            Se você quiser acrescentar serviços, tais como servidores
            internos Samba ou de nome, que não precisem acessar eles próprios
            a Internet, [então] as declarações adicionais são bastante
            simples e ainda deveriam ser aceitáveis a partir de um ponto de
            vista da segurança. Apenas acrescente as seguintes linhas no
            script antes das regras de
            registro.
          
          iptables -A INPUT -i ! WAN1  -j ACCEPT
iptables -A OUTPUT -o ! WAN1  -j ACCEPT
          
            Se processos de segundo plano, tais como o squid, tiverem que
            acessar eles próprios a Internet, [então] você geralmente poderia
            abrir OUTPUT e restringir INPUT.
          
          iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
          
            Entretanto, geralmente não é aconselhável deixar OUTPUT
            irrestrito. Você perde algum controle sobre trojans que gostariam
            de "chamar home", e um monte de redundância no caso de você tiver
            (mal) configurado um serviço, de forma que difunda a existência
            dele para o mundo.
          
          
            Para realizar isso, você deveria restringir INPUT e OUTPUT em
            todas as portas, exceto naquelas que sejam absolutamente
            necessárias ter abertas. Quais portas você tem de abrir depende
            das suas necessidades: a maioria você as encontrará procurando
            por acessos falhos nos seus arquivos de registro.
          
          
            
              Dê Uma Olhada nos Seguintes Exemplos:
            
            
              - 
                
                  O Squid está armazenando a web em cache:
                
                iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED \
  -j ACCEPT
               
              - 
                
                  Seu servidor de nome de cache (por exemplo, named) faz as
                  pesquisas dele via UDP:
                
                iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
               
              - 
                
                  Você quer executar ping em seu computador para garantir que
                  ele ainda esteja ativo:
                
                iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply   -j ACCEPT
               
              - 
                
                   Se
                  frequentemente estiver acessando servidores FTP ou curte
                  chat, [então] você poderia notar atrasos, pois algumas
                  implementações desses processos de segundo plano consultam
                  um processo de segundo plano identd no seu sistema para
                  obter nomes de usuário(a). Embora exista realmente pouco
                  dano nisso, ter-se um identd executando não é recomendado,
                  pois muitos especialistas em segurança entendem que o
                  serviço dá muito mais informação adicional.
                
                
                  Para evitar tais atrasos, você poderia rejeitar as
                  solicitações com uma resposta 'tcp-reset':
                
                iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
               
              - 
                
                  Para registrar e descartar pacotes inválidos (pacotes que
                  vieram depois de um tempo esgotado do netfilter ou de
                  alguns tipos de escaneamentos de rede de comunicação)
                  insira estas regras no topo da cadeia:
                
                iptables -I INPUT 0 -p tcp -m conntrack --ctstate INVALID \
 -j LOG --log-prefix "FIREWALL:INVALID "
iptables -I INPUT 1 -p tcp -m conntrack --ctstate INVALID -j DROP
               
              - 
                
                  Qualquer coisa vinda a partir do lado de fora não deveria
                  ter um endereço privado; isso é um ataque comum chamado de
                  falsificação de IP:
                
                iptables -A INPUT -i WAN1 -s 10.0.0.0/8    -j DROP
iptables -A INPUT -i WAN1 -s 172.16.0.0/12  -j DROP
iptables -A INPUT -i WAN1 -s 192.168.0.0/16 -j DROP
                
                  Existem outros endereços que você possivelmente também
                  queira descartar: 0.0.0.0/8, 127.0.0.0/8, 224.0.0.0/3
                  (multicast e experimental), 169.254.0.0/16 (Redes de
                  Comunicação Link Local) e 192.0.2.0/24 (rede de comunicação
                  de teste definida pela IANA).
                
               
              - 
                
                  Se o seu firewall for um cliente DHCP, [então] você precisa
                  permitir aqueles pacotes:
                
                iptables -A INPUT -i WAN1 -p udp -s 0.0.0.0 --sport 67 \
   -d 255.255.255.255 --dport 68 -j ACCEPT
               
              - 
                
                  Para simplificar a depuração e ser justo(a) com qualquer
                  um(a) que gostaria de acessar um serviço que você tenha
                  desabilitado, propositalmente ou por erro, você poderia
                  REJEITAR aqueles pacotes que são descartados.
                
                
                  Obviamente, isso precisa ser feito diretamente depois do
                  registro, como as ultimíssimas linhas antes dos pacotes
                  serem descartados pela política:
                
                iptables -A INPUT -j REJECT
               
            
           
          
            Esses são somente exemplos para mostrar para você algumas das
            capacidades do código do firewall no Linux. Dê uma olhada na
            página de manual do iptables. Lá você encontrará muito mais
            informação. Os números de porta necessários para isso podem ser
            encontrados em /etc/services, caso
            você não os encontrou por tentativa e erro no seu arquivo de
            registro.
          
         
        
          
            Conjunto de
            Comandos Sequenciais de Inicialização
          
          
            Para configurar o firewall iptables na inicialização, instale o
            script de inicialização /etc/rc.d/init.d/iptables incluso no pacote
            blfs-bootscripts-20250225.
          
          make install-iptables