O Netfilter é um módulo que fornece ao sistema operacional
Linux as funções de firewall, NAT e log dos dados que trafegam por rede de computadores.
IPtables é o nome da ferramenta utilizada pelo usuário que permite a criação de regras de Firewall e NATs. Apesar de, tecnicamente, o IPtables ser apenas uma ferramenta que controla o módulo Netfilter, o nome "IPtables" é frequentemente utilizado como referência ao conjunto completo de funcionalidades do Netfilter. O IPtables é parte de todas as distribuições modernas do
GNU/Linux.
Fonte:
Netfilter – Wikipédia, a enciclopédia livre
Antes de configurar as regras de Firewall, instale os pacotes:
# apt-get install build-essential
# apt-get install xtables-addons-common
Este último pacote servirá para bloquear a execução de aplicativos torrent.
Crie o arquivo de Firewall com o nome que desejar:
# vi rc.firewall.sh
E insira as informações abaixo:
#!/bin/bash
#------------------------------#
# CONFIGURAÇÃO INICIAL #
#------------------------------#
IPT=/sbin/iptables
#----------------------#
# FUNÇÕES #
#----------------------#
iniciar(){
#-----------------------------------------#
# Proteção contra ataques externos #
#-----------------------------------------#
# Manter a política drop por padrão no FORWARD
$IPT -P FORWARD DROP
# Proteções contra ataques
$IPT -A INPUT -m state --state INVALID -j DROP
# Ping flood (ping da morte)
$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Protege contra os ataques do tipo "Syn-flood, DoS, etc"
$IPT -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
# Permitir repassamento (NAT, DNAT, SNAT) de pacotes estabilizados e os relatados ...
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Logar os pacotes mortos por inatividade
$IPT -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG
# Protege contra port scanners avançados (Ex.: nmap)
$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Protege contra pacotes que podem procurar e obter informações da rede interna
$IPT -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
# Bloqueio de conteúdo
# Crie o arquivo blacklist e aponte para a sua exata localização no loop abaixo
# Dentro dessa lista você vai por palavras como sexo, porno, pornografia entre outros
# Esta regra de iptables vai analisar o conteúdo do pacote e se achar uma das strings que estão
# mencionadas
for i in `cat /root/blacklist`
do
$IPT -I FORWARD -m string --string "$i" --algo bm -j REJECT
done
# Bloquear torrent ( Precisa ter o módulo xtables-addons-common instalado )
$IPT -I FORWARD -p tcp -m ipp2p --bit -j DROP
$IPT -I FORWARD -p udp -m ipp2p --bit -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --edk -j DROP
$IPT -I FORWARD -p udp -m ipp2p --edk -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --dc -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p udp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p udp -m ipp2p --kazaa -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --ares -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --soul -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --winmx -j DROP
$IPT -I FORWARD -p tcp -m ipp2p --apple -j DROP
$IPT -t mangle -A PREROUTING -m ipp2p --bit -j DROP
#-------------------------------------------#
# Liberar portas TCP para a rede local #
#-------------------------------------------#
PORTAS_LIBERADAS="20 21 25 53 80 81 110 443 465 587 995"
for i in $PORTAS_LIBERADAS
do
$IPT -A FORWARD -d 0/0 -p tcp --dport $i -j ACCEPT
$IPT -A FORWARD -d 0/0 -p tcp --sport $i -j ACCEPT
done
#-------------------------------------------#
# Liberar portas UDP para a rede local #
#-------------------------------------------#
PORTAS_LIBERADAS="20 21 53"
for i in $PORTAS_LIBERADAS
do
$IPT -A FORWARD -d 0/0 -p udp --dport $i -j ACCEPT
$IPT -A FORWARD -d 0/0 -p udp --sport $i -j ACCEPT
done
# No arquivo urlbad, você bota endereços específicos para bloquear como www.youtube.com
# Evite por a palavra youtube no arquivo blacklist, pois, aí o Google não vai abrir por conta que a página
# deste contêm referência ao YouTube. Prefira utilizar a regra abaixo que bloqueia qualquer urlbad para a rede local
# a minha rede local é 10.10.10.0/24
for i in `cat /root/urlbad`
do
$IPT -I FORWARD -s $i -d 10.10.10.0/24 -j DROP
$IPT -I FORWARD -s 10.10.10.0/24 -d $i -j DROP
done
#-----------------------------------------------------------#
# Liberação de HOSTS para acessar FULL a internet #
#-----------------------------------------------------------#
# Aqui você põem os IPs que terão acesso FULL, os demais terão as restrições das regras anteriores. Basta apenas pôr o número
# final do IP e ajustar a regra à sua rede local
HOSTS_LIBERADOS="102 110"
for i in $HOSTS_LIBERADOS
do
$IPT -I FORWARD -d 10.10.10.$i -j ACCEPT
$IPT -I FORWARD -s 10.10.10.$i -j ACCEPT
done
}
parar(){
#------------------------------------------------#
# Apagando o conteúdo de todas as tabelas #
#------------------------------------------------#
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
}
case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parâmetros start ou stop"
esac
Uma dica muito importante é pôr esse arquivo,
rc.firewall.sh, para rodar primeiro que o script do
failover.sh, pois este último realiza uma "limpeza" nas regras do Netfilter (IPtables). Assim, os dois scripts irão funcionar normalmente.
A execução do script
rc.firewall.sh é da seguinte forma:
Iniciar o script:
# ./rc.firewall.sh start
Parar o script:
# ./rc.firewall.sh stop
Restartar o script:
# ./rc.firewall.sh restart
Veja como ficou o meu arquivo
/etc/rc.local:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/root/rc.firewall.sh start
/root/failover.sh &
exit 0
Conclusão
Bom pessoal, com isso finalizo este artigo.
Todos os scripts foram testados em laboratórios virtuais com sucesso, porém, pode haver melhorias sim, nestes, e vocês podem ajudar a propagar o conhecimento do GNU/Linux.
Recomendo complementar os estudos com outros artigos aqui na comunidade VOL que ajudarão, e muito, a complementar o seu conhecimento.
Boa sorte a todos e bons estudos.