Shorewall – Firewall passo a passo no Linux

Autor: Eduardo Vieira Mendes <eduardovmendes at
gmail.com>

Instalação

Debian:

# apt-get install shorewall shorewall-doc

Copiar os arquivos da pasta
/usr/share/doc/shorewall/examples/two-interfaces/ para /etc/shorewall/:

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

Editar o arquivo /etc/default/shorewall e mudar a seguinte
linha:

startup=0

para:

startup=1

Obs.: Os desenvolvedores deixaram assim para que não inicie o shorewall
sem que este esteja configurado.

Outras distribuições:

Entrar no site do Shorewall,
fazer o download dos seguintes arquivos:

Shorewall-common: shorewall-common-4.2.4.tar.bz2

Shorewall-perl (compilador escrito em perl): shorewall-perl-4.2.4.6.tar.bz2

* Existe também o Shorewall-shell (compilador escrito em bash), mas
abordarei a instalação apenas da versão em Perl por ser mais rápida.

Descompactar o shorewall-perl:

# tar -xvjf shorewall-perl-4.2.4.6.tar.bz2

Entrar na pasta descompactada:

# cd shorewall-perl-4.2.4.6

Rodar o comando:

# ./install.sh

Descompactar o shorewall-common:

# tar -xvjf shorewall-common-4.2.4.tar.bz2

Entrar na pasta descompactada:

# cd shorewall-common-4.2.4

Rodar o comando:

# ./install.sh

Pronto, seu shorewall já está instalado!

Vamos às configurações.

Configurando o Shorewall

Debian:

Vamos editar o arquivo /etc/default/shorewall e alterar a
seguinte linha:

startup=0

para:

startup=1

Os desenvolvedores adicionaram uma verificação para que o shorewall não
fosse automaticamente iniciado sem estar devidamente configurado.

A partir daqui as configurações são praticamente as mesmas para todas as
distribuições. Será especificado no texto se houver algo diferente.

Vamos editar o arquivo /etc/shorewall/shorewall.conf e alterar a
seguinte linha:

STARTUP_ENABLED=No

para:

STARTUP_ENABLED=Yes

E também:

SHOREWALL_COMPILER=

para:

SHOREWALL_COMPILER=perl

Vamos copiar os arquivos de exemplo para a pasta /etc/shorewall:

Debian: /usr/share/doc/shorewall-common/examples/two-interfaces:

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

Código fonte: ./shorewall-common-4.2.4/Samples/two-interfaces:

# cp ./shorewall-common-4.2.4/Samples/two-interfaces/*
/etc/shorewall/

O arquivo zone

Agora vamos editar o arquivo /etc/zone, o qual define os tipos
de zonas da nossa rede.

# vim /etc/shorewall/zone

####################################################################
#ZONA TIPO OPÇÕES ENTRADA SAÍDA
OPÇÕES OPÇÕES

fw      firewall
net     ipv4
loc     ipv4
# NUNCA REMOVER ESTA LINHA

Breve explicação:

  • fw – Zona correspondente ao Firewall e é utilizada para definir
    regras para o mesmo;
  • net – Zona correspondente a wan (internet);
  • loc – Zona correspondente à sua rede local.

O Shorewall faz controle de final do arquivo pela última linha
comentada. Não a remova.

O arquivo interfaces

Neste arquivo definimos as nossas interfaces de rede.

# vim /etc/shorewall/interfaces

#######################################################
##
#ZONA INTERFACE BROADCAST OPÇÕES
loc eth0 detect
net eth1 detect dhcp
#NUNCA REMOVA ESTA LINHA

Breve explicação:

  • ZONA: loc – Nome da zona a qual a interface pertence;
  • INTERFACE: eth0 – Interface;
  • BROADCAST: detect – Detectar automaticamente o endereço de
    broadcast. Pode ser especificado o endereço. Ex. 192.168.0.255.

Opções: dhcp – Configurado quando a interface recebe IP por dhcp, quando
a interface é utilizada por um servidor DHCP instalado no servidor
firewall, quando a interface tem um IP estático, mas está num segmento
da rede onde tem clientes dhcp ou quando a interface trabalha como
"bridge" (servidor DHCP em um lado e clientes DHCP em outro.

Se não sabe como está sua rede, deixe esta opção ligada.

Existem outras opções para se configurar, como por exemplo: arp_filter,
arp_ignore, blacklist, logmartians, maclist, nosmurfs, tcpflags,
entre outros.

Para verificar estas e outras configurações das interfaces, rode o
comando:

$ man shorewall-interfaces

O arquivo masq

Para que o servidor firewall funcione como um reteador e
permita a passagem de pacotes entre as zonas LOC e NET, é necessário
ativar o encaminhamento (forward) e o mascaramento (postrouting) entre
as suas respectivas interfaces.

Vamos então editar o arquivo /etc/shorewall/masq da seguinte
maneira:

# vim /etc/shorewall/masq

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

# NUNCA REMOVER ESTA LINHA

Breve descrição:

Em primeiro lugar vem a sua interface externa, e sem segundo a sua
interface interna.

O arquivo policy

Será neste arquivo que definiremos quais são as politicas padrões a
serem seguidas pelo firewall, ou seja, se um pacote (requisição) passar
por toda a regras que vamos definir mais à frente, será aplicado esse
conjunto de regras padrões.

# vim /etc/shorewall/policy

## Política de tráfego originado pelo firewall
# Se você quiser deixar que o seu servidor
firewall tenha acesso livre a rede externa pode deixar

# essa opção como ACCEPT e retirar a opção de
logar "info".

# Pode ser útil se você roda um servido proxy
neste firewall

#$FW net REJECT info
# Rejeita tráfego do firewall para a internet

#$FW loc ACCEPT
# Aceita tráfego do firewall para a sua rede
interna

# Não aceita todas as outras redes/conexões que
não se encaixam nos parâmetros acima

#$FW all REJECT info

## Politica de trafego originado na sua lan
(interface loc)

# Se você quer forçar suas estações a se
conectarem através de um proxy

# no seu firewall, mude esta opção para REJECT e
adicione a opção de log (info)

# Aceita tráfego da sua rede para a internet
#loc net ACCEPT

# Aceita tráfego da sua rede para o firewall
#loc $FW ACCEPT

# Não aceita todas as outras redes/conexões que
não se encaixam nos parâmetros acima

#loc all DROP info

## Política de tráfego regado da internet.

# Não aceita nenhuma conexão originada na
internet para o seu firewall

#net $FW DROP info

# Não aceita conexões originadas na internet
pra a sua rede local

#net loc DROP info

# Não aceita todas as outras redes/conexões que
não se encaixam nos parâmetros acima

#net all DROP info

# Esta regra deve ser a última
# Não aceita todas as outras redes/conexões que
não se encaixam nos parâmetros acima

all all REJECT info

# ULTIMA LINHA – NUNCA REMOVA

Notem que está quase tudo comentado no meu policy, isto porque bloqueio*
tudo e depois venho desbloqueando somente o necessário.

Caso queira pode apenas descomentar as opções que queira usar.

* Suposto bloqueio – na verdade é definido no arquivo rules tudo o que
deve passar ou ser bloqueado, somente depois é aplicada as regras do
arquivo policy.

O arquivo rules – seu fiel escudeiro

No arquivo de regras é que vamos definir o que pode e o que não pode
passar em nosso firewall.

Vou deixá-lo todo comentado para melhor entendimento, não fazendo assim a
seção "Breve descrição" deste arquivo.

# vim /etc/shorewall/rules

#########################################
#AÇÃO ORIGEM DESTINO PROTO DESTINO ORIGEM
SOLICITANTE

# TAXA USUÁRIO ZONA ZONA PORTA PORTA(S)
##########################################

# Opção para redirecionamento para o servidor
proxy

REDIRECT loc 3128 tcp www
ACCEPT $FW net tcp www

# Liberar máquinas a sair totalmente da rede
ACCEPT loc:192.168.0.65 net

# Aceita conexões DNS vindas do firewall para a
rede

DNS/ACCEPT $FW net

# Liberar servidor smtp
SMTP/ACCEPT net $FW

# Liberar servidor pop
POP3/ACCEPT loc $FW

# Liberar conexão ssh
SSH/ACCEPT loc $FW

# Permite Ping vindos da zona "loc" para a rede
Ping/ACCEPT     loc             $FW
Ping/DROP       net             $FW
ACCEPT          $FW             loc             icmp
ACCEPT          $FW             net             icmp

# Abrindo portas
ACCEPT loc $FW tcp 5222 # Servidor Openfire

# Redirecionando conexões
# Tipo Origem zona:endereço:porta-destino
protocolo porta-origem

DNAT net loc:192.168.0.1:10002 tcp 10002
DNAT net loc:192.168.0.1:50000 tcp 20020
DNAT net loc:192.168.0.10:1234 tcp 1234

# ULTIMA LINHA – NUNCA REMOVA

Utilizando macros

O Shorewall disponibiliza macros (conjunto de regras) que
podemos usar para liberar ou bloquear alguma conexão.

No arquivo rules deste artigo fiz uso dos seguintes macros:

  • POP3
  • SMTP
  • SSH
  • DNS
  • Ping

Os arquivos de macros podem ser encontrados na pasta
/usr/share/shorewall/.

A sintaxe de sua utilização é a seguinte:

macro/ação opções

Ex:

SSH/ACCEPT net $FW

Neste exemplo nosso firewall vai aceitar as conexões vindas da internet
ao nosso servidor ssh.

Agora vamos configurar o arquivo /usr/share/shorewall/macro.SSH.

# vim /usr/share/shorewall/macro.SSH

####################################################################
#AÇÃO ORIGEM  DESTINO  PROTOCOLO  
DEST    SOURCE  RATE    USER    PORTA(S) PORTA(S) LIMITE  

GRUPO
PARAM   –       –       tcp     10010
#ÚLTIMA LINHA – NÃO REMOVER

Neste caso, digitar:

SSH/ACCEPT nte $FW

Seria o mesmo que:

ACCEPT       net           $FW           tcp     10010

Podemos economizar comandos utilizando os macros.

Exemplo 2:

SMB/ACCEPT   loc           $FW

Seria o mesmo que digitar:

ACCEPT       loc           fw           udp     135,445
ACCEPT       loc           fw           udp     137:139
ACCEPT       loc           fw           udp     1024:   137
ACCEPT       loc           fw           tcp     135,139,445

Conclusão

As possibilidades de configuração do arquivo rules é imensa,
assim como as necessidades de cada administrador.

Ainda existem vários tipos de controle, como por exemplo port_knocking
(sistema que consiste em você "bater" (fazer conexão em certas portas,
para só então o sistema liberar uma conexão), controle de banda por ip,
entre outros que podem ser configurados utilizando o Shorewall.

Estude um pouco mais sobre o Shorewall e você vai ver o quão fácil é
para se criar um firewall robusto e confiável com um mínimo de
conhecimento sobre IPTABLES.

Referências:


http://www.vivaolinux.com.br/artigo/Shorewall-Firewall-passo-a-passo-no-Linux

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s