Firewall (iptables)
Quanto mais tempo ficamos conectados à internet, maiores são as chances de sermos invadidos ou infectados por malwares. Pois a versão atualmente em uso da pilha de protocolos TCP/IP, não foi projetada para assegurar a integridade das informações e realizar o controle de acesso apropriado. Deste modo, a forma preferida de se violar uma rede tem sido o uso de pequenas falhas na implementação de serviços e protocolos baseados no TCP/IP.
O papel do Firewall no contexto atual das redes de computadores
A principal função de um firewall é proteger os dados da rede interna, aquela que não está conectada a internet, de ataques vindos da rede externa, normalmente a internet. Ou seja, tem por objetivo impedir acessos lógicos não autorizados a um determinado ambiente.
O firewall geralmente é a única máquina diretamente conectada a rede externa, mas cada nó da rede pode e deve ter seu próprio firewall ativo, mas neste caso sua funcionalidade está restrita a proteção local, incluindo possíveis infecções e proliferações de malwares na rede interna.
Outro uso freqüente dos firewalls é ser utilizado para filtrar quem pode acessar máquinas da rede interna a partir da internet, este tipo de filtragem normalmente é baseada no endereço IP a origem da conexão e em alguns casos em seu Mac Adress.
Tipos de Firewall
Existem várias classificações para os firewalls, as mais comuns são: Filtro de Pacotes, Firewall NAT e Híbridos.
Todos os tipos de firewall possuem suas limitações, o de nível de rede possui uma visão muito limitada do que realmente acontece na rede. Já os gateways de aplicativo tem um conhecimento maior sobre a aplicação, porém são soluções específicas para cada aplicativo. Um dos firewalls de aplicativos mais conhecido é o SQUID, que foi projetado para manipular os protocolos HTTP, HTTPS e FTP.
IPTABLES: O firewall do Linux
Este software é a quarta geração de firewall no Linux e permite a realização da filtragem dos pacotes nas sete camadas da RM/OSI, funcionando ainda como um firewall híbrido. As ACL utilizados por ele estão todas armazenadas em memória, processo este que acelera os mecanismos de filtragem e redirecionamento.
O iptables é um dos poucos firewalls em software totalmente implementado no kernel do sistema operacional, garantindo assim maior nível de segurança a filtragem.
As tabelas do iptables
Para facilitar seu funcionamento e sua gerencia o iptables divide as ACLs em tabelas, cada qual com um função específica. As principais tabelas do iptables são:
filter : responsável pela filtragem de todos os pacotes que passam pelo host, não importando origem e destino;
nat : responsável pelo controle dos pacotes que passam pelo host, mas cuja origem ou destino não é o mesmo. Esta tabela é utilizada quando desejamos utilizar o iptables para construir “gateways” de borda.
mangle : permite alterar características específicas do pacote, como por exemplo: o TOS (Tipo de Serviço) o que permite implementar um sistema simples de QOS ( qualidade de serviço).
Fluxos do iptables
O iptables permite manipular vários fluxos dependendo da tabela utilizada, sendo que a tabela “filter” possui os seguintes:
INPUT : fluxo formado pelos pacotes cujo endereço de destino é o próprio host;
OUTPUT : fluxo dos pacotes originados pelos aplicativos e serviços hospedados no host;
FORWARD: fluxo composto por todos os pacotes que chegam ao host mas que são
destinados a outra máquina, que normalmente está na rede interna ou na DMZ. Logo este fluxo é utilizado para permitir a realização do NAT;
A tabela “nat” por sua vez possui os seguintes fluxos:
PREROUTING : que permite realizar alterações nos pacotes antes que eles sejam roteados;
POSROUTING : permite manipular os pacotes após seu processo de roteamento;
OUTPUT : possibilita o redirecionamento dos pacotes que foram emitidos pelo host;
Já a tabela “mangle” possui os fluxos: PREROUTING E OUTPUT.
Comandos do iptables
Para a manipulação das ACLs armazenadas nas suas tabelas o iptables fornece os seguintes
comandos:
-A : adiciona uma nova regra no final da lista de regras de uma dada tabela;
-L : lista todas as regras de uma determinada tabela;
-P : define a política padrão uma tabela, ou seja a regra padrão que será aplicada a um
fluxo quando ele passar por todas as demais;
-F : remove todas as regras de uma tabela sem alterar sua política padrão;
-N : cria nova nova “chain” na tabela especificada;
-X : apaga todas as “chains” de uma determinada tabela;
Ações do iptables
As ações permitem categorizar melhor as ACLs, fornecendo um tratamento mais detalhado sobre quais pacotes deverão ser manipulados. As principais ações fornecidas pelo iptables são listadas abaixo:
-p : especifica qual protocolo será manipulado (TCP, UDP ICMP, etc..);
-i : especifica a interface pela qual o pacote deve entrar (eth0, eth1, ppp0, ppp+);
-o : especifica a interface pela qual o pacote deve sair (eth0, eth1, ppp0, ppp+);
-s : informa a origem do pacote, este valor pode ser um endereço ip (192.168.254.23), pode ser uma classe ip (192.168.254.254/24), pode ser um nome de maquina (ftp.marcosfroes.com) ou um domínio ( marcosfroes.com );
–sport : informa a porta a partir da qual o pacote será enviado, porta de origem;
-d : informa o destino do pacote;
–dport : informa a porta de destino do pacote;
-j : informa o de deve ser feito com o pacote, ou seja o alvo da regra.
Alvos da regras
Quando um fluxo se enquadra em todos os quesitos especificados por uma regra, ele poderá entrar na máquina, ser rejeitado ou outras ações poderão ser realizadas, a estas ações damos o nome de alvo da regra ou fluxo. Os principais alvos implementados pelo iptables são:
ACCEPT : permite a entrada ou a saída ou o forward do pacote;
DROP : descarta o pacote, sem comunicar a origem que o mesmo foi rejeitado, ideal para ocultar a existência do firewall;
REJECT : descarta o pacote informando a origem que ele foi rejeitado pelo destino;
LOG : registra o pacote em um arquivo de log que pode ser especificado através dos níveis de log do sistema, mas por default as mensagens são enviadas para o arquivo “/var/log/messages”;
SNAT : altera o endereço de origem do pacote que atendeu as características especificadas;
DNAT : altera o endereço de destino do pacote;
REDIRECT : redireciona o pacote para uma porta diferente.
Exemplos de scripts de Firewall
=> Firewall para bloquear todo o fluxo de dados só liberando o fluxo na interface lo
= = = = = = = = = = = = = =
# definindo as regras padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#
# liberando a interface lo
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
= = = = = = = = = = = = = =
=> Firewall para liberar o acesso serviço http, para acesso externo ( eth1) e acesso pela intranet (eth0) na porta 8080.
= = = = = = = = = = = = = =
# definindo as regras padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
# definindo as regras de filtragem ao HTTP e HTTPS
#
iptables -A INPUT -p tcp -dport 80 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -i eth0 -j ACCEPT
= = = = = = = = = = = = = =
=> Firewall para um servidor que hospeda os serviços: http (80), https (443), imap (143), pop3 (110), smtp (25), ftp (21), ssh (22). De tal modo que, todos os serviços possam ser acessados pela intranet (eth1) e os únicos serviços que podem ser acessados pela internet (eth0) são o http e o https.
= = = = = = = = = = = = = =
# definindo as regras padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
# liberando acesso pela internet (eth0)
#
iptables -A INPUT -p tcp -dport 80 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -i eth0 -j ACCEPT
#
# liberando acesso pela internet (eth1)
#
iptables -A INPUT -p tcp -dport 80 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 143 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 110 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 25 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 21 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 22 -i eth1 -j ACCEPT
= = = = = = = = = = = = = =
=> Firewall para um servidor que: proiba que qualquer pacote oriundo de nossa LAN (192.168.254.0/24) possa ser direcionado ao site “www.topfotos.com”; permitir a entrada de pacotes oriundos do site “www.orkut.com” na nossa rede; todos os pacotes oriundos da interface “eth1″ do firewall devem ser redirecionados para o computador 192.168.254.254; descarte todos os pacotes oriundos do ip 200.255.96.171 e destinado ao IP 192.168.254.7; todos os pacotes destinados à porta 23 do nosso firewall sejam registrados e posteriormente descartados. Exemplo:
= = = = = = = = = = = = = =
# política padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
# liberando o tráfego na interface lo
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#
# pacotes que entram no firewall
#
iptables -A INPUT -p tcp – -dport 23 -j LOG ” [firewall] acesso ao serviço de telnet”
iptables -A INPUT -p tcp – -dport 23 -j DROP
#
# regras de forward
#
iptables -A FORWARD -s 192.168.254.0/24 -d www.topfotos.com -j DROP
iptables -A FORWARD -d 192.168.254.0/24 -s www.orkut.com -j ACCEPT
iptables -A FORWARD -s 200.255.96.171 -d 192.168.254.7 -j DROP
iptables -A FORWARD -i ! eth1 -j DROP
iptables -A FORWARD -o ! eth0 -j DROP
#
= = = = = = = = = = = = = =
Firewall para compartilhamento do Acesso a Internet
= = = = = = = = = = = = = =
# libera forward no kernel
#
echo “1″ > /proc/sys/net/ipv4/ip_forward
#
# Política padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
# liberando acesso a interface lo
#
iptables -A INPUT -i lo -J ACCEPT
#
# libera a entrada de conexões iniciadas pela máquina
#
iptables -A INPUT -m state – -state ESTABLISHED,RELATED -j ACCEPT
#
# bloqueia entrada na rede de conexões inválidas
#
iptables -A FORWARD -m state – -state NEW,INVALID -j DROP
#
# hablitando o macascaramento com ip dinâmico
#
iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o eth0 -j MASQUERADE
#
# libera a entrada de conexões iniciadas pela rede
#
iptables -A FORWARD -o eth0 -m state – -state ESTABLISHED,RELATED -j ACCEPT
#
# habilita o forward vinda da rede interna
#
iptables -A FORWARD -i eth1 -s 192.168.254.0/24 -J ACCEPT
= = = = = = = = = = = = = =
