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 são definidos 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 ao firewall e é utilizada 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 a 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 exceçã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 exceçõ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 exceções e direciona-os para o seu destino/origem finais.
Editar o arquivo
/etc/shorewall/rules e inserir:
##########################################
#AÇÃO ORIGEM DESTINO PROTO DESTINO ORIGEM
#SOLICITANTE TAXA USUÁRIO
# ZONA ZONA PORTA PORTA(S)
##########################################
# Aceita conexões 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, visite o
site oficial do Shorewall.
Este artigo foi originalmente publicado em meu blog, o
blog do Leandro Andrade - Oracle e Linux.