Вы находитесь на странице: 1из 30

Firewalls em Linux

Tutorial Básico

André Luiz Rodrigues Ferreira


alrferreira@carol.com.br

1
O que é um Firewall?

● Uma série de mecanismos de proteção dos


recursos de uma rede privada de outras redes.
● Ferramenta para filtragem pacotes de rede
baseados na informação contida em seu
cabeçalho IP.

2
Arquiteturas de Firewalls

3
Arquiteturas de Firewalls

4
Arquiteturas de Firewalls

5
Aplicações
● Camada de Segurança

● Compartilhamento de Internet

● Perimetração

● Proteção Local

6
Tipos de Firewall
● Stateless:
● Camada de Rede
● Endereço de Origem/Destino, Portas Origem/Destino
● Statefull:
● Camada de Transporte
● Estado das conexões
● Proxy:
● Novo pedido de conexão através de Bastion Host
● Aplicação:
● Camada de Aplicação
7
Cabeçalho IP

8
Por que o Linux?

● Código Aberto
● Firewall nativo em kernel
● Estabilidade / Segurança
● Escrita de módulos
● Várias interfaces de administração

9
Programas p/ firewall em Linux

● TCP Wrappers: todas versões


● Ipfwadm : Linux kernel 2.0.34
● Ipchains : Linux kernel 2.2.*
● Iptables : Linux kernel 2.4.*
Linux kernel 2.6.*

10
Iptables/netfilter
● Framework de filtragem de pacotes a nível de
kernel em Linux superiores a 2.4
● Stateless packet filtering
● Statefull packet filtering
● Network Address Translation (SNAT/DNAT)
● Infra-estrutura extensível e flexível
● Grande quantidade de plugins e extensões:
QoS, layer7, Level User, etc.

11
Iptables: tabelas
● filter : Tabela padrão. Contém três chains:
INPUT, FORWARD e OUTPUT;
● nat : Tabela para pacotes que queiram criar uma
nova conexão, utilizada em um computador
funcionando como gateway ou roteador. Tem as
chains PREROUTING, OUTPUT e
POSTROUTING;
● mangle : Tabela utilizada para alterações nos
pacotes. Desde o kernel 2.4.18 tem as chains
PREROUTING, OUTPUT, INPUT, FORWARD
e POSTROUTING.
12
Iptables: tratamento dos pacotes
Entrada saída
(interfaces) (interfaces)

Decisão de
PREROUTING roteamento FORWARD POST
(entrada) ROUTING

Decisão de
roteamento
(saída)

INPUT OUTPUT

13 Processamento Local
Iptables: manutenção de regras
● iptables -F
● limpa as regras atuais
● iptables -A
● adiciona uma nova regra
● iptables -D
● exclui uma regra atual
● iptables -I
● Insere uma nova regra c/ prioridade alta

14
Iptables: Targets

● ACCEPT
● deixa o pacote passar
● REJECT
● Rejeita o pacote
● DROP
● “dropa” o pacote. Não retorna resposta p/ remetente.
● LOG
● Registra o pacote em arquivos de log.
15
Iptables: Políticas
● Bloquear TUDO que não for expressamente permitido
● iptables -P INPUT DROP
● iptables -P OUTPUT DROP
● iptables -P FORWARD DROP

● Liberar TUDO que não for expressamente proibido


● iptables -P INPUT DROP
● iptables -P OUTPUT DROP
● iptables -P FORWARD DROP

16
Iptables: Sintaxe
● -s (--source)
● especifica o endereço de origem. Ex: -s 192.168.1.1
● -d (--destiny)
● especifica o endereço de destino. Ex: -d 192.168.0.1/24
● -p (--protocol)
● especifica o protocolo. Ex: -p tcp
● -sport
● especifica a porta de origem. Ex: --sport 1025
● --dport
● especifica a porta de destino. Ex: --dport 80
17
Iptables: Sintaxe

● -i
● especifica a placa de rede de entrada. Ex: -i eth0
● -o
● especifica a placa de rede de saída. Ex: -o eth1

18
Juntando tudo...

iptables -I INPUT -i eth1 -p tcp -s 192.168.56.1 \


--sport 1024:65535 -d 192.168.56.2 --dport 22 \
-j ACCEPT

iptables -I OUTPUT -o eth1 -p tcp -s 192.168.56.2 \


--sport 22 -d 192.168.56.1 --dport 1024:65535 \
-j ACCEPT

19
Pacotes de Forwarding

iptables -A FORWARD -i <internal interface> \


-o <external interface> -s 192.168.56.1/32 --sport \
1024:65535 -m state --state \ NEW,ESTABLISHED,RELATED
-j ACCEPT

iptables -A FORWARD -i <external interface> \


-o <internal interface> -m state --state \
ESTABLISHED,RELATED -j ACCEPT

*não esqueçer de habilitar forward no arquivo


/proc/sys/net/ipv4/ip_forward

20
NAT (Network Address Translation)

● Source NAT (SNAT)


● O endereço de origem inicial do pacote é modificado.
● Aplicado na chain POSTROUTING da tabela nat.
● Inclui funcionalidade de MASQUERADE.
● Destination NAT (DNAT)
● O endereço de origem inicial do pacote é modificado.
● Aplicado nas chains PREROUTING e OUTPUT.

21
SNAT: Exemplos

iptables -t nat -A POSTROUTING -o \


<external interface> -j SNAT --to-source \
<external address>

iptables -A FORWARD -i <internal interface> \


-o <external interface> -m state --state \
NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -o <internal interface> \


-m state --state ESTABLISHED,RELATED -j ACCEPT

22
DNAT - Host Forwarding

iptables -t nat -A PREROUTING -i <external interface> \


-p tcp --sport 1024:65535 -d <external address> --dport 80 \
-j DNAT --to-destination <local server>

iptables -A FORWARD -i <external interface> \


-o <internal interface> -p tcp --sport 1024:65535 \
-d <local server> --dport 80 -m state \
--state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i <internal interface> \


-m state --state ESTABLISHED,RELATED -j ACCEPT

23
Opções de Firewall

● Dispositivos Comerciais (Watchguard, Cisco


PIX, BRConnection)
● Roteadores (ACL Lists)
● Em kernel (Linux, BSDs)
● Pacotes de Software (ZoneAlarm, Black Ice,
Firewall-1, Microsoft ISA Server, Aker)

24
iptables -L -v -n

Chain INPUT (policy DROP 280 packets, 32685 bytes)


pkts bytes target prot opt in out source destination
3300 136K ACCEPT tcp -- eth1 * 192.168.56.1 192.168.56.2 tcp dpt:22
140 51297 LOG all -- eth0 * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
378K 46M LOG all -- eth1 * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
140 10220 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
304 35676 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4

Chain FORWARD (policy DROP 0 packets, 0 bytes)


pkts bytes target prot opt in out source destination
4435 1275K LOG all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
4717 882K LOG all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
13 624 ACCEPT tcp -- eth0 eth1 0.0.0.0/0 192.168.56.1 tcp dpt:22 state NEW
4379 1214K ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4609 877K ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 396 ACCEPT tcp -- eth1 eth0 0.0.0.0/0 10.10.90.10 tcp dpt:22 state NEW
40 1832 ACCEPT tcp -- eth0 eth1 0.0.0.0/0 192.168.56.10 tcp dpt:22 state NEW

Chain OUTPUT (policy DROP 7 packets, 588 bytes)


pkts bytes target prot opt in out source destination
5687 6275K ACCEPT tcp -- * eth1 192.168.56.2 192.168.56.1 tcp spt:22
102 48836 LOG all -- * eth4 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
78904 8127K LOG all -- * eth1 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4
140 10220 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0

25
LOG – Registrando pacotes
● LOG
● --log-level
● --log-prefix
● --log-tcp-sequence
● --log-tcp-options
● --log-ip-options
● iptables -A OUTPUT -o eth0 -j LOG
● iptables -A INPUT -m state --state INVALID -j
LOG --log-prefix "INVALID input: "
26
Exemplo de Log
Jun 25 09:05:11 hebe kernel: IN=eth1 OUT= MAC=00:00:92:a7:df:05:02:07:01:23:5e:29:08:00 
SRC=10.90.10.112 DST=10.90.10.116 LEN=44 TOS=0x00
PREC=0x00 TTL=60 ID=7276 PROTO=TCP SPT=47785 DPT=10003 WINDOW=16384 RES=0x00 SYN URGP=0
Jun 25 09:05:11 hebe kernel: IN=eth1 OUT= MAC=00:00:92:a7:df:05:02:07:01:23:5e:29:08:00 
SRC=10.90.10.112 DST=10.90.10.116 LEN=44 TOS=0x00
PREC=0x00 TTL=60 ID=7276 PROTO=TCP SPT=47785 DPT=10003 WINDOW=16384 RES=0x00 SYN URGP=0
Jun 25 09:05:12 hebe kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:06:5b:d1:24:bb:08:00 
SRC=10.90.50.251 DST=10.90.255.255 LEN=241 TOS=0x00 PREC=0x00 TTL=128 ID=547 PROTO=UDP 
SPT=138 DPT=138 LEN=221
Jun 25 09:05:12 hebe kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:06:5b:d1:24:bb:08:00 
SRC=10.90.50.251 DST=10.90.255.255 LEN=241 TOS=0x00 PREC=0x00 TTL=128 ID=547 PROTO=UDP 
SPT=138 DPT=138 LEN=221
Jun 25 09:05:12 hebe kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:04:74:0b:81:08:00 
SRC=10.90.10.6 DST=10.90.255.255 LEN=78 TOS=0x00 PREC=0x00 TTL=64 ID=44852 PROTO=UDP SPT=137 
DPT=137 LEN=58
Jun 25 09:05:12 hebe kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:04:74:0b:81:08:00 
SRC=10.90.10.6 DST=10.90.255.255 LEN=78 TOS=0x00 PREC=0x00 TTL=64 ID=44852 PROTO=UDP SPT=137 
DPT=137 LEN=58
Jun 25 09:05:15 hebe kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:60:cf:20:2d:37:08:00 
SRC=10.90.10.104 DST=10.90.255.255 LEN=78 TOS=0x00 PREC=0x00 TTL=1 ID=60733 DF PROTO=UDP 
SPT=137 DPT=137 LEN=58
Jun 25 09:05:15 hebe kernel: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:60:cf:20:2d:37:08:00 
SRC=10.90.10.104 DST=10.90.255.255 LEN=78 TOS=0x00 PREC=0x00 TTL=1 ID=60733 DF PROTO=UDP 
SPT=137 DPT=137 LEN=58
Jun 25 09:05:23 hebe kernel: IN=eth1 OUT= MAC=00:00:92:a7:df:05:02:07:01:23:5e:29:08:00 
SRC=10.90.10.112 DST=10.90.10.116 LEN=44 TOS=0x00
PREC=0x00 TTL=60 ID=11698 PROTO=TCP SPT=4778

27
Interfaces Gráficas

28
Interfaces Gráficas

29
FIM!!!

Sites:
http://www.netfilter.org
http://www.securityfocus.com

30

Вам также может понравиться