Páginas

PESQUISAR

14 de fevereiro de 2019

Introdução ao IPTABLES



Iptables é o nome da ferramenta da interface do usuário que permite a criação de regras de firewall e NATs. Apesar de, tecnicamente, o iptables ser apenas uma ferramenta que controla o módulo netfilter, o nome "iptables" é frequentemente utilizado como referência ao conjunto completo de funcionalidades do Netfilter.

O iptables é parte de todas as distribuições modernas do Linux.

AS 3 PRINCIPAIS TABELAS DO IPTABLES:

Dentro da estrutura do iptables podemos destacar 3 camadas (também chamadas “tabelas”) como as mais importantes para o seu funcionamento: filter, NAT e mangle.

Elas servem para organizar as regras de acordo com sua estrutura, isto é, as tabelas  e as cadeias nelas inseridas determinarão os pacotes aos quais as regras serão aplicadas.
As tabelas possuem funções distintas, conforme veremos a seguir.

1. FILTER 
As regras contidas na tabela filter determinam a aceitação (ou não) de um pacote, portanto, estamos falando da tabela básica do iptables cujas regras podem ser usadas de modo geral. Dentro dessa camada existem três cadeias:
INPUT – nele somente os pacotes destinados ao IP do computador em questão são avaliados pelas regras, caso elas existam;

OUTPUT – os pacotes avaliados dentro desta regra se limitam aos processos locais do computador;

FORWARD – aqui somente os pacotes repassados pela máquina são avaliados, ou seja, pacotes que não provém dela e nem são destinados a ela.

Quanto às ações que a tabela filter pode aplicar, temos as opções:

REJECT – é aplicada ao pacote correspondente às regras. Quando isso acontece, todas as outras eventuais regras são ignoradas e o pacote é descartado;

ACCEPT – diferentemente do REJECT, esta ação consiste em aceitar o pacote de maneira que ele não venha a ser avaliado posteriormente dentro desta mesma tabela;

DROP – esta ação se assemelha ao REJECT, porém, se diferencia por não enviar mensagem de erro ao remetente. Pode ser a estratégia ideal para quando o firewall está atuando no modo bridge (transparente), visto que o remetente (às vezes um invasor) não identifique a causa do bloqueio ou o IP que está resultando no mesmo;

LOG – a ação LOG consiste apenas em criar registros sobre um pacote, não dando término ao processo de avaliação, ou seja, os pacotes continuam sendo analisados pelas regras.

2. NAT A tabela NAT (Network Address Translation), como a própria origem do acrônimo nos diz, realiza a tradução dos endereços que passam pelo roteador no qual ela opera.

Essa função pode trazer recursos úteis envolvendo endereços de IP, visto que as características de origem e destino dos pacotes podem ser alteradas. Da mesma forma que a tabela filter, a NAT possui 3 cadeias:

PREROUTING – aplica as regras aos pacotes que entram no firewall, independentemente do seu destino. O nome PREROUTING não se dá por acaso, pois, caso o destino tenha que ser modificado, os parâmetros devem ser ajustados antes do roteamento;

POSTROUTING – na lista PREROUTING estão inseridas as regras capazes de modificar o pacote após o roteamento, ou seja, quando estão saindo do firewall;

OUTPUT – a proposta do OUTPUT é similar a do PREROUTING, sendo a única diferença o fato deste operar pacotes oriundos de processos locais.

Assim como no filter, as ações da tabela NAT também são 4:

SNAT – realiza a troca dos endereços IP de origem;

DNAT – altera os endereços de IP de destino;

MASQUERADE – faz o mascaramento de IP;

REDIRECT – redireciona o pacote para uma porta local.

3. MANGLE A tabela mangle, por sua vez, tem a função de especificar ações especiais que devem ser aplicadas no tráfego que passa pelas cadeias. No caso, tais ações ocorrem anteriormente aos chains das tabelas filter e NAT.

Para melhor compreendermos esse processo, vamos nos apegar ao fato de que as cadeias da tabela mangle são 5 (PREROUTING, POSTROUTING, INPUT, OUTPUT e FORWARD), isto é, correspondem às cadeias das outras camadas do iptables.

Supondo que a chain INPUT seja acionada na tabela mangle. Isso significa que regras especiais deverão ser aplicadas antes que os pacotes passem pela chain INPUT correspondente à tabela filter. Vale salientar que a cadeia OUTPUT do mangle corresponde ao OUTPUT da tabela NAT.

Para criar uma regra no iptables, deverá estar logado como Root:
executando o seguinte comando:

sudo iptables –L 

ira receber de resposta a lista abaixo:

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

Segue um exemplo de um Script Iptables, criado em Laboratório.

#### SCRIPT DE REGRAS - FIREWALL ####
#!/bin/bash
##
## CARREGANDO MODULOS 
#/sbin/depmod -a
modprobe iptable_nat
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe iptable_filter
modprobe ipt_LOG
modprobe ipt_limit
modprobe ipt_state
modprobe ip_nat_ftp

###APAGANDO TODAS AS REGRAS ###
/sbin/iptables -F
/sbin/iptables -t nat -F

### APLICANDO POLITICAS PADRAO ###
#
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
#
### INICIO DAS REGRAS ####
#
### INICIO DAS REGRAS DA CADEIA INPUT ####
#
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -s 172.16.50.0/24 -p tcp --dport 3128 -j ACCEPT
#/sbin/iptables -A INPUT -p udp --dport 1194 -j ACCEPT
#/sbin/iptables -A INPUT -p TCP --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p TCP --dport 80 -j ACCEPT
#
#/sbin/iptables -A INPUT -s 172.16.50.0/24 -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -j LOG --log-prefix "INPUT-DROP"
#
#INICIO DAS REGRAS DA CADEIA OUTPUT
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -s 172.16.49.100 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -j LOG --log-prefix "OUTPUT-DROP"
#
 ### INICIO DAS REGRAS DA CADEIA FORWARD ####
#
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -p icmp -j ACCEPT
#/sbin/iptables -A FORWARD -s 10.0.0.2 -d 172.16.50.0/24 -j ACCEPT
#
#/sbin/iptables -A FORWARD -m state --state INVALID -j DROP
#/sbin/iptables -A FORWARD -p tcp -d 172.16.49.165 --syn --dport 80 -j ACCEPT
#/sbin/iptables -A FORWARD -p tcp -d 172.16.50.10 --syn --dport 80 -j ACCEPT
#/sbin/iptables -A FORWARD -i eth1 -o eth0 -p tcp -d 172.16.49.165 --syn --dport 80 -j ACCEPT #/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 172.16.49.101 --syn --dport 22 -j ACCEPT #/sbin/iptables -A FORWARD -p tcp -d 172.16.49.101 --dport 3389 -j ACCEPT
#/sbin/iptables -A FORWARD -p tcp -d 172.16.50.30 --dport 3389 -j ACCEPT
#
#/sbin/iptables -A FORWARD -i eth1 -o eth0 -s 172.16.50.0/24 -p tcp --match multiport --dports 21,80,443 -j ACCEPT
#/sbin/iptables -A FORWARD -i eth1 -o eth0 -p udp --dport 53 -j ACCEPT

### LOG FORWARD #####
/sbin/iptables -A FORWARD -j LOG --log-prefix "FORWARD-DROP"
#
#
######### Regras de NAT ENTRADA
#
#iptables --list PREROUTING -t nat # #/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d 172.16.49.101 --dport 80 -j DNAT --to 172.16.50.10:80
#/sbin/iptables -t nat -A PREROUTING -p tcp -d 172.16.49.101 --dport 3389 -j DNAT --to-destination 172.16.50.30
#/sbin/iptables -t nat -A PREROUTING -p tcp -d 172.16.49.101 -j DNAT --todestination 172.16.50.30
#
######### Regras de NAT - SAIDA/MASCARAMENTO - SAIDA 
#
#/sbin/iptables -t nat -A POSTROUTING -s 172.16.50.10 -j SNAT --to-source 172.16.49.101 #/sbin/iptables -t nat -A POSTROUTING -s 172.16.50.0/24 -o eth0 -j SNAT --tosource 172.16.49.100
#
#NAT DINAMICO

#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.217.40-200.200.217.111
/sbin/iptables -t nat -A POSTROUTING -s 172.16.50.0/24 -j MASQUERADE
#
#
## FIM DAS REGRAS - FIREWALL ###
#/sbin/iptables -A INPUT -s 10.204.144.0/20 -p udp --sport 520 -j ACCEPT
#/sbin/iptables -A INPUT -p udp --sport 123 -j ACCEPT
#/sbin/iptables -A INPUT -p icmp -s 172.16.49.144 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 172.16.49.144 --dport 80 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -i $INT -s 200.244.230.216 --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -i $INT -s 200.244.230.107 --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p udp -i $INT -s 200.244.193.176 --sport 53 -j ACCEPT
#
#/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 172.16.50.2 --syn --dport 22 - m state --state NEW -j ACCEPT

Nenhum comentário :

Postar um comentário

Nos comentários poderão existir informações que poderão lhe ajudar a resolver seu problema.