quinta-feira, 7 de julho de 2011

Firewall rápido para o Ubuntu Desktop

Introdução

Sabemos que o Ubuntu por padrão não vem com um firewall ativado. Segundo Morimoto (2009), esse fato se deve a política da própria Canonical em afirmar que a configuração padrão dos serviços no Ubuntu são suficientemente seguras não necessitando de um firewall ativo. No entanto como escrito "serviços padrões", nada impede que o usuário instale novos softwares como servidores ssh ou vnc, sem ao mesmo saber ao certo o que está fazendo, abrindo "portões" no sistema. Sendo assim como o ditado que diz que o "seguro morreu de velho" não custa nada criarmos um pequeno script de firewall carregado durante a inicialização do sistema adicionando uma camada extra de segurança.


Começando do começo

Abra um terminal e cria um arquivo com o nome de firewall em /etc/init.d, seguindo os comandos abaixo:

sudo gedit /etc/init.d/firewall

Copie e cole o seguinte conteúdo ao arquivo:

#!/bin/bash

# Script modificado por Irineu T. Nunes

firewall_start(){

# Abre para a interface de loopback.
iptables -A INPUT -i lo -j ACCEPT

##################################################
#PROTECOES
##################################################

# Ignora pings
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Protecao contra IP spoofing
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

# Protege contra synflood
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# Protecao contra ICMP Broadcasting
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Protecao contra ICMP Timestamp
iptables -I INPUT -p icmp --icmp-type timestamp-request -j DROP

# Bloqueia traceroute
iptables -A INPUT -p udp --dport 33435:33525 -j DROP

# Protecoes diversas contra portscanners, ping of death, ataques DoS, etc
iptables -A INPUT -m state --state INVALID -j DROP


#####################################################

##########################
#Coracao do firewall
##########################

#Bloqueia qualquer regra que nao tenha sido liberada acima.
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p udp --dport 1:32000 -j DROP

#Bloqueia protocolo ipv6

#TCP
ip6tables -A INPUT -p tcp --syn -j DROP
ip6tables -A OUTPUT -p tcp --syn -j DROP

#UDP
ip6tables -A INPUT -p udp --dport 1:32000 -j DROP
ip6tables -A OUTPUT -p udp --dport 1:32000 -j DROP

#ICMPv6
ip6tables -A INPUT -p icmp -j DROP
ip6tables -A OUTPUT -p icmp -j DROP
###########################################################


echo "O Firewall esta sendo carregado..."
sleep 1
echo "Firewall Carregado"
sleep 1
}

firewall_stop(){
iptables -F
iptables -t nat -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo 0 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
}

case "$1" in
"start")
firewall_start
;;
"stop")
firewall_stop
echo "O ITN-firewall esta sendo desativado"
sleep 2
echo "ok."
;;
"restart")
echo "O ITN-firewall esta sendo reiniciado"
sleep 1
echo "ok."
firewall_stop; firewall_start
;;
*)
iptables -L -n
esac


Em resumo esse arquivo bloqueia todas as conexões entrantes (permitindo apenas conexões originadas pela própria máquina), adiciona algumas proteções básicas contra escaneamentos e bloqueia completamente o protocolo IPv6 (Apesar de na maioria dos casos o protocolo IPv6 ainda não ser utilizado, ele já esta ativo por padrão em diversas distribuições e equipamentos de redes, muitas vezes a preocupação limita-se em bloquear o protocolo IPv4 esquecendo-se completamente da existência do IPv6).

Na linha iptables -A INPUT -p udp --dport 1:32000 -j DROP foram bloqueadas todas as conexões de entrada das portas 1 a 32000 do protocolo UDP. No entanto essa é uma medida bastante extrema. Caso você comece a notar problemas de conexões em softwares que utilizam o protocolo UDP (Torrents, por exemplo), ou mesmo situações de erros de navegação em sites, uma medida seria um bloqueio mais cauteloso das portas conhecidas:

iptables -A INPUT -p udp --dport 1:1023 -j DROP


Finalizando

Salve o arquivo e execute os seguintes comando no terminal:

chmod +x /etc/init.d/firewall

update-rc.d firewall defaults

/etc/init.d/firewall start

O primeiro comando da as permissões de execução para seu script firewall.
O segundo adiociona seu script a inicialização do sistema.
O terceiro inicia seu firewall para já ficar ativo :D.

Conclusão

Agora você pode dormir mais tranquilo, seu sistema já está com o firewall ativo em em plena atividade, podendo ainda ser implementadas novas regras como a liberação de algumas portas para acesso externo se autorizado por você, mas isso já é outra história. :D

Referências

MORIMOTO, Carlos Eduardo. Linux guia prático. Porto Alegre: Sul Editores, 2009.

























Nenhum comentário:

Postar um comentário