Você está na página 1de 5

DEPARTAMENTO

DE Segurança da
ENGENHARIA Informação
INFORMÁTICA

www.dei.estg.iplei.pt www.dei.estg.iplei.pt/si/

Ficha 5 – Firewall Netfilter

1 Introdução
Uma firewall é um dispositivo para proteger uma rede das possíveis ameaças externas.
Uma firewall pode ser um dispositivo de hardware dedicado, ou um computador, por
exemplo a correr Linux desde que devidamente configurado.

Um tipo de firewall é designado por “packet filter”, em que os pacotes IP são


analizados e a sua sorte é determinada de acordo com as regras que forem criadas. Uma
firewall deste tipo trabalha ao nível das camadas de rede e de transporte e analisa:
• O protocolo usado
• Os endereços de destino e de origem
• Os portos de destino e origem
• O estado da ligação

2 Iptables/Netfilter
A instalação do RedHat Linux 8 inclui o Iptables, que passou a ser designado Netfilter,
que não é mais do que uma firewall de filtragem de pacotes. O IPtables cria
automaticamente três listas: INPUT, OUTPUT e FORWARD (que podem ser visualizadas
com o comando /sbin/iptables -L). Conforme o nome das listas indicam, as regras que estas
possuírem serão aplicadas aos pacotes que entrarem, saírem ou que sejam redireccionados.

2.1 Política por omissão


Para cada lista deve existir uma política por omissão, ou seja, essa política explicita o
que se deve fazer com os pacotes para os quais não existe uma regra definida. Essa política
por omissão pode ser “negar tudo” ou “permitir tudo”. Na primeira, negar tudo, começamos
por negar todo o tráfego e depois, ao adicionar regras, vamos aceitar o tráfego que
consideramos seguro ou necessário. Na política “permitir tudo”, aceitamos todo o tráfego
excepto o que estiver explicitamente negado nas regras.
Por questões de segurança deve-se usar a política por omissão de “negar tudo”, para
isso deve-se usar o comando:
/sbin/iptables –P nome_da_lista destino

2003-2004 1s SI -  Miguel Frade 1


Em que destino pode ser: ACCEPT, DROP, QUEUE, ou RETURN. REJECT, a
descrição de cada um destes destinos encontra-se na página do manual (man iptables). Por
exemplo para aplicar uma política por omissão “negar tudo” (o que seria equivalente a um
“deny all” no fim de uma ACL num router), devemos executar os seguintes comandos:

/sbin/iptables –P INPUT DROP


/sbin/iptables –P OUTPUT DROP
/sbin/iptables –P FORWARD DROP

Se não acrescentarmos nenhuma regra o computador fica incomunicável. Por isso


devemos especificar algumas regras para permitir a entrada e saída de tráfego. Eis a sintaxe
para adicionarmos uma regra:
/sbin/iptables –A nome_da_lista parâmetros –j destino

Por exemplo:
1) /sbin/iptables –A INPUT –s 192.168.1.254 –j ACCEPT
2) /sbin/iptables –A INPUT –s 192.168.1.0/24 –j DROP

A primeira regra diz para aceitar todos os pacotes provenientes da máquina


192.168.1.254. A segunda regra significa para descartar todos os pacotes provenientes da
rede 192.168.1.0. Á primeira vista estas duas regras podem parecer contraditórias, mas na
realidade não são. Isto porque a primeira regra a condizer ganha, ou seja, neste exemplo
a aplicação destas duas regras resultaria que de todas as máquinas da rede 192.168.1.0 só
serão aceites os pacotes da máquina 192.168.1.254. Por esta razão é necessário ter muita
atenção à ordem das regras. No entanto existe uma excepção à regra a primeira regra a
condizer ganha. A política por omissão, apesar de ser a primeira regra de cada lista,
permite que as regras seguintes sejam executadas.

Para apagar uma regra devemos executar /sbin/iptables –D nome_da_lista nº_da_linha


ou então /sbin/iptables –F para apagar todas as listas.

Exemplo de uma firewall simples construída com o iptables/netfilter:

#!/bin/sh
#
# script de configuração de uma firewall simples
#
# variável com a localização do iptables
IPTABLES=/sbin/iptables

# Apagar todas as regras das tabelas


$IPTABLES -F FORWARD
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT

# políticas por omissão


$IPTABLES -P INPUT DENY
$IPTABLES -P OUTPUT REJECT
$IPTABLES -P FORWARD REJECT

2003-2004 1s SI -  Miguel Frade 2


# activar o “loopback”
$IPTABLES -A INPUT -i lo -p all -j ACCEPT

# Permitir pacotes ICMP (para fazer ping’s)


$IPTABLES -A INPUT -p icmp -j ACCEPT

# permitir pacotes DNS (tcp ou udp)


$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 53 -j ACCEPT

# Para evitar pacotes estranhos só são aceites


# aqueles que não tiverem a flag SYN active. Ou
# seja rejeitar pacotes que não sejam pedidos de
# novas ligações (como acontece com os portscanners)
# o “!” serve para negar
$IPTABLES -A INPUT -p tcp ! --syn --dport :1023 -j ACCEPT

# Permitir o acesso aos portos superiors a 1023 para TCP e UDP


