Firewall Iptables - Impasses
Prof. Andrei Carniel
Universidade Tecnológica Federal do Paraná – UTFPR
E-mail: andreicarniel@utfpr.edu.br / andrei.carniel@gmail.com
Impasses
• Um dos principais motivos de invasões, é erro humano na
configuração do firewall.
• Más que também pode gerar bloqueios inesperados na rede interna.
• Vamos estudar algumas maneiras de gerar bloqueios.
2
Impasses
• Por exemplo:
• Ao se fazer determinadas regras, devemos prever o retorno. Assim,
digamos que exista a seguinte situação:
▫ #iptables -P FORWARD DROP
▫ #iptables -A FORWARD -s 10.0.0.0/8 -d 172.29.0.0/16 -j
ACCEPT
• Neste caso estamos permitindo somente o tráfego entre 2 sub-redes
e bloqueando o resto. Certo?
3
Impasses
• Com as regras anteriores, fechamos todo o FORWARD e depois
abrimos da sub-rede 10.0.0.0 para a sub-rede 172.29.0.0.
• No entanto, não tornamos possível a resposta da sub-rede
172.29.0.0 para a sub-rede 10.0.0.0.
• O correto, então, seria:
▫ #iptables -P FORWARD DROP
▫ #iptables -A FORWARD -s 10.0.0.0/8 -d 172.29.0.0/16 -j
ACCEPT
▫ #iptables -A FORWARD -d 10.0.0.0/8 -s 172.29.0.0/16 -j
ACCEPT
4
Exemplos de Regras de Firewall (1/4)
• Exemplos:
▫ #iptables -A FORWARD -s 172.29.0.0/16
-d www.chat.com.br -j DROP
• Os pacotes oriundos da sub-rede 172.29.0.0 (máscara 255.255.0.0) e
destinados ao host www.chat.com.br deverão ser descartados.
▫ #iptables -A FORWARD -d 172.29.0.0/16
-s www.chat.com.br -j DROP
• Os pacotes destinados à sub-rede 172.29.0.0/16 e oriundos do host
www.chat.com.br deverão ser descartados.
5
Exemplos de Regras de Firewall (2/4)
▫ #iptables –L -n
• Lista todas as regras existentes.
▫ #iptables -F
• Apaga todas as regras sem alterar a política.
▫ #iptables -P FORWARD DROP
• Estabelece uma política de proibição inicial de passagem de pacotes
entre sub-redes.
6
Exemplos de Regras de Firewall (3/4)
▫ #iptables -A FORWARD -s 172.29.150.100 -p icmp -j
ACCEPT
• Os pacotes icmp oriundos do host 172.29.150.100 e destinados a
qualquer lugar deverão ser aceitos.
▫ #iptables -A FORWARD -s 172.29.150.123 -p tcp --sport
80 -j LOG
• O tráfego de pacotes TCP oriundos da porta 80 do host
172.29.150.123 e destinados a qualquer lugar deverá ser gravado em
log. No caso /var/log/messages.
▫ #iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
• Os pacotes TCP destinados à porta 25 de qualquer host deverão ser
aceitos.
7
Exemplos de Regras de Firewall (4/4)
▫ #iptables -A FORWARD –m iprange –-src-range
172.29.150.100-172.29.150.150 -p icmp -j ACCEPT
• Os pacotes icmp oriundos do faixa 172.29.150.100 a 172.29.150.150
e destinados a qualquer lugar deverão ser aceitos.
▫ #iptables -A FORWARD –m iprange –-dst-range
172.29.150.100-172.29.150.150 -p icmp -j ACCEPT
• Os pacotes icmp destinados do faixa 172.29.150.100 a
172.29.150.150 e destinados a qualquer lugar deverão ser aceitos.
8
Extensões (1/4)
• As extensões permitem filtragens especiais, principalmente contra
ataques de hackers. Quando necessárias, devem ser as primeiras
linhas do firewall. As mais importantes são:
• Contra Ping
▫ #iptables -A FORWARD -p icmp --icmp-type echo-request
-j DROP
• Contra Ping of Death
▫ #iptables -A FORWARD -p icmp --icmp-type echo-request
-m limit --limit 1/s -j ACCEPT
• Logo em seguida:
▫ #iptables -A FORWARD -p icmp --icmp-type echo-request
-j DROP
9
Extensões (2/4)
• Contra ataques Syn-flood
▫ #iptables -A FORWARD -p tcp -m limit --limit 1/s -j
ACCEPT
• Contra Port scanners avançados (nmap)
▫ #iptables -A FORWARD -p tcp --tcp-flags ALL
SYN,ACK,FIN,RST -m limit --limit 1/s -j ACCEPT
• Lembre-se de usar a linha de bloqueio após os 2 exemplos.
• Mais proteção
• Existe, ainda, uma regra muito importante que não é extensão mas
também pode ser utilizada como segurança. É a proteção contra
pacotes danificados ou suspeitos.
▫ #iptables -A FORWARD -m unclean -j DROP
10
Extensões (3/4)
• Logando tentativa de acesso a determinadas portas
▫ #iptables -A INPUT -p tcp --dport 21 -i eth0 -j LOG --
log-level 6 --log-prefix “FIREWALL:ftp: “
▫ #iptables -A INPUT -p tcp --dport 23 -i eth0 -j LOG --
log-level 6 --log-prefix “FIREWALL:telnet: “
▫ #iptables -A INPUT -p tcp --dport 110 -i eth0 -j LOG -
-log-level 6 --log-prefix “FIREWAL:pop3: “
11
Extensões (4/4)
• --log-level, define um nível para o log, seguido de um número
de nível ou nome.
▫ Os nome válidos (sensíveis a maiúsculas/minúsculas) são `debug',
`info', `notice', `warning', `err', `crit', `alert' and `emerg',
correspondendo a números de 7 até 0.
• --log-prefix, define um prefixo para o log de até 29 caracteres.
12
Scripts
• O Iptables não salva em nenhum local as regras.
• Ou seja se reiniciarmos o servidor as regras criadas não estarão mais
ativas.
• Para resolver essa situação teremos de usar um script.
• Exemplo:
13
Scripts - Firewall
#! /bin/sh
regras(){
iptables -A INPUT -p TCP -s 192.168.4.6 - -dport 22 -j ACCEPT
iptables -A INPUT -p TCP --dport 22 -j DROP
}
case "$1" in
start)
regras
echo "Iniciando firewall!!"
;;
stop)
echo "Parando o serviço de firewall"
echo
iptables -F
;;
status)
iptables -L -n
;;
*)
echo
echo "Uso: firewall (restart|stop|status)"
;;
esac
exit 0
14
Scripts
• Esse script deve ser colocado dentro da pasta usr/bin, dessa forma
você poderá executar o mesmo de qualquer diretório da máquina.
• Obs: lembre de mudar a permissão do arquivo (chmod 755).
• Logo em seguida crie um novo script chamado inicializar
dentro da pasta usr/bin.
• Dentro desse arquivo coloque os serviços que deseja inicializar no
boot do sistema.
15
Scripts - Inicializar
#! /bin/sh
firewall start
# colque nesse arquivo o que deseja inicializar no
boot do sistema
16
Scripts
• Depois de criarmos o script inicializar devemos criar um link
simbólico para a pasta /etc/init.d, que o local que ficam os
serviços que devem ser inicializados no boot da máquina.
▫ #ln -s /usr/bin/inicializar /etc/init.d
• Para ativar o script inicializar na inicialização do sistema agora
devemos utilizar o comando:
▫ #update-rc.d -f inicializar defaults
17
Dúvidas?
18
Exercício
19
Exercício
• 1 - Considere o seguinte esquema.
20
Exercício
a) Crie regras para R (policy = ACCEPT).
• 1 – Proibir a utilização do DNS 8.8.8.8 somente para as máquinas das sub-
redes.
• 2 – A rede 172.29/16 só poderá enviar e-mails.
• 3 – A rede 192.168/24 só poderá receber e-mails.
• 4 – Só será possível efetuar telnet pela máquina B e somente para o
Servidor S. Todos os outros devem estar bloqueados.
iptables -A FORWARD -s 192.168.0.0/24 -d 8.8.8.8 -p udp --dport 53 -j
DROP
iptables -A FORWARD -s 172.29.0.0/16 -d 8.8.8.8 -p udp --dport 53 -j DROP
iptables -A FORWARD -d 172.29.0.0/16 -p tcp --dport 110 -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 587 -j DROP
iptables -A FORWARD ! -s 172.29.0.3 -d 200.143.81.25 -p tcp --dport 22 -j
DROP
21
Exercício
b) Crie regras para S (policy = DROP).
• 1 – Permita conexões via telnet de B.
• 2 – Liberar conexões de SSH somente para as sub-redes e o IP
182.29.10.30.
• 3 – Permitir somente o envio de e-mails.
• 4 – Permitir o funcionamento do protocolo FTP.
iptables -A INPUT -p TCP --dport 23 - j ACCEPT
iptables -A INPUT-s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT-s 172.29.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT-s 182.29.10.30 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
22
Exercício
• 2 - Criar um script com as regras anteriores e testar seu funcionamento.
23
Firewall Iptables - Impasses
Prof. Andrei Carniel
Universidade Tecnológica Federal do Paraná – UTFPR
E-mail: andreicarniel@utfpr.edu.br / andrei.carniel@gmail.com

Aula 8.2 - Iptables Impasses e Scripts

  • 1.
    Firewall Iptables -Impasses Prof. Andrei Carniel Universidade Tecnológica Federal do Paraná – UTFPR E-mail: andreicarniel@utfpr.edu.br / andrei.carniel@gmail.com
  • 2.
    Impasses • Um dosprincipais motivos de invasões, é erro humano na configuração do firewall. • Más que também pode gerar bloqueios inesperados na rede interna. • Vamos estudar algumas maneiras de gerar bloqueios. 2
  • 3.
    Impasses • Por exemplo: •Ao se fazer determinadas regras, devemos prever o retorno. Assim, digamos que exista a seguinte situação: ▫ #iptables -P FORWARD DROP ▫ #iptables -A FORWARD -s 10.0.0.0/8 -d 172.29.0.0/16 -j ACCEPT • Neste caso estamos permitindo somente o tráfego entre 2 sub-redes e bloqueando o resto. Certo? 3
  • 4.
    Impasses • Com asregras anteriores, fechamos todo o FORWARD e depois abrimos da sub-rede 10.0.0.0 para a sub-rede 172.29.0.0. • No entanto, não tornamos possível a resposta da sub-rede 172.29.0.0 para a sub-rede 10.0.0.0. • O correto, então, seria: ▫ #iptables -P FORWARD DROP ▫ #iptables -A FORWARD -s 10.0.0.0/8 -d 172.29.0.0/16 -j ACCEPT ▫ #iptables -A FORWARD -d 10.0.0.0/8 -s 172.29.0.0/16 -j ACCEPT 4
  • 5.
    Exemplos de Regrasde Firewall (1/4) • Exemplos: ▫ #iptables -A FORWARD -s 172.29.0.0/16 -d www.chat.com.br -j DROP • Os pacotes oriundos da sub-rede 172.29.0.0 (máscara 255.255.0.0) e destinados ao host www.chat.com.br deverão ser descartados. ▫ #iptables -A FORWARD -d 172.29.0.0/16 -s www.chat.com.br -j DROP • Os pacotes destinados à sub-rede 172.29.0.0/16 e oriundos do host www.chat.com.br deverão ser descartados. 5
  • 6.
    Exemplos de Regrasde Firewall (2/4) ▫ #iptables –L -n • Lista todas as regras existentes. ▫ #iptables -F • Apaga todas as regras sem alterar a política. ▫ #iptables -P FORWARD DROP • Estabelece uma política de proibição inicial de passagem de pacotes entre sub-redes. 6
  • 7.
    Exemplos de Regrasde Firewall (3/4) ▫ #iptables -A FORWARD -s 172.29.150.100 -p icmp -j ACCEPT • Os pacotes icmp oriundos do host 172.29.150.100 e destinados a qualquer lugar deverão ser aceitos. ▫ #iptables -A FORWARD -s 172.29.150.123 -p tcp --sport 80 -j LOG • O tráfego de pacotes TCP oriundos da porta 80 do host 172.29.150.123 e destinados a qualquer lugar deverá ser gravado em log. No caso /var/log/messages. ▫ #iptables -A FORWARD -p tcp --dport 25 -j ACCEPT • Os pacotes TCP destinados à porta 25 de qualquer host deverão ser aceitos. 7
  • 8.
    Exemplos de Regrasde Firewall (4/4) ▫ #iptables -A FORWARD –m iprange –-src-range 172.29.150.100-172.29.150.150 -p icmp -j ACCEPT • Os pacotes icmp oriundos do faixa 172.29.150.100 a 172.29.150.150 e destinados a qualquer lugar deverão ser aceitos. ▫ #iptables -A FORWARD –m iprange –-dst-range 172.29.150.100-172.29.150.150 -p icmp -j ACCEPT • Os pacotes icmp destinados do faixa 172.29.150.100 a 172.29.150.150 e destinados a qualquer lugar deverão ser aceitos. 8
  • 9.
    Extensões (1/4) • Asextensões permitem filtragens especiais, principalmente contra ataques de hackers. Quando necessárias, devem ser as primeiras linhas do firewall. As mais importantes são: • Contra Ping ▫ #iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP • Contra Ping of Death ▫ #iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT • Logo em seguida: ▫ #iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP 9
  • 10.
    Extensões (2/4) • Contraataques Syn-flood ▫ #iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT • Contra Port scanners avançados (nmap) ▫ #iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK,FIN,RST -m limit --limit 1/s -j ACCEPT • Lembre-se de usar a linha de bloqueio após os 2 exemplos. • Mais proteção • Existe, ainda, uma regra muito importante que não é extensão mas também pode ser utilizada como segurança. É a proteção contra pacotes danificados ou suspeitos. ▫ #iptables -A FORWARD -m unclean -j DROP 10
  • 11.
    Extensões (3/4) • Logandotentativa de acesso a determinadas portas ▫ #iptables -A INPUT -p tcp --dport 21 -i eth0 -j LOG -- log-level 6 --log-prefix “FIREWALL:ftp: “ ▫ #iptables -A INPUT -p tcp --dport 23 -i eth0 -j LOG -- log-level 6 --log-prefix “FIREWALL:telnet: “ ▫ #iptables -A INPUT -p tcp --dport 110 -i eth0 -j LOG - -log-level 6 --log-prefix “FIREWAL:pop3: “ 11
  • 12.
    Extensões (4/4) • --log-level,define um nível para o log, seguido de um número de nível ou nome. ▫ Os nome válidos (sensíveis a maiúsculas/minúsculas) são `debug', `info', `notice', `warning', `err', `crit', `alert' and `emerg', correspondendo a números de 7 até 0. • --log-prefix, define um prefixo para o log de até 29 caracteres. 12
  • 13.
    Scripts • O Iptablesnão salva em nenhum local as regras. • Ou seja se reiniciarmos o servidor as regras criadas não estarão mais ativas. • Para resolver essa situação teremos de usar um script. • Exemplo: 13
  • 14.
    Scripts - Firewall #!/bin/sh regras(){ iptables -A INPUT -p TCP -s 192.168.4.6 - -dport 22 -j ACCEPT iptables -A INPUT -p TCP --dport 22 -j DROP } case "$1" in start) regras echo "Iniciando firewall!!" ;; stop) echo "Parando o serviço de firewall" echo iptables -F ;; status) iptables -L -n ;; *) echo echo "Uso: firewall (restart|stop|status)" ;; esac exit 0 14
  • 15.
    Scripts • Esse scriptdeve ser colocado dentro da pasta usr/bin, dessa forma você poderá executar o mesmo de qualquer diretório da máquina. • Obs: lembre de mudar a permissão do arquivo (chmod 755). • Logo em seguida crie um novo script chamado inicializar dentro da pasta usr/bin. • Dentro desse arquivo coloque os serviços que deseja inicializar no boot do sistema. 15
  • 16.
    Scripts - Inicializar #!/bin/sh firewall start # colque nesse arquivo o que deseja inicializar no boot do sistema 16
  • 17.
    Scripts • Depois decriarmos o script inicializar devemos criar um link simbólico para a pasta /etc/init.d, que o local que ficam os serviços que devem ser inicializados no boot da máquina. ▫ #ln -s /usr/bin/inicializar /etc/init.d • Para ativar o script inicializar na inicialização do sistema agora devemos utilizar o comando: ▫ #update-rc.d -f inicializar defaults 17
  • 18.
  • 19.
  • 20.
    Exercício • 1 -Considere o seguinte esquema. 20
  • 21.
    Exercício a) Crie regraspara R (policy = ACCEPT). • 1 – Proibir a utilização do DNS 8.8.8.8 somente para as máquinas das sub- redes. • 2 – A rede 172.29/16 só poderá enviar e-mails. • 3 – A rede 192.168/24 só poderá receber e-mails. • 4 – Só será possível efetuar telnet pela máquina B e somente para o Servidor S. Todos os outros devem estar bloqueados. iptables -A FORWARD -s 192.168.0.0/24 -d 8.8.8.8 -p udp --dport 53 -j DROP iptables -A FORWARD -s 172.29.0.0/16 -d 8.8.8.8 -p udp --dport 53 -j DROP iptables -A FORWARD -d 172.29.0.0/16 -p tcp --dport 110 -j DROP iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j DROP iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 587 -j DROP iptables -A FORWARD ! -s 172.29.0.3 -d 200.143.81.25 -p tcp --dport 22 -j DROP 21
  • 22.
    Exercício b) Crie regraspara S (policy = DROP). • 1 – Permita conexões via telnet de B. • 2 – Liberar conexões de SSH somente para as sub-redes e o IP 182.29.10.30. • 3 – Permitir somente o envio de e-mails. • 4 – Permitir o funcionamento do protocolo FTP. iptables -A INPUT -p TCP --dport 23 - j ACCEPT iptables -A INPUT-s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT iptables -A INPUT-s 172.29.0.0/16 -p tcp --dport 22 -j ACCEPT iptables -A INPUT-s 182.29.10.30 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp --dport 587 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT 22
  • 23.
    Exercício • 2 -Criar um script com as regras anteriores e testar seu funcionamento. 23
  • 24.
    Firewall Iptables -Impasses Prof. Andrei Carniel Universidade Tecnológica Federal do Paraná – UTFPR E-mail: andreicarniel@utfpr.edu.br / andrei.carniel@gmail.com