Trabalhando com IPTables

Os servidores Linux vêm com um firewall baseado em host chamado Netfilter. Este firewall é controlado por um programa chamado IPTables. A filtragem Netfilter ocorre ao nível do kernel, antes que um programa consiga processar os dados do pacote de rede.

Onde posso encontrar o arquivo de configuração iptable?

Aqui: /etc/sysconfig/iptables-config

As regras para iptables foram adicionadas ao arquivo /etc/sysconfig/iptables.

Recomendamos que você salve as regras de firewall antes de fazer quaisquer alterações às regras. Basta executar o comando, e pode continuar:

iptables-save > /root/rule_1.fw

Se você desejar restaurar o arquivo de regras firewall, execute o comando a seguir:
iptables-restore < /root/rule_1.fw
—-

Como Parar (Stop), Iniciar (Start) ou reiniciar (Restart) o firewall?
É fácil. Basta executar para cada ação o comando dado a seguir:
—-
service iptables stop
service iptables start
service iptables restart
—-
Nota: Para salvar automaticamente as regras ao parar ou reiniciar o serviço, abra o arquivo /etc/sysconfig/iptables-config e altere os seguintes parâmetros para YES (SIM).
—-
IPTABLES_SAVE_ON_RESTART = “yes”
IPTABLES_SAVE_ON_STOP = “yes”
—-

Como salvar as regras iptable para o arquivo etc/sysconfig/iptables file?
Execute o comando: /etc/init.d/iptables save

Como restaurar as regras do arquivo /etc/sysconfig/iptables?
Execute o comando: /etc/init.d/iptables start

Conceitos básicos de IPTables:
1. Tabelas: O IPTables tem 4 tabelas incorporadas.
1.1. Filter: Esta é a tabela padrão. Ela contém chains de INPUT, FORWARD e OUTPUT incorporadas.
1.2. NAT: É utilizada para a tradução de endereços de rede (ex., o encaminhamento de porta). É composta por três chains incorporadas: PREROUTING, OUTPUT e POSTROUTING.
1.3. Mangle: É usada para alteração de pacotes especializados. Desde Kernel 2.4.18, que suporta INPUT, FORWARD e POSTROUTING.
1.4. Raw: Esta tabela é usada principalmente para a configuração de exclusões de rastreamento de conexões juntamento com o destino NOTRACK. Ela fornece as seguintes chains incorporadas: PREROUTING e OUTPUT.

2. Chains de IPTables:
2.1. INPUT: A chain padrão é usada para pacotes endereçados ao sistema. Utilize esta para abrir ou fechar portas de entrada e endereços/sub-redes IP.
2.2. OUTPUT: A chain padrão é usada quando os pacotes estão sendo gerados a partir do sistema. Utilize esta para abrir ou fechar portas de entrada e endereços/sub-redes IP.
2.3. FORWARD: A chain padrão é usada quando os pacotes enviam através de outra interface. Normalmente usada quando você configurou o Linux como router.
2.4. PREROUTING: Manipula os pacotes antes de eles serem encaminhados.
2.5. POSTROUTING: Manipula os pacotes depois de eles serem encaminhados.

3. Valores Destino:
3.1. ACCEPT: Aceita o pacote.
3.2. DROP: Rejeitea o pacote, e não envia uma mensagem de erro ao host remoto.
3.3. REJECT: Rejeitea o pacote, e envia uma mensagem de erro ao host remoto.

4. Regras de Correspondência de Pacotes:
4.1. Cada pacote começa na primeira regra de chain.
4.2. Um pacote prossegue até que encontre uma regra correspondente.
4.3. Se foi encontrada uma correspondência, então o controle passa para o destino especificado (como REJECT, ACCEPT, DROP).

Comandos de Uso Básico:
–append -A chain // Anexar a chain
–delete  -D chain  // Eliminar regra de correspondência da chain
–delete  -D chain rulenum // Eliminar regra rulenum (1 = primeira) da chain
–insert  -I chain [rulenum] // Inserir na chain como rulenum (padrão 1=primeira)
–replace -R chain rulenum // Substituir regra rulenum (1 = primeira) na chain
–list  -L [chain]  // Listar as regras duma chain ou de todas as chains
–flush   -F [chain] // Eliminar todas as regras duma chain ou de todas as chains
–zero-Z [chain] // Zero contagens numa chain ou em todas as chains
–new-N chain  // Criar uma nova chain definida pelo usuário
–delete-chain -X [chain] //   Eliminar uma chain definida pelo usuário
–policy  -P chain target // Alterar a política na chain de destino
–rename-chain -E old-chain new-chain // Mudar o nome da chain de usuário especificado para o nome fornecido pelo usuário.
–numeric-n  // Os endereços IP e números de porta serão impressos em formato numérico. Por padrão, o programa irá tentar exibi-las como nomes host, nomes de rede ou serviços.
–verbose -v // Mensagens de saída.

Operações básicas usando IPTables:
1. Alterar o destino padrão de uma chain:
Por padrão, a regra IPTables terá que ACCEPT (aceitar) ou DROP (rejeitas) como a política padrão. Se o valor de destino é ACCEPT, por padrão o firewall permitirá todo o tráfego. Se é DROP, todo o tráfego para o servidor será bloqueado.
Por exemplo:
—-
*filter
:INPUT ACCEPT [531:91893]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [617:118476]
—-
As regras acima implicam que a política padrão é ACCEPT. Para alterar a política padrão, abra o arquivo “/etc/sysconfig/iptables”  e altere a política padrão de ACCEPT para DROP para as chains INPUT e FORWARD incorporadas.
—-
*filter
:INPUT DROP [531:91893]
:FORWARD DROP [0:0]
—-

2. Lista das regras de IPTables:
iptables -nL -v
—–
INPUT de Chain (política ACCEPT 964 pacotes, 158K bytes)
pkts bytes target prot opt in out source           destination
1574  232K cP-Firewall-1-INPUT  all  —  *  *   0.0.0.0/0        0.0.0.0/0
1293  214K acctboth   all  —  *  *   0.0.0.0/0        0.0.0.0/0
—–
´
3. Listar as regras padrão com o número da linha:
iptables -nL –número-de-linha
—-
Chain INPUT (policy ACCEPT)
num  target prot opt source           destination
1cP-Firewall-1-INPUT  all  —  0.0.0.0/0        0.0.0.0/0
2acctboth   all  —  0.0.0.0/0        0.0.0.0/0
—-

4. Para listar as regras padrão duma chain especial:
iptables -nL [nome da chain]
—-
iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source           destination
cP-Firewall-1-INPUT  all  —  0.0.0.0/0        0.0.0.0/0
acctboth   all  —  0.0.0.0/0        0.0.0.0/0
—-

5. Eliminar uma regra de firewall:
5.1. Listar as regras com o número da linha:
iptables -L INPUT -n –números-de-linha
5.2. Você vai obter a lista de IP. Olhe para o número à esquerda, de seguida, use o número para eliminá-lo. Por exemplo elimine o número da linha 4, digite:
iptables -D INPUT 4
5.3. Encontre o IP de origem 1.1.1.1, e elimine da regra:
iptables -D INPUT -s 1.1.1.1 -j DROP

6. Colocar um endereço IP na lista de permissões:
iptables -A [CHAIN] -s [ENDEREÇO IP]  -j ACCEPT
—–
iptables -A INPUT -s 1.1.1.1  -j ACCEPT
—–

7. Bloquear um endereço IP:
iptables -A [CHAIN] -s [ENDEREÇO IP]  -j DROP

iptables -A INPUT -s 1.1.1.1 -j DROP

8. Abrir uma porta no servidor:
iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport [NÚMERO DE PORTA] -j ACCEPT
—-
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 993 -j ACCEPT
—-
NOTA: Substitua ACCEPT por DROP para bloquear as conexões.

9. Bloqueio de conexões de entrada/saída: 
9.1. Bloquear todos os pedidos em uma porta:
iptables -A INPUT -p tcp –dport  [NÚMERO DE PORTA] -j DROP
Por exemplo: bloquear todos os pedidos para a porta 80.
—–
iptables -A INPUT -p tcp –dport 80 -j DROP
—–

9.2. Bloquear um pedido dum único endereço IP:
Por exemplo: Pedido de bloqueamento da porta 80 de um determinado endereço IP.
—-
iptables -A INPUT -p tcp -s 1.1.1.1 –dport 80 -j DROP
—-

9.3. Bloquear conexão de saída de um único endereço IP:
iptables -A OUTPUT -d  [ENDEREÇO IP DE DESTINO] -j DROP
—–
iptables -A OUTPUT -d 1.1.1.1 -j DROP
—–

10. Abrir uma faixa de endereços IP:
iptables -A INPUT -p tcp  -m iprange –src-range [FAIXA DE ENDEREÇOS IP] -j ACCEPT
—-
iptables -A INPUT -p tcp  -m iprange –src-range 192.168.11.100-192.168.11.200 -j ACCEPT
—-

10.1. Abrir uma porta para uma faixa de endereços IP:
iptables -A INPUT -p tcp –destination-port [NÚMERO DE PORTA] -m iprange –src-range [FAIXA DE ENDEREÇOS IP] -j ACCEPT
—-
iptables -A INPUT -p tcp –destination-port 80 -m iprange –src-range 192.168.11.100-192.168.11.200 -j ACCEPT
—-
NOTA: Substitua ACCEPT por DROP para bloquear as conexões.