De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: José Messias Alves da Silva
Data de Publicação: 01 de agosto de 2011
FireHOL foi projetado para permitir que um firewall seja configurado da mesma forma que se pensa implementá-lo.
Os arquivos de configuração FireHOL são muito fáceis de compreender e de escrever. Representam, na realidade, scripts BASH, onde ainda é possível incluir variáveis, pipes, loops, condições, chamadas para programas externos, executar outros scripts BASH, etc.
#apt-get install firehol
FireHOL está desabilitado por padrão, sendo necessário modificar o arquivo /etc/default/firehol
para ativá-lo, alterando
START_FIREHOL=NO
para
START_FIREHOL=YES
#yum install firehol
Habilitando FireHOL para ser iniciado durante o boot:
# chkconfig firehol on
Verificando se os serviços serão iniciados durante o boot:
# chkconfig --list | grep "iptables\|firehol" firehol 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
O arquivo de configuração que contém as regras de firewall está localizado em /etc/firehol/firehol.conf
, que, inicialmente, está definido para bloquear tudo que entra e aceitar tudo vai para fora.
Um firewall totalmente funcional pode ser configurado em um arquivo bem simples como:
#!/sbin/firehol version 5 interface any world protection strong server "ssh dns http" allow client all accept
Há basicamente quatro comandos:
Comandos client
e server
têm exatamente a mesma sintaxe. Já interface
tem dois argumentos obrigatórios e router
tem apenas um.
Todos os parâmetros opcionais são os mesmos para todos eles.
Assim, aprendendo a sintaxe de um comando, tem-se aprendido a dos demais.
Caso se esteja executando apenas serviços padrão, sugere-se apenas editar o arquivo.
Por outro lado, caso haja serviços personalizados, recomenda-se criar um arquivo de configuração, personalizá-lo, testá-lo e, por fim, colocá-lo em produção.
FireHOL pode gerar automaticamente um arquivo de configuração para posterior personalização.
O comando firehol helpme
identifica os serviços que estão rodando no servidor e cria um arquivo de configuração, que permite todo o tráfego entre eles e bloqueia todo o tráfego restante.
Depois que o arquivo é gerado, é necessário que se faça uma revisão e, eventualmente, modificações para garantir que as regras estão corretas.
# firehol helpme > /tmp/firehol.conf
O arquivo de configuração gerado automaticamente exibe itens que devem ser revisados. É possível renomear as interfaces para algo mais significativo, como "LAN" e "Internet".
Pode-se remover qualquer um dos serviços ("custom")
incluídos na regras. Para especificar um intervalo de portas, usa-se dois pontos ao invés de um traço.
Para especificar as portas TCP e UDP, usa-se uma lista delimitada por espaços, entre aspas.
FireHOL considera todas as requisições de entrada como requisições server
e todas as requisições de saída como requisições client
. Pode-se observar que há client accept all
em todas as partes do arquivo de configuração.
Dessa forma, todas as requisições de clientes a qualquer serviço são permitidos.
Caso se queira restringir as requisições a um determinado serviço, pode-se utilizar a regra:
client nome_servico allow
FireHOL, por padrão, vem com um grande número de serviços predefinidos, incluindo http
, https
, dhcp
, icmp
, samba
, snmp
, syslog
, telnet
, ssh
, entre outros.
Entretanto, caso o serviço não exista na lista de serviços FireHOL, é simples adicionar um.
Há duas maneiras para realizar essa tarefa. A primeira é usando a sintaxe de definição de serviço. Supondo que o serviço OpenVPN está rodando e seja necessário acesso irrestrito a porta do OpenVPN. Coloca-se as definições no início do arquivo de configuração:
server_openvpn_ports="tcp/1194" client_openvpn_ports="default"
Supondo ainda que, baseado no arquivo de configuração gerado, a interface de Internet é eth0
. Deve-se editar a configuração da interface eth0
, adicionando a seguinte linha:
server openvpn accept client openvpn accept
O segundo método, mais enxuto, é usando a sintaxe de definição de serviço em uma única linha na configuração da interface eth0
:
server custom openvpn "tcp/1194 udp/1194" default accept
Uma importante regra, comumente utilizada em muitos firewalls, é para executar redirecionamento de tráfego HTTP para um Proxy da rede local.
Supondo que já exista instalado e configurado corretamente um servidor proxy, basta editar o arquivo de configuração e acrescentar após a diretiva version
:
transparent_squid 3128 "proxy proxy" inface eth0
O comando transparent_squid
é equivalente ao comando transparent_proxy
e suas opções.
O mapeamento de requisições de uma máquina para um outra é conhecida como NAT - Network Address Translation. Basicamente, trata-se de alterar os endereços de origem e/ou destino dos pacotes IP que passam através de um roteador ou firewall. A maioria dos sistemas fazem uso de NAT, visando permitir que várias máquinas em uma rede privada tenha acesso à Internet usando um único endereço IP público. Entretanto, será demonstrado aqui como realizar um mapeamento reverso.
Supondo que haja um servidor web localizado na LAN, não possuindo qualquer endereço IP público, sendo, dessa forma, impossível acessá-lo através da Internet.
Assim, é possível utilizar o FireHOL para encaminhar as requisições destinadas ao firewall na porta HTTP (porta TCP 80
) para a máquina local.
Este tipo de configuração é freqüentemente implementada para segregar as máquinas em vários segmentos seguros, comumente denominada DMZ - DeMilitarized Zone.
Para exemplificar, consideremos que o endereço IP interno do servidor web seja 192.168.0.8
e o endereço IP público na máquina firewall (200.200.200.200
) usando a interface eth0
, e o segmento de rede local está conectado a interface eth1
do firewall.
Assim, toda requisição na interface com IP público sobre firewall eth0
será redirecionada para o servidor web interno em 192.168.0.8
.
Para realizar tal tarefa, adiciona-se a seguinte diretiva antes das definições de interface:
nat to-destination 192.168.0.8 proto "tcp" dport "80" dst 200.200.200.200/32
Para verificar a corretude do arquivo de configuração, basta executar o comando:
# firehol test /tmp/firehol.conf
Com o arquivo de configuração personalizado e testado, copia-se para o diretório de configuração:
# cp /tmp/firehol.conf /etc/firehol/firehol.conf
# Exige a release 5 das diretivas de configuração do FireHOL version 5 # Habilita proxy transparente transparent_squid 3128 "proxy proxy" inface eth0 # Redireciona requisições na porta 80 do endereço 200.200.200.200 para a máquina 192.168.0.8 nat to-destination 192.168.0.8 proto "tcp" dport "80" dst 200.200.200.200/32 # Bloqueia conexão de entrada a partir de um IP #blacklist this "201.201.201.201 202.202.202.202" # com aspas # Bloqueia conexão de entrada e saída a partir de/para um IP #blacklist full 203.203.203.203 204.204.204.204 # sem aspas interface "eth0" Internet # Ativa toda a proteção disponível para diversas formas de ataque protection strong # Servidores Publicos. server "ssh" accept # Configura e habilita um serviço específico não-padrão server custom openvpn "tcp/1194 udp/1194" default accept # Permite iniciar conexões a qualquer serviço, como uma estação de trabalho client all accept interface "eth1" LAN policy accept # A política padrão é "drop" client all accept # Rotea requisições da LAN para a Internet. router lan2internet inface "eth1" outface "eth0" client all accept # Rotea todas as requisições da interface de entrada para interface saída e suas respostas route all accept # Mascaramento da interface de saída. masquerade
Estando tudo pronto, basta iniciar o FireHOL:
#/etc/init.d/firehol start
É possível reduzir arquivos de configuração iptables bastante volumosos para poucas regras com FireHOL e obtendo os mesmos resultados, mantendo ao mesmo tempo segurança e funcionalidade.
Convém chamar a atenção para as diferenças entre regras para interface da rede interna e regras para interface de Internet. Esta dica não visa suprir todo o conteúdo necessário a construção de um firewall com FireHOL. Recomenda-se, sempre que necessário, consultar a lista completa de comandos da ferramenta, que se encontra em [http://firehol.sourceforge.net/commands.html].
A próxima dica abordará a administração de firewall iptables com Shorewall, para que os leitores possam avaliar e escolher o que melhor se adequa ao seu ambiente e ao seu aprendizado.
José Messias Alves da Silva é Matemático, Cientista da Computação pela UFPI, Especialista em Administração em Redes Linux, Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação do Tribunal Regional do Trabalho da 22ª Região. Entusiasta de soluções FOSS e ativista de cultura Hacker.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários