Conhecendo o IPTables - Alguns Exemplos de Uso - Parte 3


Bom, agora que vimos como o iptables funciona e quais parâmetros e opções temos disponíveis para a implementação dele vamos fazer alguns testes pra ver na prática.

Antes de tudo, vamos limpar qualquer regra de firewall no servidor:

iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

Verifique se está tudo limpo com os comandos abaixo:

iptables -L -n
iptables -t nat -L -n

Agora vamos carregar os módulos:

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_gre
modprobe ip_conntrack
modprobe ip_conntrack_ftp

Vamos começar com um exemplo simples, bloquear o acesso ao serviço de SSH que por padrão usa a porta 22.

iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

Resporta do comando:

ssh: connect to host server port 22: Connection timed out

Note que o comando acima é bem simples, onde o iptables usa a tabela padrão (-t filter), faz a busca da opção a ser usada (-A INPUT), verifica os dados (-p tcp –dport 22), e por fim aplica a ação deseja, no caso bloqueando (-j DROP).

Quando realizamos um bloqueio a um determinado serviço ou porta, o cliente que tenta realizar o acesso simplesmente não sabe se trata de um bloqueio ou se o serviço está indisponível. Para isso temos uma opção chamado REJECT, que avisa o cliente com uma mensagem de erro (Connection refused), mostra a mensagem sem ficar tentando conectar no serviço.

Veja o exemplo com o uso do REJECT.

iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT

Resposta do comando:

ssh: connect to host server port 22: Connection refused

Para que fique mais fácil para praticar cada exemplo a ser seguido, limpe as regras de firewall.

Vamos a outro exemplo: Nesse exemplo vamos bloquear as requisições de ping.

iptables -t filter -A INPUT -p icmp -j DROP

Em uma maquina cliente da sua rede, faça o teste, tente pingar o servidor. Vai bloquear na Hora. Veja que seguimos a mesma estrutura do exemplo do SSH. Agora nosso teste vai partir para bloquear o acesso a internet aos clientes da rede. Nosso ambiente de teste é o seguinte:

Windows 10: IP: 10.106.0.50

Servidor CentOS 6.3 Firewall IP: 10.106.0.100

Primeiro precisamos habilitar o ip_forward para compartilhar a internet com os clientes.

echo 1 > /proc/sys/net/ipv4/ip_forward

Agora faça um teste em seu cliente para ver se ele acessa a internet. Se sim, está tudo certo, caso não verifique as configurações de rede.

Vamos fazer um teste bloqueando o acesso total a Internet aos clientes do Firewall. Analise o comando abaixo:

iptables -t filter -A FORWARD -s 10.0.0.0/8 -p tcp --dport 80 -j DROP

Bloqueando também a páginas HTTPS, muitos sites usam como Facebook, Hotmail, Gmail, etc.

iptables -t filter -A FORWARD -s 10.0.0.0/8 -p tcp --dport 443 -j DROP

Agora vamos ter como exemplo que toda nossa a rede é liberada pra acessar a qualquer site da Internet. Só não queremos liberar o Hotmail.

iptables -t filter -A FORWARD -s 10.0.0.0/8 -d www.hotmail.com -p tcp --dport 80 -j DROP
iptables -t filter -A FORWARD -s 10.0.0.0/8 -d www.hotmail.com -p tcp --dport 443 -j DROP

Agora vamos trabalhar com redirecionamento.

Muito simples, muito usado em firewall com Squid para direcionar a saída de acessos da porta 80 para 3128. Veja o exemplo:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT –to-port 3128
  • ’- t nat’ = Tabela
  • ’- A PREROUTING’ = Chain
  • -i eth0 = Entrada / Interface
  • -p tcp = Tipo de Protocolo
  • –dport 80 = Porta Origem
  • -j REDIRECT = Ação
  • –to-port 3128 = Porta Destino

Simples! Para o redirecionamento da porta 80 para 3128, o serviço squid deve estar configurado no servidor.

Até aqui vimos regras simples e básicas do iptables, com ele podemos montar diversas regras.

Vamos ver como podemos fazer um acesso a alguma maquina da rede local pelo IP Válido do Servidor. Primeiramente precisamos saber qual o serviço que essa maquina vai oferecer, por exemplo, Área de trabalho remota do Windows.

IP da Estação: 10.106.0.50 Porta da Conexão remota: 3389 IP Válido do Servidor: 200.200.100.100 Porta da Conexão remota do servidor: 8888

Passo 1: Vamos criar uma regra para tratar quando o pacote chega ao firewall.

Iptables -t nat -A PREROUTING -d 200.200.100.100 -p tcp --dport 8888 -j DNAT --to-dest 10.106.0.50:3389

O que essa regra tá fazendo ? Quando o pacote chega no IP 200.200.100.100, o firewall faz um NAT no pacote para que ele tenha um novo destino dentro da rede, que é o IP 10.106.0.50, mais isso só vai acontecer quando a porta for 8888.

Passo 2: O pacote já foi encaminhado, mais e depois disso, ele preciso de um retorno certo ? Veja abaixo:

iptables -t nat -A POSTROUTING -d 10.106.0.50 -p tcp --dport 3389 -j SNAT --to-dest 200.200.100.100:8888

Essa regra vai alterar a origem do pacote apontando para o firewall, para que seja feito o retorno da requisição.

Observação: Só não esqueça de que o encaminhamento de pacotes deve ser ativo.

echo 1 > /proc/sys/net/ipv4/ip_forward

Dúvidas? Postem nos comentários!
👋🏼 Até a próxima!


Johnny Ferreira
johnny.ferreira.santos@gmail.com
http://www.tidahora.com.br


comments powered by Disqus