dinho_abreu
(usa Debian)
Enviado em 28/01/2014 - 12:38h
Prezados
Tenho um firewall criado em script, porem meu firewall esta meio estranho tem duas portas liberada que e ssh 22xx e do squid 3128, mais quando coloco outras portas para libera como 25,110,80,3389 etc
estão acusando bloqueada fiz alguns testes, ate mesmo em aluns site de teste de porta como:
https://www.grc.com
http://porttest.net
também acusa portas bloqueada não entendi o motivo, já estou ficando louco aqui.
Sera se alguem pode me dar uma força ai.
Fico no aguardo, valeu ! Segue abaixo meu Firewall ?
===================================================================
#!/bin/sh
#Declaração de variaveis
PATH=/sbin:/bin:/usr/sbin:/usr/bin
IPTABLES="/usr/local/sbin/iptables"
MACLIST="/etc/configuracao_personalizada/macsliberadosfirewall"
PROGRAMA="/etc/init.d/firewall"
#portas liberadas e bloqueadas
PORTSLIB="/etc/configuracao_personalizada/portslib"
PORTSBLO="/etc/configuracao_personalizada/portsblo"
#Interfaces de Rede
WAN=eth0
LAN=eth1
REDE="192.168.1.0/24"
SITESNEGADOS=/etc/configuracao_personalizada/sitesnegados
REDILIST="/etc/configuracao_personalizada/listaderedirecionamento"
# Os diversos módulos do iptables são chamdos através do modprobe
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat
/sbin/modprobe ip_queue
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_raw
/sbin/modprobe ipt_mac
/sbin/modprobe ipt_string
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ipt_state
/sbin/modprobe ipt_multiport
/sbin/modprobe iptable_mangle
/sbin/modprobe ipt_tos
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_mark
/sbin/modprobe ipt_MARK
case "$1" in
start)
#mensagem de inicialização
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "| Script de Firewall - IPTABLES"
echo "| Criado por: Haroldo Abreu"
echo "| Membros da comunidade viva o linux"
echo "| Administrador de Rede"
echo "| Uso: firewall start|stop|restart"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo
echo "=========================================================|"
echo "|:INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS:|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -Z
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -Z
$IPTABLES -t raw -F
$IPTABLES -t raw -X
$IPTABLES -t raw -Z
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
# ativar o redirecionamento no arquivo ip_forward
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 ]"
#iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.20:2235
#iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2235 -j DNAT --to-destination 192.168.1.20
#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 $HOSTNAME"
echo "ON .................................................[ OK ]"
#bloquear acesso de sites negados a rede interna
for i in `cat $SITESNEGADOS`; do
$IPTABLES -t filter -A FORWARD -s $REDE -d $i -j DROP
$IPTABLES -t filter -A FORWARD -s $i -d $REDE -j DROP
$IPTABLES -t filter -A INPUT -s $i -j DROP
$IPTABLES -t filter -A OUTPUT -d $i -j DROP
done
echo "ativado o bloqueio de envio de pacotes com origem aos sites negados"
echo "ON .................................................[ OK ]"
for i in `cat $REDILIST`; do
REDIPROTO=`echo $i | cut -d ';' -f 1` #recebe o protocolo a ser redirecionado
REDIPORTA=`echo $i | cut -d ';' -f 2` #recebe a porta a ser redirecionado
REDIP=`echo $i | cut -d ';' -f 3` #recebe o ip a ser redirecionado
REDISERVICO=`echo $i | cut -d ';' -f 4` #recebe o nome do serviço
REDIHOST=`echo $i | cut -d ';' -f 5` #recebe o nome do host
$IPTABLES -A FORWARD -p $REDIPROTO --dport $REDIPORTA -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p $REDIPROTO -i $WAN --dport $REDIPORTA -j DNAT --to $REDIP
echo "ativado o serviço $REDISERVICO para o $REDIHOST"
done # fim do comando laço for
echo "ativado o redirecionamento das portas da WAN para LAN"
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 22 -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 de portas
for i in `cat $PORTSBLO`; do
$IPTABLES -A INPUT -p tcp -i $WAN --dport $i -j DROP
$IPTABLES -A INPUT -p udp -i $WAN --dport $i -j DROP
$IPTABLES -A FORWARD -p tcp --dport $i -j DROP
done
#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, -m limit --limit 1/s -j ACCEPT
echo "bloqueado scanners ocultos"
echo "ON .................................................[ OK ]"
# amarrar ip ao mac
for i in `cat $MACLIST`; do
# aqui cada linha do maclist é atribuída de cada vez
STATUS=`echo $i | cut -d ';' -f 1`
# o comando echo exibe o conteúdo da variável e o pipe "|" repassa a saída para outro comando,
# o cut por sua vez reparte cada linha em pedaços onde o delimitador (-d) é o ';' no parâmetro
# -f imprime na tela conteúdo da 1º coluna (status), a saída deste é enviada para STATUS;
IPSOURCE=`echo $i | cut -d ';' -f 2`
MACSOURCE=`echo $i | cut -d ';' -f 3`
MARK=`echo $IPSOURCE | cut -d '.' -f 4`
# neste caso o IPSOURCE e o MACSOURCE recebem as outras colunas da mesma linha, faço uma
# ressalva para o nome do computador que eu coloquei apenas para a organização do maclist,
# pois neste do script contará até a 3º coluna.
# aqui neste caso o comando if está dentro do laço for
# Se status = a então iptables libera a conexão através destes comandos construídos na tabela filter
if [ $STATUS = "a" ]; then
$IPTABLES -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
$IPTABLES -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j ACCEPT
$IPTABLES -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
$IPTABLES -t filter -A OUTPUT -s $IPSOURCE -d 0/0 -j ACCEPT
$IPTABLES -t mangle -A PREROUTING -s $IPSOURCE -j MARK --set-mark $MARK
# Se for = b então bloqueia o MAC, ele só executa este comandos se STATUS não for igual a "a".
else #se não
$IPTABLES -t filter -A FORWARD -m mac --mac-source $MACSOURCE -j DROP
$IPTABLES -t filter -A INPUT -m mac --mac-source $MACSOURCE -j DROP
$IPTABLES -t filter -A OUTPUT -m mac --mac-source $MACSOURCE -j DROP
fi # fim do se
done # fim do comando laço for
echo "Ativado a amarração do ip ao mac"
echo "ON .................................................[ OK ]"
# redirecionando porta para proxy
$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
echo "Redirecionando porta proxy ativado"
echo "ON .................................................[ OK ]"
# ativar o mascaramento
$IPTABLES -t nat -A POSTROUTING -o $LAN -j MASQUERADE
echo
echo "==========================================================|"
echo "::TERMINADA A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS::|"
echo ":: DO IPTABLES ::|"
echo "==========================================================|"
echo "FIREWALL ATIVADO - SISTEMA PREPARADO"
echo "SCRIPT DE FIREWALL CRIADO POR :-) HAROLDO ABREU :-)"
;;
stop)
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -Z
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -Z
$IPTABLES -t raw -F
$IPTABLES -t raw -X
$IPTABLES -t raw -Z
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
echo "FIREWALL DESCARREGADO - SISTEMA LIBERADO"
;;
restart)
$PROGRAMA stop
$PROGRAMA start
;;
*)
echo "Use: $N {start|stop|restart}" >&2
echo -e "{TTEXTO}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