O que é o iptables ?
O iptales é um serviço de firewall que vem instalado por padrão em diversas distros GNU/linux, uma de suas principais caracteristicas é facilidade e robustez fora a quantidade de recursos que ele oferece para um serviço que já vem instalado nativamente.
O iptables foi lançado em 1998 e foi escrito sobre a linguagem C, seu criador foi o Paul Rusty Russell, no inicio o projeto se chamava Netfilter/iptables já que o principal objetivo do iptables é provisinar uma interface que atuava sobre o Netfilter na qual atua diretamente no gerenciamento de pacotes.Para entendermos como funciona o Netfilter/iptables precisamos saber o que são "chains", "tables", "target" e etc, e é isso que vamos abordar no proximo parágrafo.
O são tables, chains e target ?
TABLES: podemos chamar de table ou tabela, no iptables temos 3 table's que são:
FILTER
NAT
MANGLE
FILTER: Tabela que vem ativada por padrão, ideal para host's e tem 3 chains que são elas: INPUT, OUTPUT, e FORWARD.
NAT: a tabela NAT(Network address translation) como o proprio nome diz ajuda na tradução de endereços IP, por exemplo podemos utilizar o NAT para conectar redes com diferentes ranges/pools de IP's, vamos supor que você recebe o seguinte endereço IP de seu provedor 123.456.789.101 ao ativar e configurar um NAT, você pode fazer com que sua rade local com o range 192.168.0.10 se comunique com a internet, e isso ocorre devido ao NAT.
A tabela NAT tem 3 chains que são elas: PREROUTING, POSTROUTING, e OUTPUT.
MANGLE: a tabela mangle trata-se de uma tabela na qual pode ser utilizada para aplicar funções especificas/especiais no roteamento, pois sua ações são realizadas antes do pacote entrar em uma das 5 chain's na qual ele atua, que são:
PREROUTINT(NAT),
POSTROUTING(NAT),
INPUT(INPUT),
OUTPUT(NAT),
FORWARD(INPUT).
CHAINS: As chains são locais onde as regras do firewall serão aplicadas e cada chain tem um funcionamento diferente, no exemplo abaixo eu listo o que cada chain fica responsavel:
- FILTER
- INPUT: filta os pacotes na entrada do sistema.
- OUTPUT: filta os pacotes na saida.
- FORWARD: filtra os pacotes durante o roteamento.
- NAT
- PREROUTING: filta os pacotes na entram no sistemas.
- POSTROUTING: filta os pacotes durante o roteamento e aplica o destino para os pacotes.
- OUTPUT: filtra os pacotes de saida..
TARGET: O target são ações que aplicamos nas regras que ficam dentro das chains, para listar todos os target's ativos no sistema, execute o comando:
cat /proc/net/ip_tables_targets
no exemplo abaixo vou listar alguns target's e a função na qual ele desempenha na regra:
- FILTER
- CHAINS(INPUT, OUTPUT e FORWARD)
- ACCEPT: Aceita o pacote.
- REJECT: Rejeita o pacote.
- DROP: Descarta um pacote sem notificar o emissor.
- LOG: Gera um log do chamado.
- TARGET's:
- NAT
- CHAINS(PREROUTING, POSTROUTING e OUTPUT)
- SNAT: Realiza a troca de endereços IP de origem.
- DNAT: Altera os endereços IP de destino.
- MASCAREDE: Faz o mascaramento do IP.
- REDIRECT: Redireciona o pacote para uma porta local.
- TARGET's:
Modulos.
Os modulos são extensões que podemos utilizar nas regras, para expandirmos os recursos e ações do firewall, os modulos são especificados na regra pela opção -m ou --match. Para que você verifique os modulos ativos em seu IPtables, basta executar o comando:
cat /proc/net/ip_tables_matches
Alguns exemplos de modulos mais utilizados no iptables são: MULTIPORT, IPRANGE, CONNLIMIT, STRING, TIME, STATE.
- Modulos
- MULTIPORT: permite criar regras especificando mais de uma porta.
- IPRANGE: permite criar regras especificando ranges de IP.
- CONNLIMIT: permite criar regras para controle de conexão simultaneas.
- STRING: permite criar regras na qual analisa uma determinada string dentro do pacote para que possa ser bloqueado, liberado ou analisado.
- TIME: permite criar regras na qual podemos adicionar por tempo(segundos, minutos, horas e dias).
- STATE: permite criar regras na qual faz analise do estado da conexão.
- -m ou --match
Comandos basicos.
Antes de executarmos os comandos basicos precisamos estar logado com uma conta com direitos administrativos, para isso você precisa digitar os comandos a seguir com o comando sudo antes, seguindo essa sintaxe aqui:
sudo [comando desejado]
Caso não vocẽ não queira ficar digitando o comando sudo toda vez, basta você executar o comando sudo su coloque sua senha e após isso você poderá executar os comandos pois estará logado como root no sistema.
Comando help.
Caso precise tirar duvida sobre sintaxe, agumentos ou opções disponiveis execute o seguinte comando:iptables --help

Salvando e restarurando as regras.
Quando definimos uma regra através da linha de comando, geralmente ela é perdida quando efetuamos a reinicialização do sistema, para realizar o backup das regras de firewall execute o comando abaixo:iptables-save > /etc/iptables-save
esse comando direciona as regras existentes no firewall para um arquivo de texto.

iptables-save < /etc/iptables-save

Listar regras.
Para listarmos todas as regras em uso do firewall utilizamos o argumento -L .iptables -L

iptables -L INPUT

Liberando e bloqueando portas no iptables.
Bloqueando o protocolo PING no firewall, para isso vou criar uma regra para a chain INPUT bloqueado o protocolo ICMP, para isso digite o comando abaixo:
iptables -A INPUT -p icmp -j DROP
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-A: Cria nova regra no final da chain.
INPUT: Chain escolhida na qual a regra vai agir.
-p: Especifica o protocolo na qual a regra vai ser aplicada.
icmp: Protocolo.
-j: Executa uma ação.
DROP: Ação escolhida para a regra.
Bloqueando e gerando log do pacote para que seja analisado posteriormente, para isso digite o comando:
iptables -I INPUT -p icmp -j LOG
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-I: Cria nova regra no topo da chain.
INPUT: Chain escolhida na qual a regra vai agir.
-p: Especifica o protocolo na qual a regra vai ser aplicada.
icmp: Protocolo.
-j: Executa uma ação.
LOG: Ação escolhida para a regra.
Liberando uma porta especifica no firewall, no exemplo abaixo vou abrir a porta 80.
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-I: Cria nova regra no topo da chain.
INPUT: Chain escolhida na qual a regra vai agir.
-p: Especifica o protocolo na qual a regra vai ser aplicada.
tcp: Protocolo.
--dport: indica que a regra vai ser ativa em uma porta epecifica.
80: porta escolhida.
-j: Executa uma ação.
ACCEPT: Ação escolhida para a regra.
Deletando uma regra especifica no firewall, no exemplo abaixo vou deletar a regra que foi criada acima para abrir a porta 80, para isso digite o comando abaixo:
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-D: Deleta regra na chain escolhida.
INPUT: Chain escolhida na qual a regra vai agir.
-p: Especifica o protocolo na qual a regra vai ser aplicada.
tcp: Protocolo.
--dport: Indica que a regra vai ser ativa em uma porta epecifica.
80: porta escolhida.
-j: Executa uma ação.
ACCEPT: Ação escolhida para a regra.
Criando uma regra de redirecionamento de portas utilizando a tabela NAT, nessa regra vou direcionar o trafego da porta 8080 para a 80, para isso digite o comando abaixo:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to :80
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-t: Indica a tabela.
nat: tabela escolhida(NAT).
-A: Cria uma regra na chain escolhida.
PREROUTING: Chain escolhida na qual a regra vai agir.
-p: Especifica o protocolo na qual a regra vai ser aplicada.
tcp: Protocolo.
--dport: Indica que a regra vai ser ativa em uma porta epecifica.
8080: porta escolhida.
-j: Executa uma ação.
DNAT: Ação escolhida para a regra, para redirecionar o trafego.
--to :80: Indica a porta de destino na qual vai receber o trafeg.
Inserindo modulos nas regras.
Utilizando o modulo MULTIPORT nos permite especificarmos mais de uma porta na regra agir.
iptables -I INPUT -m multiport -p tcp --dports 80,443 -j ACCEPT
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-I: Cria nova regra no topo da chain.
INPUT: Chain escolhida na qual a regra vai agir.
-m: Indica que será utilizado um modulo.
multiport: Modulo escolhido.
-p: Especifica o protocolo na qual a regra vai ser aplicada.
tcp: Protocolo.
--dports: indica as portas na qual a regra vai agir.
80,443: portas escolhidas.
-j: Executa uma ação.
ACCEPT: Ação escolhida para a regra.
Utilizando o modulo IPRANGE nos permite especificarmos um range de ip, isso pode ser bastante necessario quando precisamos determinar que somentes IP's dentro desse range acessem o sistema/recuso.
iptables -I INPUT -m iprange --src-range 192.168.10.2-192.168.10.50 -j ACCEPT
Segue abaixo a descrição de cada componente do comando que digitei acima:
iptables: Executor do comando.
-I: Cria nova regra no topo da chain.
INPUT: Chain escolhida na qual a regra vai agir.
-m: Indica que será utilizado um modulo.
iprange: Modulo escolhido.
--src-range: Especifica o range de origem/entrada.
192.168.10.2 - 192.168.10.50: Range de IP's escolhidos.
-j: Executa uma ação.
ACCEPT: Ação escolhida para a regra.
Conclusão.
O iptables é ferramenta bem potente e com diversos recursos, você tambem pode integra-lo com outras tecnologias para aumentar proteção de sua maquina ou servidor. Neste artigo eu fiz uma explicação basica de como é, e como funciona esse firewall, caso tenha duvidas ou sugestões, deixe um comentario abaixo, ou acesse guia Contato.