Pages

sábado, abril 13, 2013

Configurar o firewall utilizando iptables

Configurar o firewall utilizando iptables

Nesta seção veremos como configurar o firewall utilizando o sucessor do ipchains: o netfilter, presente no kernel 2.4.X. Como o Linuxconf ainda não suporta o iptables, teremos que efetuar as configurações manualmente digitando os comandos diretamente num terminal. Nesta seção permitiremos que as máquinas internas acessem diretamente a Internet. Nosso servidor Web será uma máquina interna com um número ip inválido. Veja a Figura abaixo .
 
 Firewall com iptables


  Os recursos disponibilizados pelo netfilter são manipulados através do comando iptables. Como a criação de regras através do netfilter é dinâmica, assim como o ipchains, seu conteúdo é perdido quando a máquina é reinicializada. Quando utilizamos o Linuxconf para efetuar essas configurações, ele (o Linuxconf) salva essas regras num arquivo interno. Esse é um dos motivos pelos quais devemos criar um script de inicialização para que, após termos configurado as regras de utilização que desejamos, elas sejam executadas a cada inicialização.
Antes de criarmos scripts e definirmos quais serão as regras a serem utilizadas, vejamos um pouco da sintaxe utilizada pelo comando iptables no tratamento de ganchos preexistentes. A sintaxe mais utilizada do comando iptables é a seguinte:
    # iptables -[XYZ] cadeia especificação_da_regra [opções]
onde -[XYZ] pode ser:

  1. -A Adicionar uma nova regra a uma cadeia.
  2. -I Inserir uma nova regra numa posição em uma cadeia.
  3. -R Substitui uma regra em uma posição da cadeia.
  4. -D Apaga uma regra em uma posição da cadeia.
  5. -D Apaga a primeira regra que casa com uma cadeia.
Iremos utilizar basicamente as opções para adicionar (-A) e apagar (-D). As outras (-I para inserir e -R para substituir) são simplesmente extensões desses conceitos. Cada regra especifica um conjunto de condições que o pacote precisa satisfazer, e dependendo do que ele satisfizer, ele será direcionado para um destino ou para outro.
Atenção
É possível que, ao adicionar uma regra errada, sua máquina pare de funcionar corretamente. Neste caso, utilize o comando iptables -F, para que todas as regras do filtro de pacotes sejam desativadas. Porém, caso a política default esteja como DROP ou REJECT você precisará utilizar o comando iptables -P INPUT ACCEPT e a seguir iptables -P OUTPUT ACCEPT para redefinir a política padrão utilizada. Caso queira saber quais regras estão ativas, você pode usar o comando iptables -L .

 Pré-requisitos para a utilização do iptables

Para poder utilizar o comando iptables você deverá ter o pacote iptables instalado no seu sistema e também o módulo ip_tables.o carregado.
Para carregar o módulo ip_tables execute o seguinte comando:
    # modprobe ip_tables


7.7.2.2. Instalação

Para instalar o iptables selecione o seguinte pacote, marcando-o com o "install" no synaptic e clique em "proceed":
  • iptables
É possível instalar o iptables utilizando o apt digitando o seguinte comando em um terminal:
    # apt-get install iptables

7.7.2.3. Configurando as regras para o firewall

Vimos anteriormente que a política padrão da cadeia de entrada é definida como DROP, negando qualquer acesso à rede. A sintaxe utilizada pelo iptables efetuarmos essa ação é:
    # iptables -t filter -P INPUT DROP
Continuando, devemos permitir o acesso a um servidor web que escuta na porta 80 de uma máquina interna que possui o ip 192.168.1.200, porém, antes temos que permitir todo e qualquer tráfego na interface lo, que é a nossa interface de loopback para que a comunicação interprocessos possa funcionar. Precisamos então, executar o seguinte comando:
    # iptables -t filter -A INPUT -j ACCEPT -i lo
Antes ainda de liberarmos o tráfego ao nosso servidor Web precisamos fazer com que nosso firewall permita que os pacotes pertencentes às conexões já estabilizadas e os pacotes relacionados a essas conexões possam passar pelo firewall. Para isso precisamos dos comandos:
    # iptables -t filter -A FORWARD -j ACCEPT -m state --state
    ESTABLISHED, RELATED
    # iptables -t filter -A INPUT -j ACCEPT -m state --state
    ESTABLISHED, RELATED
