Skip to content

Instantly share code, notes, and snippets.

@mskf3000
Forked from marcosptf/iptables
Created March 2, 2023 02:39
Show Gist options
  • Save mskf3000/5f03b4a927d518412ea92fae08894b26 to your computer and use it in GitHub Desktop.
Save mskf3000/5f03b4a927d518412ea92fae08894b26 to your computer and use it in GitHub Desktop.
comandos IPTABLES
sudo iptables -t nat -L -n -v
sudo iptables -t filter -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -t nat -L -n -v
sudo iptables -t nat -A PREROUTING -i eth1 --src 10.3.14.118 --dst 127.0.0.1 -p tcp --dport 1198 -j REDIRECT --to-ports 5000
sudo iptables-save
sudo iptables -t nat -L -n -v
/*descobrir portas abertas */
nmap -v <ip>
/* comandos IPTables */
sudo iptables -t nat -I PREROUTING -i eth1 --src 10.3.14.118 --dst 127.0.0.1 -p tcp --dport 1198 -j REDIRECT --to-ports 5000
sudo iptables -t nat -I PREROUTING --src 0/0 --dst 10.3.14.118 -p tcp --dport 1198 -j REDIRECT --to-ports 5000
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 1198 -j REDIRECT --to-port 5000
sudo iptables -t nat -A PREROUTING -i eth1 --src 10.3.14.118 --dst 127.0.0.1 -p tcp --dport 5000 -j REDIRECT --to-ports 5000
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5000 -j REDIRECT --to-port 5000
iptables -t nat -A PREROUTING -i eth0.1 -p tcp --dport 80 -j REDIRECT --to-port 3128
/* opções dos comandos */
-A
Adiciona uma regra no fim da lista.
-D
Apaga uma regra da lista.
-L
Lista as regras da lista.
-P
Altera a política padrão das Chains.
-F
Remove todas as regras da lista.
-I
Insere uma regra no início da lista.
-R
Substitui uma regra da lista por outra.
-N
Cria uma nova chain na tabela especificada.
-E
Renomeia uma chain que foi criada com o comando -N.
-X
Apaga uma chain criada com o comando -N.
Ações
-p
Especifica o protocolo ao qual a regra se aplicará. Também podemos utilizar o valor numérico que referencia o protocolo em /etc/protocol. Ex: -p gre ; -p 47
-i
Especifica a interface de entrada utilizada pela regra. Pode ser utilizada apenas com as chains INPUT e FORWARD. EX: -i eth0 ou -i eth+ para especificar todas as entradas.
-o
Especifica a interface de saída utilizada pela regra. Pode ser utilizada apenas com as chains FORWARD e OUTPUT. EX: -o eth0
-s
Especifica o endereço ou a rede de origem utilizada pela regra. Se não especificarmos a máscara de rede, o iptables utiliza a máscara padrão da classe C 255.255.255.0. Também podemos utilizar nomes DNS. Ex: -s 192.168.0.1; -s 192.168.0.0/255.255.255.0 -s vivaolinux.com.br
-d
Especifica o endereço ou a rede de destino utilizado pela regra. Se utiliza da mesma maneira que a ação -s.
!
Utilizado para especificar exceções. Ex: -s ! 192.168.0.5 # A regra se aplicaria a todos os ips que tivessem origem diferente de 192.168.0.5.
-j
Utilizado para aplicar um alvo a regra, os mesmos podem ser ACCEPT, DROP, REJECT e LOG. Ex: -j ACCEPT
--sport
Especifica a porta de origem utilizada. Só podemos aplicar a ação quando estivermos tratando dos protocolos tcp e udp. Ex: -p tcp --sport 25
--dport
Especifica a porta de destino utilizada. Funciona da mesma forma que a ação --sport. Ex: -p tcp --dport 25.
/* Tabela FILTER */
É a tabela responsável pelos filtros dos pacotes. Ela se divide em 3 chains padrão.
INPUT
A chain INPUT é responsável por filtrar todo o tráfego que entra no firewall.
FORWARD
A chain FORWARD é responsável por filtrar todo o tráfego que passará pelo firewall, ou seja, todos os pacotes onde o NAT será aplicado.
OUTPUT
A chain OUTPUT é responsável por filtrar todo o tráfego que sairá pelo firewall.
Tabela NAT
É a tabela responsável pelo redirecionamento de pacotes. Ela também se divide em 3 chains.
PREROUTING
A chain PREROUTING é utilizada para alterar pacotes antes que os mesmos sejam roteados.
OUTPUT
A chain OUTPUT é utilizada para alterar os pacotes que se originam no firewall.
POSTROUTING
A chain POSTROUTING é utilizada pala alterar pacotes que já sofreram roteamento.
Tabela MANGLE
É a tabela responsável pela alteração de prioridade na entrada e saída de pacotes, baseando-se no tipo de serviço (TOS). É dividida em 2 chains.
PREROUTING
A chain PREROUTING trata a prioridade de pacotes antes de passarem por roteamento.
OUTPUT
A chain OUTPUT trata pacotes originados localmente no firewall antes que sejam roteados.
ACCEPT
Aceita a entrada ou passagem do pacote.
DROP
Descarta o pacote.
REJECT
Descarta o pacote, porém diferente de DROP, ele retorna uma mensagem ao emissor informando o que houve com o pacote.
LOG
Gera um log no sistema.
RETURN
Retorna o processamento da chain anterior.
QUEUE
Encarrega um programa de administrar o fluxo atribuído ao mesmo.
SNAT
Altera o endereço de origem do pacote.
DNAT
Altera o endereço de destino do pacote.
REDIRECT
Redireciona a porta do pacote juntamente com a opção --to-port.
TOS
Prioriza a entrada e saída de pacotes baseado em seu tipo de serviço.
Podemos especificar em TOS os seguintes valores:
16 ou 0x10 Espera mínima
8 ou 0x08 Máximo processamento
4 ou 0x04 Máxima confiança
2 ou 0x02 Custo mínimo
0 ou 0x00 Prioridade normal
Módulos
A utilização de módulos junto com o iptables é definida através da opção -m.
Podemos utilizar os seguintes módulos:
limit Impõe um limite de vezes que a regra poderá ser executada. state Utiliza o estado da conexão, que pode ser NEW, ESTABLISHED, RELATED, INVALID. mac Permite a utilização do endereço mac nas regras. multiport Permite a utilização de até 15 portas em uma única regra em conjunto com o --dport. string Verifica o conteúdo do pacote para aplicar a regra. owner Verifica o usuário que criou o pacote.
/* exemplos de codigos IPTABLES */
#limpa todas as regras
sudo iptables -t filter -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
#exclui chains criadas
iptables -t filter -X
iptables -t nat -X
iptables -t mangle -X
#zera contador
iptables -t filter -Z
iptables -t nat -Z
iptables -t mangle -Z
#define política padrão para DROP
#se não especificar a tabela com -t, o iptables utilizará a tabela filter
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#INPUT
#libera entrada para serviços locais do firewall
iptables -A INPUT -i lo -j ACCEPT #libera tráfego local
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT #libera Squid
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT #libera DNS
iptables -A INPUT -m state ESTABLISHED, RELATED -j ACCEPT #libera pacotes sincronizados
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT #libera ping.
#OUTPUT
iptables -A OUTPUT -j ACCEPT #libera toda a saída
#FORWARD
iptables -N INT2EXT #Cria chain INT2EXT para tratar a saída do tráfego
iptables -N EXT2INT #Cria chain EXT2INT para tratar a entrada do tráfego.
iptables -A FORWARD -i eth0 -o eth1 -j EXT2INT #aceita tráfego de entrada especificado em EXT2INT
iptables -A FORWARD -i eth1 -o eth0 -j INT2EXT #aceita tráfego de saída especificado em INT2EXT
iptables -A INT2EXT -p tcp -s 192.168.0.10 -j ACCEPT #libera o host 192.168.0.10 a sair por qualquer porta tcp
iptables -A INT2EXT -p tcp -m multiport --dport 25,110 -j ACCEPT #libera envio e recebimento de email para a rede
iptables -A EXT2INT -p tcp --dport 80 -j ACCEPT #libera entrada para serviço web.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.10:80 #direciona tráfego http para para o host 192.168.0.10
iptables -t mangle -A INPUT -p tcp --dport 80 -j TOS --set-tos 16 #prioriza tráfego na porta 80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment