-
Servidor Wireless
Blz galera, eu montei um servidor de internet wireless (squid, DNS, cadastro de clientes com IP amarrado ao MAC, CBQ - controle de banda e firewall), estou aqui para mostrar o script do firewall que criei através de vários artigos da internet.
Já faz um mês que o servidor está funcionando com essas regras.
Gostaria que vocês dessem uma olhada nele e ver se tem alguma redundância ou erro ou então o que vocês acrecentariam nele.
Valeu galera, aguardarei seu comentarios.
Segue abaixo o firewall.
#!/bin/bash
#Configuração do Firewall através do iptables
# Declaração de Variavel
LISTA="/etc/provedor/clientes"
PROGRAMA="/etc/init.d/firewall"
# portas liberadas
PORTSLIB="/etc/provedor/portasliberadas"
# Interfaces de Rede
LAN=eth1
WAN=eth0
# Remove os arquivos
rm -f /etc/shaper/*
# Ativa modulos
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe iptable_mangle
modprobe ipt_limit
modprobe ipt_mark
modprobe ipt_MARK
case "$1" in
start)
# mensagem de inicialização
echo
echo "| Script de Firewall - IPTABLES"
echo "| Criado por: Thales Eduardo"
echo "| Contribuindo por: Pesquisas no Google e"
echo "| o viva o linux"
echo "| Técnico em Informática"
echo "| [email protected]"
echo "| Uso: firewall start|stop|status|restart"
echo
echo "========================================================= |"
echo "|:INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS :|"
echo "|: DO IPTABLES :|"
echo "========================================================= |"
# limpa as tabelas das regras, nada a ser mudado aqui
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X
iptables -t mangle -F
iptables -t mangle -X
# Determina a politica padrao - NEGA
iptables -t filter -P FORWARD DROP
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
# Habilita roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "ativado o redirecionamento no arquivo ip_forward"
echo "ON ...................................................... [ OK ]"
#habilitando o fluxo interno entre os processos
iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
echo "ativado o fluxo interno entre os processos"
echo "ON ...................................................... [ OK ]"
# Abre Portas
#iptables -A INPUT -p tcp --destination-port 2756 -j ACCEPT
#iptables -A INPUT -p tcp --destination-port 53 -j ACCEPT
#iptables -A INPUT -p tcp --destination-port 3128 -j ACCEPT
#iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
#liberar as portas principais do servidor
for i in `cat $PORTSLIB`; do
iptables -A INPUT -p tcp --dport $i -j ACCEPT
iptables -A FORWARD -p tcp --dport $i -j ACCEPT
iptables -A OUTPUT -p tcp --sport $i -j ACCEPT
done
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT -m state --state RELATED -j ACCEPT
iptables -I OUTPUT -p icmp -o $WAN -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
echo "ativado as portas abertas para estabelecer conexões"
echo "ativado a liberação das portas principais do servidor"
echo "ON ...................................................... [ OK ]"
#Bloqueio ping da morte
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
iptables -N PING-MORTE
iptables -A INPUT -p icmp --icmp-type echo-request -j PING-MORTE
iptables -A PING-MORTE -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A PING-MORTE -j DROP
echo "ativado o bloqueio a tentativa de ataque do tipo ping da morte"
echo "ON ...................................................... [ OK ]"
#bloquear ataque do tipo SYN-FLOOD
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
iptables -N syn-flood
iptables -A INPUT -i $WAN -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
echo "ativado o bloqueio a tentativa de ataque do tipo SYN-FLOOD"
echo "ON ...................................................... [ OK ]"
#Bloqueio de ataque ssh de força bruta
iptables -N SSH-BRUT-FORCE
iptables -A INPUT -i $WAN -p tcp --dport 2756 -j SSH-BRUT-FORCE
iptables -A SSH-BRUT-FORCE -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A SSH-BRUT-FORCE -j DROP
echo "ativado o bloqueio a tentativa de ataque do tipo SSH-BRUT-FORCE"
echo "ON ...................................................... [ OK ]"
#bloqueio Anti-Spoofings
iptables -A INPUT -s 10.0.0.0/8 -i $WAN -j DROP
iptables -A INPUT -s 127.0.0.0/8 -i $WAN -j DROP
iptables -A INPUT -s 172.16.0.0/12 -i $WAN -j DROP
iptables -A INPUT -s 192.168.1.0/16 -i $WAN -j DROP
echo "ativado o bloqueio de tentativa de ataque do tipo Anti-spoofings"
echo "ON ...................................................... [ OK ]"
#Bloqueio de scanners ocultos (Shealt Scan)
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
echo "bloqueado scanners ocultos"
echo "ON ...................................................... [ OK ]"
# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
#iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
#iptables -A FORWARD -m unclean -j DROP
# Marcacao de pacotes para controle de banda. Mude a faixa de IPs de acordo com a sua
#for i in `seq 2 254`
#do
#iptables -t mangle -A POSTROUTING -s 192.168.0.$i -j MARK --set-mark $i
#done
# Iniciando regras de bloqueio e liberacao de clientes
for CLIENTE in `cat $LISTA`; do
CODIGO=`echo $CLIENTE | awk -F "|" '{print $1}'`
NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
IP=`echo $CLIENTE | awk -F "|" '{print $3}'`
CON=`echo $CLIENTE | awk -F "|" '{print $4}'`
DOWN=`echo $CLIENTE | awk -F "|" '{print $5}'`"kbit"
UP=`echo $CLIENTE | awk -F "|" '{print $6}'`"kbit"
MAC=`echo $CLIENTE | awk -F "|" '{print $7}'`
PRIO=`echo $CLIENTE | awk -F "|" '{print $8}'`
STAT=`echo $CLIENTE | awk -F "|" '{print $9}'`
MARK=`echo $IP | cut -d '.' -f4`
# checa se esta ativado
if [ "$STAT" = "A" ]; then
UPLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME"_upload"
DOWNLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME"_download"
touch $UPLOAD
touch $DOWNLOAD
chown 755 /etc/shaper/*
# eth1 corresponde a interface de rede conectada aos usuarios
# mude se necessario
echo "DEVICE=$LAN,100Mbit,10Mbit" >> $UPLOAD
echo "RATE=$CON""Kbit" >> $UPLOAD
echo "WEIGHT=$UP" >> $UPLOAD
echo "PRIO=$PRIO" >> $UPLOAD
echo "BOUNDED=yes" >> $UPLOAD
echo "ISOLATED=yes" >> $UPLOAD
echo "MARK=30" >> $UPLOAD
echo "DEVICE=$LAN,100Mbit,10Mbit" >> $DOWNLOAD
echo "RATE=$CON""Kbit" >> $DOWNLOAD
echo "WEIGHT=$DOWN" >> $DOWNLOAD
echo "PRIO=$PRIO" >> $DOWNLOAD
echo "RULE=""$IP" >> $DOWNLOAD
echo "BOUNDED=yes" >> $DOWNLOAD
echo "ISOLATED=yes" >> $DOWNLOAD
iptables -t filter -A FORWARD -d 0/0 -s $IP -m mac --mac-source $MAC -j ACCEPT
iptables -t filter -A FORWARD -d $IP -s 0/0 -j ACCEPT
iptables -t filter -A INPUT -s $IP -d 0/0 -m mac --mac-source $MAC -j ACCEPT
iptables -t filter -A OUTPUT -s $IP -d 0/0 -j ACCEPT
iptables -t mangle -A PREROUTING -s $IP -j MARK --set-mark $MARK
#echo "iptables -t nat -A POSTROUTING -s $IP"" -j MASQUERADE" >> /etc/nat/users.sh
#echo "iptables -A FORWARD -s $IP"" -j ACCEPT" >> /etc/nat/users.sh
#echo "iptables -A FORWARD -d $IP"" -j ACCEPT" >> /etc/nat/users.sh
#arp -s $IP $MAC
# se não bloqueia
else
iptables -t filter -A FORWARD -d 0/0 -s $IP -m mac --mac-source $MAC -j DROP
#iptables -t filter -A FORWARD -d $IP -s 0/0 -j DROP
iptables -t filter -A INPUT -s $IP -d 0/0 -m mac --mac-source $MAC -j DROP
iptables -t filter -A OUTPUT -s $IP -m mac --mac-source $MAC -j DROP
fi
done
echo "Ativado a amarração do ip ao mac"
echo "ON ...................................................... [ OK ]"
# Habilita PROXY TRANSPARENTE
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
echo "Proxy Transparente ativado"
echo "ON ...................................................... [ OK ]"
# ativar o mascaramento
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
# entre redes
#iptables -t filter -A FORWARD -d 192.168.0.0/32 192.168.0.0/32 -j DROP
#Fecha o resto - NEGA
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP
# carrega controlador de banda
/etc/init.d/shaper start
echo
echo "========================================================= |"
echo "::TERMINADA A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS::|"
echo ":: DO IPTABLES :: |"
echo "========================================================= |"
echo "FIREWALL ATIVADO - SISTEMA PREPARADO"
echo
;;
stop)
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t mangle -F
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
/etc/init.d/shaper stop
echo "FIREWALL DESCARREGADO - SISTEMA LIBERADO"
;;
status)
echo -n "Checando Status do FireWall: "
iptables -L
iptables -L -t nat
;;
restart)
$PROGRAMA stop
$PROGRAMA start
;;
*)
echo "Use: $N {start|stop|status|restart}" >&2
echo -e "{TEXTO}33[01;31mATENÇÃO"; tput sgr0
echo "Você não colocou nenhum argumento ou algum conhecido, então Por Padrão será dado em 5 segundos um restart no firewall"
sleep 5
$PROGRAMA restart
exit 1
esac
exit 0
## FIM DO ARQUIVO ##