Agora iremos realmente liberar o acesso à porta 80 do nosso servidor Web utilizando o comando:
    # iptables -t filter -A FORWARD -j ACCEPT -m state NEW -p tcp
    --dport http
Caso queiramos liberar ainda mais um tipo de acesso, podemos liberar o acesso a requisições[2] IDENT utilizadas pelo o protocolo de autenticação (auth), o qual é utilizado pelo e-mail e alguns servidores ftp. Para liberarmos esse acesso basta executar o comando:
    #  iptables -t filter -A FORWARD -j ACCEPT -m state NEW -p tcp
    --dport auth
Agora iremos criar uma regra que irá rejeitar todos os pacotes que não casarem com as regras anteriores:
    # iptables -t filter -A FORWARD -j REJECT
Após configurarmos o firewall, falta ainda configurarmos o mascaramento na interface de saida :
    # iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
Iremos configurar agora o mascaramento dos pacotes com destino ao nosso webserver. Todos os pacotes que vierem da interface ppp0 que tiverem como protocolo tcp e forem destinados à porta 80 são destinados para a máquina interna:
    # iptables -t nat -A PREROUTING -j DNAT --to-dest 192.168.1.200
    -i ppp0 -p tcp --dport 80
Assim terminamos de configurar nosso firewall. Porém, lembre-se de que estas regras desaparecerão assim que a máquina for reinicializada. Para evitar que isso ocorra, iremos criar um script que irá executar junto com a inicialização da máquina, garantindo que nossas regras estejam funcionando.

Crie no diretório /etc/init.d/ um arquivo chamado iptables com o seguinte conteúdo:
    #! /bin/sh
    # description: Inicializacao do iptables
    #
    # chkconfig: 2345 80 30
    # processname: iptables
    # pidfile: /var/run/iptabless.pid
    
    . /etc/rc.d/init.d/functions
    . /etc/sysconfig/network
    
    if [ ${NETWORKING} = "no" ]
    then
        exit 0
    fi
    
    case "$1" in
      start)
         gprintf "Iniciando o serviço de %s: " "IPtables"
         echo
         echo 1 > /proc/sys/net/ipv4/ip_forward 
    
         /sbin/modprobe ip_tables
         /usr/bin/iptables -t filter -P INPUT DROP
         /usr/bin/iptables -t filter -A INPUT -j ACCEPT -i lo
         /usr/bin/iptables -t filter -A FORWARD -j ACCEPT -m state \
     --state ESTABLISHED,RELATED
         /usr/bin/iptables -t filter -A INPUT -j ACCEPT -m state \ 
    --state ESTABLISHED,RELATED
         /usr/bin/iptables -t filter -A FORWARD -j ACCEPT -m state \
     NEW -p tcp --dport http
         /usr/bin/iptables -t filter -A FORWARD -j ACCEPT -m state\
     NEW -p tcp --dport auth
         /usr/bin/iptables -t filter -A FORWARD -j REJECT
         /usr/bin/iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0 
         /usr/bin/iptables -t nat -A PREROUTING -j DNAT \
     --to-dest 192.168.1.200 -i ppp0 -p tcp --dport 80  
    
            ;;
    
      stop)
    
        gprintf "Parando o serviço de %s: " "IPtables"
            echo
        /usr/bin/iptables -F
            /sbin/rmmod iptables
           
        ;;
         *)
           gprintf "Uso: iptables (start|stop)"
           echo
           ;;
    esac
    
    exit 0

Este script além de inserir as regras necessárias para o firewall, carrega também os módulos do kernel necessários para este serviço.
Como você pode notar, esse script é muito semelhante ao utilizado anteriormente no Capítulo 6 , sugerimos unificar os dois scripts em um só para um melhor gerenciamento das regras utilizadas, considerando que, a única diferença nos dois scripts mencionados são as regras utilizadas.
Nota: É possível continuar utilizando o ipchains no Kernel 2.4.X, bastando para isso carregar o módulo ipchains e utilizar as regras próprias do ipchains.

Notas


O netfilter pode gerenciar a criação de novas cadeias dinâmicamente, de maneira bem mais flexível que o ipchains.

Queries.

0 comentários:

Postar um comentário