Firewall
Firewall
Um Firewall tem por objetivo aplicar políticas de segurança no acesso a um rede ou servidor. O firewall pode ser do tipo filtros de pacotes, atuando no nível da camada IP, ou Servidor Proxy, atuando no nível das aplicações.
Firewall com Iptables
O Iptables é uma ferramenta que permite implementar regras para firewall, disponível em todas as distribuições Linux.
O Iptables normalmente já vem instalado no Ubuntu.
As páginas man fornecem referência para utilizar o comando iptables para construir regras para filtros de pacotes':
man iptables
Para verificar as regras existentes, pode utilizar o comando:
sudo iptables -L
- Parâmetro: -L (lista regras).
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
- Cada Chain é um conjunto de regras utilizadas para filtrar pacotes. Por default há três grupos de regras: INPUT (pacotes destinados ao Socket local), FORWARD (pacotes a serem roteados) e OUTPUT (pacotes originados localmente), todas com a política ACCEPT (aceitar) como padrão. Observa-se também o cabeçalho de cada coluna que formam as regras: target (alvo), prot (protocolo), opt (opções), source (fonte) e destination (destino).
Exemplos de filtros de pacotes TCP e UDP
Referência: [1].
1) Exemplo de regra que pode ser utilizada em um computador desktop conectado a Internet para ignorar conexões vindas em qualquer porta TCP:
- Execute a regra no seu Servidor:
sudo iptables -A INPUT -p tcp --syn -j DROP
- Parâmetros: -A (adiciona), -p (rotocolo), -j (que fazer com o pacote).
- Verifique o resultado com:
sudo iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN
- Teste o acesso ao servidor Web de seu servidor;
- Elimine a regra com o comando:
sudo iptables -D INPUT -p tcp --syn -j DROP
- Parâmetro: -D (deleta).
- Teste novamente o acesso ao servidor Web.
2) Exemplo de regra que permite aos computadores da rede interna de se conectar normalmente, mas bloqueia tudo que vem da Internet em qualquer porta TCP ou UDP:
sudo iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT sudo iptables -A INPUT -p tcp --syn -j DROP sudo iptables -A INPUT -p udp -j DROP
3) Regra equivalente a anterior, mas aceita conexões SSH:
sudo iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT sudo iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT sudo iptables -A INPUT -p tcp --syn -j DROP sudo iptables -A INPUT -p udp -j DROP
- Sequência de análise das regras
- O Iptables processa os comandos em sequência, regra por regra. Se um pacote vem para a porta 22 ele é aceito antes de ir para as demais regras. Se não passou pela primeira regra mas vem de um dos endereços da rede local é imediatamente aceito. Os demais vão para as duas últimas regras e acabam recusados [1].
Todas as regras podem ser eliminadas com o comando:
sudo iptables -F
- Parâmetro: -F (deleta todas as regras).
Exemplo de filtro de pacotes ICMP
Pacotes do Protocolo ICMP são utilizados por aplicativos importantes para a administração de redes, como o ping e o traceroute. Também servem para enviar mensagens de erro e controle entre hosts e roteadores, alertando sobre anormalidades no funcionamento do roteamento e da rede, informando situações como destino inalcançável, redirecionamentos, esgotamento de tempo, etc. Portanto, o bloqueio de pacotes ICMP deve ser evitado, ou realizado com critério.
- Filtro de ICMP ping
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Configuração do NAT no Linux
O NAT é um mecanismo que possibilita a uma rede local usar apenas um endereço IP público no que concerne ao mundo exterior e utilizar endereços IP privados no que concerne a rede interna.
O NAT no Ubuntu se configura com iptables com os seguintes comandos:
modprobe iptable_nat iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
- O primeiro comando ativa o NAT no módulo iptables.
- O segundo comando define a regra para fazer com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface eth1 deve ser mascarado com o endereço IP dessa interface [2].
Utilizamos o iptables para ativar o NAT no módulo Rede e Roteamento.
Proxy transparente com Iptables
Um Servidor Proxy isolado, montado com Squid, além da configuração do servidor é necessário configurar cada um dos navegadores e outros programas que vão acessar a Internet via servidor Proxy.
Com o Iptables é possível construir um Proxy transparente, evitando que seja necessário informar no navegador o endereço do servidor e a porta.
Exemplo de configuração de roteador com firewall e proxy
Roteador com Firewall (Iptables) e Proxy (Squid) servindo a rede local com IP privado 192.168.0.0/16 pela interface Eth0 e acesso a Internet com IP público 200.17.101.10 pela interface Eth1:
Passos para a configuração:
- Configurar Squid para funcionar em modo transparente;
- Configurar o servidor como roteador NAT;
- Configurar o Iptables para encaminhar toda requisição HTTP para porta 3128.
Referência: [3]
- Configuração do Squid
- Arquivo /etc/squidw/squid.conf:
# TAG: http_port http_port 3128 transparent # TAG: acl # ... # Demais regras de acesso acl do Firewall
- Configuração do servidor como roteador NAT
- Setar para que o servidor encaminhe pacotes:
echo 1 > /proc/sys/net/ipv4/ip_forward
- Configurar NAT com Iptables de forma a mascarar pacotes vindos da interface Eth0 (rede local) e saindo pela interface Eth1 (Internet) como o endereço desta interface:
modprobe iptable_nat iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth1 -j MASQUERADE
- Configuração do Iptables
- Adicionar regras para que toda requisição HTTP (vindo da porta 80) seja redirecionada o Squid, na porta 3128:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:3128 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Referências
- ↑ 1,0 1,1 MORIMOTO, C. E. Seridores Linux: Guia prático, Sul Editores, Porto Alegre, 2013.
- ↑ VALLE, O. T. Gerência de Redes, Diário Aula, 2014. http://wiki.sj.ifsc.edu.br/wiki/index.php/GER20706-2014-1
- ↑ GITE, V. Linux: Setup a transparent proxy with Squid in three easy steps, nixCraft, 2006. http://www.cyberciti.biz/tips/linux-setup-transparent-proxy-squid-howto.html
--Evandro.cantu (discussão) 10h01min de 23 de fevereiro de 2016 (BRT)