Ir para o conteúdo

Construindo um firewall básico com o iptables

Banner

📚 Instalando o iptables-persistent

Neste tutorial, utilizaremos a aplicação iptables-persistent, ele realizará a carga das regras do iptables sempre que o host for iniciado. Para instalar a aplicação podemos utilizar o seguinte comando:

Comando
sudo apt install iptables-persistent

📚 Removendo o arquivo de regras

Depois de instalar o iptables-persistent , devemos renomear o arquivo /etc/iptables/rules.v4. Este arquivo conterá as regras de filtragem que serão carregadas e aplicadas pelo iptables

Comando
sudo mv /etc/iptables/rules.v4 /etc/iptables/rules.v4.original

📚 Ajustando as regras Básicas

Após remover o arquivo original devemos criar um novo arquivo:

Comando
sudo nano /etc/iptables/rules.v4 

E neste novo arquivo diremos adicionar as nossas regras default

Configurações
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
###-------------------------------------------------------------------------------------------------------####
# Servidor: nome do servidor <-- Indicar o nome da maquina
###-------------------------------------------------------------------------------------------------------####
# Historico *1:
#   - [data da criacao do arquivo] - [login do admin] - versao original
#  
#   *1: Nesta seção iremos controlar as versões deste arquivo
###-------------------------------------------------------------------------------------------------------####
# Tabela Filter
###-------------------------------------------------------------------------------------------------------####
*filter
:INPUT      DROP    [0:0]
:FORWARD    DROP    [0:0]
:OUTPUT     ACCEPT  [0:0]

###///////////////////////////////////////////////////////////////////////////////////////////////////////###
###-------------------------------------------------------------------------------------------------------###
#                                  Declaracao das Cadeira
###-------------------------------------------------------------------------------------------------------###
###\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\###
####### Cadeias Básicas
:ALLOW_ICMP         - [0:0]
:ALLOW_SSH_65222    - [0:0]
:LOGDROP            - [0:0]
####### Cadeias Adicionais

###///////////////////////////////////////////////////////////////////////////////////////////////////////###
###-------------------------------------------------------------------------------------------------------###
#                                    Regras das Cadeira
###-------------------------------------------------------------------------------------------------------###
###\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\###

###-------------------------------------------------------------------------------------------------------####
# Libera a interface Loopback e o retorno de conexões estabelecidas a partir da maquina
###-------------------------------------------------------------------------------------------------------####
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

###-------------------------------------------------------------------------------------------------------####
## CADEIA: ALLOW_ICMP
##         >> Libera o protocolo ICMP
###-------------------------------------------------------------------------------------------------------####
-A INPUT -p icmp    -j ALLOW_ICMP
#-A INPUT -p icmp --icmp-type 8  -j ALLOW_ICMP
###-------------------------------------------------------------------------------------------------------####
# Libera o ICMP originado na rede interna
-A  ALLOW_ICMP  -s 10.10.30.0/24        -m comment --comment "ICMP:Rede:30" -j ACCEPT
###-------------------------------------------------------------------------------------------------------####
## Registra e Bloqueia as demais mensagens
###-------------------------------------------------------------------------------------------------------####
-A  ALLOW_ICMP    -m limit --limit 5/min -j LOG --log-prefix "DROP:IMCP " --log-level 7
-A  ALLOW_ICMP    -j DROP
###-------------------------------------------------------------------------------------------------------####

###-------------------------------------------------------------------------------------------------------####
## CADEIA: ALLOW_SSH_6522  
##         >> Liberando acesso ao serviço SSH que está escutando na porta 65222
###-------------------------------------------------------------------------------------------------------####
-A INPUT -p tcp -m tcp -m multiport --dports 65222      -j ALLOW_SSH_65222
###-------------------------------------------------------------------------------------------------------####
# Libera acesso originado na rede interna 
-A ALLOW_SSH_65222 -s 10.10.30.0/24   -m comment --comment "SSH:Rede:30" -j ACCEPT
###-------------------------------------------------------------------------------------------------------####
## Registra e Bloqueia as demais mensagens
###-------------------------------------------------------------------------------------------------------####
-A ALLOW_SSH_65222  -m limit --limit 5/min -j LOG --log-prefix "DROP:SSH_65222 " --log-level 7
-A ALLOW_SSH_65222  -j DROP

###///////////////////////////////////////////////////////////////////////////////////////////////////////###
###-------------------------------------------------------------------------------------------------------###
#                                   Fim  Fluxo Principal
###-------------------------------------------------------------------------------------------------------###
###\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\###

###-------------------------------------------------------------------------------------------------------####
## CADEIA: LOGDROP
##          Registra e descarta todos os pacotes que não foram tratados anteriormente
###-------------------------------------------------------------------------------------------------------####
-A INPUT -j LOGDROP
###-------------------------------------------------------------------------------------------------------####
-A LOGDROP -p tcp -m limit --limit 5/min -j LOG --log-prefix "Denied TCP: " --log-level 7
-A LOGDROP -p tcp -j DROP
###-------------------------------------------------------------------------------------------------------####
-A LOGDROP -p udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: " --log-level 7
-A LOGDROP -p udp -j DROP
###-------------------------------------------------------------------------------------------------------####
-A LOGDROP -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7
-A LOGDROP -p icmp -j DROP
###-------------------------------------------------------------------------------------------------------####
-A LOGDROP -j DROP

###-------------------------------------------------------------------------------------------------------####
# Finalizando e aplicando as regras
###-------------------------------------------------------------------------------------------------------####
COMMIT
###-------------------------------------------------------------------------------------------------------####

📚 Carregando as novas regras

Depois que adicionamos as regras no arquivo de configuração, precisamos carrega-las, para tal utilizaremos o seguinte comando:

Comando
sudo netfilter-persistent reload

Para verificar se as regras foram carregadas podemos utilizar o seguinte comando:

Comando
sudo iptables-save

Este comando deve gerar uma saída semelhante à:

Saída
# Generated by iptables-save v1.8.4 on Mon Jun 22 19:36:36 2020
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5:592]
:ALLOW_ICMP - [0:0]
:ALLOW_SSH_65222 - [0:0]
:LOGDROP - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ALLOW_ICMP
-A INPUT -p tcp -m tcp -m multiport --dports 65222 -j ALLOW_SSH_65222
-A INPUT -j LOGDROP
-A ALLOW_ICMP  -s 10.10.30.0/24         -m comment --comment "ICMP:Rede:30" -j ACCEPT
-A ALLOW_ICMP -m limit --limit 5/min -j LOG --log-prefix "DROP:IMCP " --log-level 7
-A ALLOW_ICMP -j DROP
-A ALLOW_SSH_65222 -s 10.10.30.0/24   -m comment --comment "SSH:Rede:30" -j ACCEPT
-A ALLOW_SSH_65222 -m limit --limit 5/min -j LOG --log-prefix "DROP:SSH_65222 " --log-level 7
-A ALLOW_SSH_65222 -j DROP
-A LOGDROP -p tcp -m limit --limit 5/min -j LOG --log-prefix "Denied TCP: " --log-level 7
-A LOGDROP -p tcp -j DROP
-A LOGDROP -p udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: " --log-level 7
-A LOGDROP -p udp -j DROP
-A LOGDROP -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7
-A LOGDROP -p icmp -j DROP
-A LOGDROP -j DROP
COMMIT
# Completed on Mon Jun 22 19:36:36 2020

Com isto finalizamos o processo de configuração no firewall da maquina. Em outros tutoriais realizaremos alguns ajustes no arquivo de configuração e novos serviços serão liberados.



Banner


Última atualização: 2 de novembro de 2020

Comentários