Blacklist - O que é? Como consultar o IP? Como automatizar?
Explana sobre bloqueio de IPs em Blacklists (RBL), demonstrando como consultar e como automatizar via shell script.
[ Hits: 21.302 ]
Por: Danillo Costa em 19/05/2015 | Blog: https://nillow.com.br/
#!/bin/bash
# Editado por hellnux (Danillo Costa)
# Fonte: http://daemonforums.org/showthread.php?t=302
version="15.0508"
# Checa um determinado IP se passado como parametro, caso contrario eh
# analisado um faixa de IPs pre determinados.
#######################################################
# Functions
#######################################################
function dateNow () {
date +%d/%m/%Y" "%k:%M:%S
}
function getIps() {
# Cria lista de ips
ips=""
notes_mail="Faixa de IPs analisadas:\n"
prefix="162.144.34"
notes_mail="$notes_mail de 162.144.34.1 até 162.144.34.126 \n"
for i in `seq 1 126`; do
ips="$ips $prefix.$i"
done
# Adiciona a lista de ips, os ips de 37.49.226.1 até 37.49.226.62
prefix="37.49.226"
notes_mail="$notes_mail de 37.49.226.1 até 37.49.226.62 \n"
for i in `seq 1 62`; do
ips="$ips $prefix.$i"
done
}
function printResultBase () {
printf "%-22s %-18s %-30s %-24s %s \n" "$date_now" "$ip" "$reverse_dns" "${BL}" "$result"
}
function printResultSenderbase() {
date_now=`dateNow`
BL="senderbase.org"
# Evita consulta desnecessaria quando o SenderBase tiver bloqueado IP da maquina que executa este script
if [ "$block_printResultSenderbase" == "1" ]; then
result="Fail"
printResultBase
else
# Passa pelos Termos de Servicos do SenderBase, method post e pega a saida do lynx
out=$(echo "tos_accepted=Yes, I Agree" | lynx -dump -post_data "$link_sederbase$ip" | nl -ba)
if [ $? -eq 0 ]; then
if [ "`echo "$out" | grep -F "You don't have permission to access"`" != "" ]; then
block_printResultSenderbase="1"
result="Fail"
printResultBase
else
# O status do email_reputation costuma estar uma linha antes de "Web Reputation Help" na saida do lynx
n_web_reputation=$(echo "$out" | grep -F "Web Reputation Help" | awk '{print $1}')
n_email_reputation=$(( $n_web_reputation - 1 ))
email_reputation=$(echo "$out" | sed -n "$n_email_reputation"p | awk '{print $2}')
if [ "$email_reputation" == "Poor" ]; then
result="Listed"
printResultBase | tee -a "$log_file"
else
result="---"
printResultBase
fi
fi
else # Metodo antigo. Nao eh tao preciso, pois informa apenas o score. Raramente entre neste trecho
BL="rf.senderbase.org"
result=$(dig +short txt ${reverse[$i]}.${BL}.)
date_now=`dateNow`
if [ "`echo "$result" | grep -F "-"`" != "" ]; then
score=$(echo "$result" | tr -d '"')
result="NeedCheck:$score"
printResultBase | tee -a "$log_file"
else
result="---"
printResultBase
fi
fi
fi
}
function printResult() {
date_now=`dateNow`
if [ "$result" != "" ]; then
result="Listed"
printResultBase | tee -a "$log_file"
else
result="---" # Nao listado
printResultBase
fi
}
#######################################################
# Main
#######################################################
# Lista de blacklists. SenderBase eh analisado separadamente
BLISTS="
b.barracudacentral.org
zen.spamhaus.org
xbl.spamhaus.org
pbl.spamhaus.org
bl.spamcop.net
dnsbl.sorbs.net
http.dnsbl.sorbs.net
web.dnsbl.sorbs.net
"
script_name=$(basename $0 .sh)
emails="seu@email.com"
msmtp="/usr/sbin/msmtp"
log_file="/tmp/$script_name.log"
sign_mail="------------------\n$script_name $version" #Assinatura da notificacao via email
link_sederbase="http://www.senderbase.org/lookup/?search_string="
block_printResultSenderbase="0" # disable
msg_printResultSenderbase=""
# Define se usa IP passado via argumento ou "lista de IPs" informadas neste codigo.
if [ "$2" != "" ]; then
echo "Error: Informe apenas 1 IP ou nenhum para usar a lista pre-determinada."
exit 1
elif [ "$1" != "" ]; then
ips="$1"
else
getIps
fi
# limpa log
> "$log_file"
# Cria IP reverso
i=0
for ip in $ips; do
reverse[$i]=$(echo "$ip" | sed -ne "s~^\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)$~\4.\3.\2.\1~p")
if [ "x${reverse[$i]}" = "x" ]; then
echo "Error: '$ip' nao parece ser um IP valido."
exit 1
fi
(( i++ ))
done
# Faz checagem nas blacklists
i=0
for ip in $ips; do
#echo "[$ip]" #debug
reverse_dns=$(dig +short -x "$ip")
if [ "$reverse_dns" == "" ]; then
reverse_dns="reverseNull"
fi
# Chama funcao printResultSenderbase
printResultSenderbase
# Demais blacklists
for BL in ${BLISTS} ; do
result="$(dig +short -t a ${reverse[$i]}.${BL}.)"
printResult
done
sleep "$(( ( RANDOM % 10 ) + 5 ))" # Random de ~5s a ~20s
(( i++ ))
done
# Print in body mail if this script blocked in SenderBase
if [ "$block_printResultSenderbase" == "1" ]; then
msg_printResultSenderbase="SenderBase blocked the `hostname -i` to queries.\n"
fi
# Send mail - Se identar o echo, pode bugar
if [ "`wc -l "$log_file" | awk '{print $1}'`" != "0" ]; then
echo "To: $emails
From: seu@email.com
Subject: [$script_name]
Content-Type: text/html; charset=\"utf-8\"
`cat \"$log_file\"`
`echo -e \"$msg_printResultSenderbase\"`
`echo -e \"$notes_mail\"`
`echo -e \"\n\n$sign_mail\"`
" | "$msmtp" --read-recipients
fi
# senderbase
# dig +short txt 55.145.202.186.rf.senderbase.org
# Outras RBL
# combined.njabl.org
# spam.rbl.msrbl.net
# bl.spamcannibal.org
# bl.deadbeef.com
# bl.emailbasura.org
# blackholes.five-ten-sg.com
# bogons.cymru.com
# blacklist.woody.ch
# cbl.abuseat.org
# cdl.anti-spam.org.cn
# combined.abuse.ch
# combined.rbl.msrbl.net
# db.wpbl.info
# dnsbl-1.uceprotect.net
# dnsbl-2.uceprotect.net
# dnsbl-3.uceprotect.net
# dnsbl.ahbl.org
# dnsbl.cyberlogic.net
# dnsbl.inps.de
# dnsbl.njabl.org
# drone.abuse.ch
# drone.abuse.ch
# duinv.aupads.org
# dul.dnsbl.sorbs.net
# dul.ru
# dyna.spamrats.com
# dynip.rothen.com
# images.rbl.msrbl.net
# ips.backscatterer.org
# ix.dnsbl.manitu.net
# korea.services.net
# misc.dnsbl.sorbs.net
# noptr.spamrats.com
# ohps.dnsbl.net.au
# omrs.dnsbl.net.au
# orvedb.aupads.org
# osps.dnsbl.net.au
# osrs.dnsbl.net.au
# owfs.dnsbl.net.au
# owps.dnsbl.net.au
# probes.dnsbl.net.au
# proxy.bl.gweep.ca
# proxy.block.transip.nl
# psbl.surriel.com
# rbl.interserver.net
# rdts.dnsbl.net.au
# relays.bl.gweep.ca
# relays.bl.kundenserver.de
# relays.nether.net
# residential.block.transip.nl
# ricn.dnsbl.net.au
# rmst.dnsbl.net.au
# sbl.spamhaus.org
# short.rbl.jp
# smtp.dnsbl.sorbs.net
# socks.dnsbl.sorbs.net
# spam.abuse.ch
# spam.dnsbl.sorbs.net
# spam.spamrats.com
# spamlist.or.kr
# spamrbl.imp.ch
# t3direct.dnsbl.net.au
# tor.ahbl.org
# tor.dnsbl.sectoor.de
# torserver.tor.dnsbl.sectoor.de
# ubl.lashback.com
# ubl.unsubscore.com
# virbl.bit.nl
# virus.rbl.jp
# virus.rbl.msrbl.net
# wormrbl.imp.ch
# zombie.dnsbl.sorbs.net
# phishing.rbl.msrbl.net
# Fontes de pesquisas
# http://www.redhat.com/archives/rhl-list/2003-December/msg01341.html
# http://h3manth.com/content/methods-submit-form-post-using-curl-perl-python-ruby-lynx
# Numero random em um determinado range pelo shuf
# http://stackoverflow.com/questions/2556190/random-number-from-a-range-in-a-bash-script
chkconfig - Adicionando o seu shell script
Shell Script como serviço no Windows
flock - Gerenciador de lockfiles
Script de firewall completíssimo
Script com muitas utilidades para arquivos e pastas
Simples sistema de backup com acesso remoto
Criando Autoridades Certificadores e Certificados de Testes no Linux
Enviando mensagens de WhatsApp no Linux usando Shell Script e ADB
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









