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