$IPTABLES -A INPUT -p tcp --dport 1024: -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 1024: -j ACCEPT

3 Exercício
1. A instalação do RedHat 8 já inclui o IPtables, mas o software está sempre a
evoluir e no que diz respeito à segurança devemos utilizar sempre as últimas
versões. Por isso o primeiro exercício é recompilar o Kernel.
a. Copiar a última versão do kernel disponível no servidor \\192.168.226.2 na
directoria “/pub/kernel”.
b. Colocar o referido ficheiro na directoia “/usr/src/” e descompactá-lo com o
comando “tar –xvjf <nome do ficheiro>”
c. Criar um link com o comando “ln -s /usr/src/ linux-2.4.22 /usr/src/linux”
d. Entrar na nova directoria (/usr/src/linux) e criar o ficheiro “make.sh” com o
seguinte conteúdo:
#!/bin/sh
make dep
make bzImage
make modules
make modules_install
make install

e. Executar o comando “make menuconfig” e verificar as seguintes opções.


As linhas começadas por “#” são comentários, o símbolo “-->” indica um
submenu. Ter em atenção que algumas opções devem ser activadas como
módulos <M>.
Loadable module support ---> (escolher todas as opções)

Processor type and features --->

2003-2004 1s SI -  Miguel Frade 3


# selecionar o CPU, para saber qual é fazer "cat /proc/cpuinfo"
(Pentium-III/Celeron(Coppermine)) Processor family

# off - para PC's com menos de 1GB de RAM


# para saber quanta memória tem fazer "cat /proc/meminfo"
(off) High Memory Support

Plug and Play configuration ---> (escolher todas as opções)

Network device support --->


[*] Network device support
Ethernet (10 or 100Mbit) --->
[*] Ethernet (10 or 100Mbit)
# fazer "dmesg |grep eth0" com o kernel original carregado, ou
# então fazer “cat /etc/modules.conf” e ver qual é o “alias”
# por exemplo: “alias eth0 tulip”, para ver qual foi a placa
# detectada e seleccionar como módulo

Ethernet (1000 Mbit) ---> (retirar todas as opções)

File systems --->


<M> Ext3 journalling file system support (EXPERIMENTAL)
# as outras opções devem ficar como estavam

# suporte para netfilter (firewall)


Networking options --->
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration --->
# verifique as seguintes opções
# (as opções que não estão listadas ficam como estavam)
<M> Connection tracking (required for masq/NAT)
<M> FTP protocol support
<M> IP tables support (required for filtering/masq/NAT)
<M> limit match support
<M> MAC address match support
<M> netfilter MARK match support
<M> Multiple port match support
<M> TOS match support
<M> Connection state match support
<M> Packet filtering
<M> REJECT target support
<M> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<M> Packet mangling
<M> TOS target support
<M> MARK target suppor
<M> LOG target support
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) suppor

f. Atribuir permissões de execução ao ficheiro “make.sh” e executá-lo (para


compilar o kernel e instalá-lo).
2. Enquanto o kernel é compilado (o que deve demorar alguns minutos) vamos
preparar a instalação da nova versão do iptables
a. Verifique qual é a versão instalada no sistema (rpm –q iptables), se for
inferior a 1.2.9 remova-a
b. copie o ficheiro “iptables-1.2.9.tar.bz2”, disponível no servidor
192.168.226.2, para uma directoria à sua escollha e descomprima o ficheiro

2003-2004 1s SI -  Miguel Frade 4


c. Editar o ficheiro “Makefile” incluído e alterar o seguinte:
# onde está:
PREFIX:=/usr/local
LIBDIR:=$(PREFIX)/lib
BINDIR:=$(PREFIX)/sbin
MANDIR:=$(PREFIX)/man
INCDIR:=$(PREFIX)/include

# mudar para:
PREFIX:=/usr
LIBDIR:=/lib
BINDIR:=/sbin
MANDIR:=$(PREFIX)/man
INCDIR:=$(PREFIX)/include

d. Após a conclusão da compilação do kernel deve compilar o iptables:


(enquanto a compilação não termina ver o ponto 3)
make
make install

e. Verificar se está instalada a nova versão com o comando “iptables -V”.


Verificar também se existe a tabela de “nat” (iptables –t nat -L) onde devem
constar as listas PREROUTING, POSTROUTING e OUTPUT.
f. Arrancar o computador com o novo kernel (não esquecer de criar uma nova
entrada no GRUB).

3. Configurar o iptables
a. Definir, numa folha ou num ficheiro de texto, quais são os protocolos
necessários para que um computador possa aceder a um servidor http
exterior à rede local (incluir também os portos usados e qual o sentido dos
pacotes, entrada ou saída)
b. Depois, de acordo com uma política de omissão “negar tudo”, configurar
as regras necessárias, para o iptables, para que o vosso computador possa
aceder à página http://www.netfilter.org. (Consulte o ficheiro iptables-
tutorial.pdf disponível no servidor 192.168.226.2)

4 Links de interesse
1. http://www.justlinux.com/nhf/Security/IPtables_Basics.html
2. http://iptables-tutorial.frozentux.net/iptables-tutorial.html

2003-2004 1s SI -  Miguel Frade 5

Você também pode gostar