Iptables Firewall

O CentOS tem uma poderosa ferramenta de firewall nativo, normalmente conhecido como iptables firewall, porém o mais correto seria iptables/netfilter.

Iptables é um módulo a nível do usuário, o bit do usuário interage com a linha de comando que consta nas regras dentro das tabelas predefinidas.

O Netfilter é um módulo do kernel, que é o responsável pelo filtro.

Iptables Firewall
Iptables Firewall

Existem várias interfaces gráficas para o iptables firewall que permitem ao usuário, adicionar e definir regras, porém estas interfaces frequentemente não possuem a flexibilidade de uma linha de comando, além de limitar a compreensão do usuário, do que realmente esta acontecendo. Neste artigo iremos mostrar como funciona o iptables firewall através de linha de comando.

Antes de começarmos a pegar no batente, precisamos de uma compreensão de como o iptables firewall trabalha.

O iptables firewall utiliza o conceito de endereço IP, protocolos (TCP, UDP, icmp) e portas.

Você não precisa ser esperiente neste aspectos para começar a utilizar o iptables (podemos olhar de cima algumas informáções de que precisamos), porém ajuda se tiver uma noção geral do assunto.

Iptables firewall coloca as regras dentro das chains predefinidas (INPUT, FORWARD e OUTPUT) que são verificadas durante qualquer tráfego de rede (pacotes de IP) e dependendo da regra que estiver na chain o pacote pode ser aceito ou descartado.

Estas ações são denomidadas “alvos” e dentre eles, os mais comuns são: DROP (descarta o pacote) e ACCEPT (aceita o pacote).

Chains

Existem 3 chains predefinidas na taleba filter, ao qual se pode adiconar regras para processamento de pacotes de IPs que passem por estas chains. As chains são?

INPUT: Todos os pacotes destinados ao próprio host;

OUTPUT: Todos os pacotes originados no host;

FORWARD: Todos os pacotes que passam (são roteados) pelo host, mais usado quando se usa o host como um roteador.

Na maior parte, vamos nos ater a chain INPUT para filtrar pacotes entrando no host, mantendo os indesejáveis de fora.

As regras são adicionadas em uma lista para cada chain.

O pacote é checado dentro de cada regra, começando do início da lista, e se o pacote corresponder com alguma regra, uma ação é tomada, aceitando (ACCEPT), ou descartando (DROP) o pacote.

Depois que uma regra foi correspondida e executada a ação perante o pacote, este pacote não será processado por outras regras dentro da chain.

Caso um pacote não se aplique a nenhuma regra estipulada a ação padrão será executada neste pacote. Isto é denominada como “Política Padrão” e pode ser configurado para ACCEPT ou DROP.

O conceito de Políticas Padrão dentro da chain levanta duas possibilidades que devem ser levadas em consideração antes de decidir como será organizado o Firewall.

1) Podemos setar a Política Padrão para DROP e posteriormente inserir regras para permitir (ACCEPT) pacotes que sejam originados de IPs confiáveis, ou algumas portas que estejam rodando serviços específicos como bittorrent, serviços de FTP, WEB, SAMBA, etc;

2) Podemos setar a Política Padrão para ACCEPT e inserir regras para bloquear (DROP) pacotes específicos originados de alguns IPs ou range de IPs não confiáveis, ou algumas portas de serviços que não estejam sendo utilizados ou que sejam privados.

Geralmente a opção 1 é a utilizada na chain INPUT onde queremos controlar o que é permitido acessar na máquina e a opção 2 é mais utilizada na chain OUTPUT, onde geralmente confiamos no tráfego saindo (originada) da máquina.
Iniciando

Para trabalhar com iptables firewall em linha de comando, será preciso privilégios de root, então você terá que se logar como root para executar a maioria das coisas que iremos abordar.

Nota: Vamos desativar o firewall e resetar suas regras, então se você tem seu Firewall como principal linha de defesa você deve ficar ciente disto.

Instalação do Iptables Firewall

Iptables é instalado por default em todas as instalações do CentOS 3.x, 4.x e 5.x. Você pode checar se o iptables foi instalado no seu sistema com o comando:

#rpm -q iptables
iptables-1.3.5-1.2.1

E para verificar se esta realmente rodando, podemos checar se o módulo foi carregado e usar a opção -L para ver as regras que estão carregadas no momento.

# lsmod | grep ip_tables
ip_tables 29288 1 iptable_filter
x_tables 29192 6 ip6t_REJECT,ip6_tables,ipt_REJECT,xt_state,xt_tcpudp,ip_tables

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all — anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all — anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all — anywhere anywhere
ACCEPT icmp — anywhere anywhere icmp any
ACCEPT esp — anywhere anywhere
ACCEPT ah — anywhere anywhere
ACCEPT udp — anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp — anywhere anywhere udp dpt:ipp
ACCEPT tcp — anywhere anywhere tcp dpt:ipp
ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp — anywhere anywhere state NEW tcp dpt:ssh
REJECT all — anywhere anywhere reject-with icmp-host-prohibited

Acima, podemos ver o conjunto de regras padrão além do acesso ao serviço SSH

Se o iptables não estiver sendo executado, você pode habilitá-lo com:

# system-config-securitylevel

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *