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 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.
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?
4 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
5 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.
6 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.
7 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.
8 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.
9 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
10 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
11 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:
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.
13 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:
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) esac exit 0 ;; stop) ;; status) ;; *) ;; regras echo "Iniciando firewall!!" echo "Parando o serviço de firewall" echo iptables -F iptables -L -n echo echo "Uso: firewall (restart stop status)"
15 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.
16 Scripts - Inicializar #! /bin/sh firewall start # colque nesse arquivo o que deseja inicializar no boot do sistema
17 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
Dúvidas? 18
Exercício 19
20 Exercício 1 - Considere o seguinte esquema.
21 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 subredes. 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
22 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
23 Exercício 2 - Criar um script com as regras anteriores e testar seu funcionamento.
Firewall Iptables - Impasses Prof. Andrei Carniel Universidade Tecnológica Federal do Paraná UTFPR E-mail: andreicarniel@utfpr.edu.br / andrei.carniel@gmail.com