sábado, 11 de outubro de 2008

Shorewall, uma excelente opção para firewall Linux

Este artigo é direcionado àqueles que desejam implementar o Shorewall como interface de configuração de regras de Iptables. O Shoreline, mais conhecido como Shorewall, possibilita uma configuração mais organizada e rápida do seu firewall. O servidor utilizado neste artigo é um Debian Etch 4.

Vamos ao que interessa!

Instalar os pacotes

# apt-get install shorewall shorewall-doc


Copiar os arquivos de exemplo para o diretório de configuração do shorewall

# cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall/.


Uma rápida explicação de cada arquivo de configuração, para uma implementação simples de firewall.

Zones

Neste arquivo é definido os tipos de zonas de sua rede. Os três tipos de zonas mais utilizados são:

loc – Define a zona local. Será utilizado para definir regras para a rede local.

net – Define a zona de Internet. Será utilizado para definir regras para o link de dados.

dmz – Define a zona delimitada.

A variável FW já é uma zona declarada implicitamente. Essa zona corresponde-se ao firewall e é utilizado para definir regras para o mesmo.

Editar o arquivo /etc/shorewall/zones e inserir a seguinte configuração:

################################################################
#ZONE TYPE OPTIONS IN OUT
################################################################
net ipv4
loc ipv4

# NUNCA REMOVER ESTA LINHA

Obs.: A zona FW não precisa ser definida, pois como já disse é implicitamente definida.


Interfaces

Neste arquivo são atribuídas zonas às interfaces de rede. Antes de tudo deverá existir uma estrutura de rede. Neste artigo estou utilizando eth0 para Internet (DHCP) e eth1 para rede local (IP STATIC).

Editar o arquivo /etc/shorewall/interfaces e inserir:

#########################################################
#ZONE INTERFACE BROADCAST OPTIONS
#########################################################
net eth0 detect dhcp,tcpflags
loc eth1 detect tcpflags,detectnets,nosmurfs

# NUNCA REMOVA ESTA LINHA


Masq

Mais conhecido como masquerade (mascaramento de rede) o masq define as máscaras de rede e ordem que elas serão apresentadas. Usado por servidores que servem como gateway para rede local.

Editar o arquivo /etc/shorewall/masq e inserir:

##################################################################
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
##################################################################
eth0 eth1

# NUNCA REMOVER ESTA LINHA


Policy

Toda política da rede é definida nesta zona. Antes de executar qualquer regra de excessão definida na zona rules (próximo tópico), o Shorewall utiliza as regras globais definidas nesta zona para só então dar prosseguimento às excessões.

Editar o arquivo /etc/shorewall/policy e inserir:

#
# Policies for traffic originating from the firewall ($FW)
#
# If you want open access to the Internet from your firewall, change the
# $FW to net policy to ACCEPT and remove the 'info' LOG LEVEL.
# This may be useful if you run a proxy server on the firewall.
$FW net ACCEPT # LINHA 1
$FW loc ACCEPT # LINHA 2
$FW all REJECT info # LINHA 3

# Policies for traffic originating from the local LAN (loc)
#
# If you want to force clients to access the Internet via a proxy server
# on your firewall, change the loc to net policy to REJECT info.
loc net REJECT info
loc $FW REJECT info
loc ipsec ACCEPT
loc all DROP info

#
# Policies for traffic originating from the Internet zone (net)
#
net $FW DROP info
net loc DROP info
net all DROP info

# THE FOLLOWING POLICY MUST BE LAST
all all REJECT info


# ULTIMA LINHA - NUNCA REMOVA


Uma breve explicação de algumas linhas do conf policy:

LINHA 1 - Todas as requisições do firewall para a internet serão aceitas.
LINHA 2 - Todas as requisições do firewall para a rede local serão aceitas.
LINHA 3 - Todas as requisições do firewall para todos os outros lugares serão rejeitados e devidamente catalogado em log. Por isso o "info" ao final da linha.

As opções de ações usadas nas zonas policy e rules são:

ACCEPT - Aceita pacotes/requisições
REJECT - Rejeita pacotes/requisições e retorna mensagem de rejeição
DROP - Elimina pacotes/requisições e não retorna mensagem alguma

Rules

Nesta zona são definidas as regras finais para o destino e origem de cada pacote/requisição. Após terem passados pelas regras da zona policy, o firewall trata os pacotes com essas excessões e direciona-os para o seu destino/origem finais.

Editar o arquivo /etc/shorewall/rules e inserir:

##################################################################
#ACAO ORIGEM DESTINO PROTO DESTINO ORIGEM
#SOLICITANTE TAXA USUARIO
# ZONA ZONA PORTA PORTA(S)
##################################################################

# Aceita conexoes DNS vindas do firewall para a rede
#
DNS/ACCEPT $FW net

# Permite Ping vindos da "zone loc" para rede
#
Ping/ACCEPT loc $FW
Ping/ACCEPT loc loc

# Rejeita ping vindo da "zone net" batizados como "maus"...
#
Ping/ACCEPT net:200.200.200.00 $FW
Ping/DROP net $FW

ACCEPT $FW loc icmp
ACCEPT $FW net icmp

# Abrindo portas
#
ACCEPT net $FW tcp 22 # SSH
ACCEPT net $FW tcp 9000 # SSH
ACCEPT net $FW tcp 8080 # Tomcat6
ACCEPT net $FW tcp 9100 # Apache2
ACCEPT net $FW tcp 80 # Apache2
ACCEPT net $FW tcp 1521 # Oracle_Listener
ACCEPT net $FW tcp 10000 # Webmin
ACCEPT net $FW tcp 1158 # OEM

# Redirecionando conexões
# Neste exemplo estou direcionando uma requisição vinda da internet
# e direcionando-a para a rede local no IP 192.168.27.2 na porta 4899
#
DNAT $FW loc:192.168.27.2:4899 tcp 1158

# ULTIMA LINHA - NUNCA REMOVA

Esta foi uma breve explicação de como utilizar o Shorewall como firewall. Para quem deseja aprofundar-se neste software e implementar as outras diversas funcionalidades dele, o site oficial é
http://www.shorewall.net/

3 comentários:

Anônimo disse...

Amigo, muito bom o conteúdo, mas o que quer dizer o 1158 em: DNAT $FW loc:192.168.27.2:4899 tcp 1158 ???

Anônimo disse...

Opa, obrigado!

Essa regra quer dizer:

Transferir (DNAT) todas as conexões que entram no firewall ($FW) na porta 1158 para a rede local (loc) no ip 192.168.27.2 na porta 4899. Ou seja, se alguém quizer acessar uma maquina da rede interna, como por exemplo via Radmin, é feita essa regra.

Anônimo disse...

o que eu estava procurando, obrigado