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:
onde -[XYZ] pode ser:
Para carregar o módulo ip_tables execute o seguinte comando:
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:
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:
Agora iremos realmente liberar o acesso à porta 80 do nosso
servidor Web utilizando o comando:
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:
Agora iremos criar uma regra que irá rejeitar todos os
pacotes que não casarem com as regras anteriores:
Após configurarmos o firewall, falta ainda configurarmos o
mascaramento na interface de saida :
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:
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:
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.
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] |
-
-A Adicionar uma nova regra a uma
cadeia.
-
-I Inserir uma nova regra numa
posição em uma cadeia.
-
-R Substitui uma regra em uma
posição da cadeia.
-
-D Apaga uma regra em uma
posição da cadeia.
-
-D Apaga a primeira regra que casa com
uma cadeia.
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
# 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 |
# iptables -t filter -A INPUT -j ACCEPT -i lo |
# iptables -t filter -A FORWARD -j ACCEPT -m state --state ESTABLISHED, RELATED # iptables -t filter -A INPUT -j ACCEPT -m state --state ESTABLISHED, RELATED |
# iptables -t filter -A FORWARD -j ACCEPT -m state NEW -p tcp --dport http |
# iptables -t filter -A FORWARD -j ACCEPT -m state NEW -p tcp --dport auth |
# iptables -t filter -A FORWARD -j REJECT |
# iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0 |
# iptables -t nat -A PREROUTING -j DNAT --to-dest 192.168.1.200 -i ppp0 -p tcp --dport 80 |
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