Prohibit Emotet/TrickBot by IP Blocklist or how to proceed?

Reopening this case because I built a solution (possible).

The script (according to trollop SSL Blacklist, Feodotracker - #5 by troll-op) runs every night, generates network-objects and network-groups. Those can be used for two simple rules which are easy to use via Web GUI.

How about this?

#!/bin/bash

##############################################
# Beginn Download Liste FEODO & SSLBL
##############################################

#evtl. Reste löschen
rm -f /tmp/block-feodo
rm -f /tmp/block-sslbl

#FEODO (https://feodotracker.abuse.ch/)
curl -s https://feodotracker.abuse.ch/downloads/feodotracker.rules | sed -e 's/].*//g' | sed 's|.*\[\(.*\)|\1|' | sed -e 's/#.*//g' | sed '/at.*/d' | sort | uniq >> /tmp/block-feodo

#SSLBL (https://sslbl.abuse.ch/)
curl -s https://sslbl.abuse.ch/blacklist/sslipblacklist.txt | grep '^[0-9]' | sed '/:/d' | sed -e 's/;.*//' | sed -e 's/#.*//g' | sed '/at.*/d' | sed -e 's/ .*//' | sort | uniq >> /tmp/block-sslbl

##############################################
# Ende Download Liste FEODO & SSLBL
##############################################

##############################################
# Beginn Bearbeitung FEODO CUSTOMHOSTS
##############################################

#Variablen setzen
HostSyntax="NO_WAN_Block_FEODO_"
SRCFile="/tmp/block-feodo"
DSTFile="/var/ipfire/fwhosts/customhosts"
RemarkTime=$(date +"%d.%B %Y %T Uhr")

#bestehende Einträge ind DSTFile löschen
sed -i "/$HostSyntax/d" "$DSTFile"

#höchsten Zähler in DSTFile ermitteln
DSTvaluemaxarray=($(sed "s/,.*//" "$DSTFile"))
DSTvaluemax=($(printf '%s\n' "${DSTvaluemaxarray[@]}" | awk '$1 > m || NR == 1 { m = $1 } END { print m }'))
#echo $DSTvaluemax

#Zähler für neue Einträge erstellen
#echo $DSTvaluemax
DSTcount=$((DSTvaluemax+1))
#echo $DSTcount

#Komma in DSTFile an letzter Stelle in Zeilen löschen
sed -i 's/\,$//' $DSTFile

#DSTFile um neue Einträge ergänzen
count=0;
input=$SRCFile
while IFS= read -r line
do
	test $count -eq 0 && ((count=count+1)) && continue
	echo "$DSTcount,$HostSyntax$line,ip,$line/255.255.255.255,Autoupdate $RemarkTime" >> $DSTFile
	let "DSTcount++"
	let "count++"
done < "$input"

#DSTFile sortieren
sort -n -o $DSTFile $DSTFile

#Komma an letzter Stelle des DSTFile setzen
sed -i '$s/$/\,/' $DSTFile

##############################################
# Ende Bearbeitung FEODO CUSTOMHOSTS
##############################################


##############################################
# Beginn Bearbeitung FEODO CUSTOMGROUPS
##############################################

#Variablen setzen
GRPSyntax="NG_WAN_Deny_IPShield_FEODO"
SRCFile="/var/ipfire/fwhosts/customhosts"
DSTFile="/var/ipfire/fwhosts/customgroups"

#bestehende Einträge ind DSTFile löschen
sed -i "/$GRPSyntax/d" "$DSTFile"

#höchsten Zähler in DSTFile ermitteln
DSTvaluemaxarray=($(sed "s/,.*//" "$DSTFile"))
DSTvaluemax=($(printf '%s\n' "${DSTvaluemaxarray[@]}" | awk '$1 > m || NR == 1 { m = $1 } END { print m }'))
#echo $DSTvaluemax

#Zähler für neue Einträge erstellen
#echo $DSTvaluemax
DSTcount=$((DSTvaluemax+1))
#echo $DSTcount

#Komma in DSTFile an letzter Stelle in Zeilen löschen
sed -i 's/\,$//' $DSTFile

#DSTFile um neue Einträge ergänzen
count=0;
input=$SRCFile
while IFS= read -r line
do
	test $count -eq 0 && ((count=count+0)) && continue
	Host=($(echo $line | awk -F',' '{print $2;}'))
	if [[ $Host = $HostSyntax* ]]
		then
			echo "Taken: $HostSyntax part of $Host"
			echo "$DSTcount,$GRPSyntax,,$Host,Custom Host,Autoupdate $RemarkTime" >> $DSTFile
		else
			echo "Not taken: $HostSyntax not part of $Host"
		fi
	
	let "DSTcount++"
	let "count++"
done < "$input"

#DSTFile sortieren
sort -n -o $DSTFile $DSTFile

#Komma an letzter Stelle des DSTFile setzen
sed -i '$s/$/\,/' $DSTFile

##############################################
# Ende Bearbeitung FEODO CUSTOMGROUPS
##############################################

##############################################
# Beginn Bearbeitung SSLBL CUSTOMHOSTS
##############################################

#Variablen setzen
HostSyntax="NO_WAN_Block_SSLBL_"
SRCFile="/tmp/block-sslbl"
DSTFile="/var/ipfire/fwhosts/customhosts"
RemarkTime=$(date +"%d.%B %Y %T Uhr")

#bestehende Einträge ind DSTFile löschen
sed -i "/$HostSyntax/d" "$DSTFile"

#höchsten Zähler in DSTFile ermitteln
DSTvaluemaxarray=($(sed "s/,.*//" "$DSTFile"))
DSTvaluemax=($(printf '%s\n' "${DSTvaluemaxarray[@]}" | awk '$1 > m || NR == 1 { m = $1 } END { print m }'))
#echo $DSTvaluemax

#Zähler für neue Einträge erstellen
#echo $DSTvaluemax
DSTcount=$((DSTvaluemax+1))
#echo $DSTcount

#Komma in DSTFile an letzter Stelle in Zeilen löschen
sed -i 's/\,$//' $DSTFile

#DSTFile um neue Einträge ergänzen
count=0;
input=$SRCFile
while IFS= read -r line
do
	test $count -eq 0 && ((count=count+1)) && continue
	echo "$DSTcount,$HostSyntax$line,ip,$line/255.255.255.255,Autoupdate $RemarkTime" >> $DSTFile
	let "DSTcount++"
	let "count++"
done < "$input"

#DSTFile sortieren
sort -n -o $DSTFile $DSTFile

#Komma an letzter Stelle des DSTFile setzen
sed -i '$s/$/\,/' $DSTFile

##############################################
# Ende Bearbeitung SSLBL CUSTOMHOSTS
##############################################


##############################################
# Beginn Bearbeitung SSLBL CUSTOMGROUPS
##############################################

#Variablen setzen
GRPSyntax="NG_WAN_Deny_IPShield_SSLBL"
SRCFile="/var/ipfire/fwhosts/customhosts"
DSTFile="/var/ipfire/fwhosts/customgroups"

#bestehende Einträge ind DSTFile löschen
sed -i "/$GRPSyntax/d" "$DSTFile"

#höchsten Zähler in DSTFile ermitteln
DSTvaluemaxarray=($(sed "s/,.*//" "$DSTFile"))
DSTvaluemax=($(printf '%s\n' "${DSTvaluemaxarray[@]}" | awk '$1 > m || NR == 1 { m = $1 } END { print m }'))
#echo $DSTvaluemax

#Zähler für neue Einträge erstellen
#echo $DSTvaluemax
DSTcount=$((DSTvaluemax+1))
#echo $DSTcount

#Komma in DSTFile an letzter Stelle in Zeilen löschen
sed -i 's/\,$//' $DSTFile

#DSTFile um neue Einträge ergänzen
count=0;
input=$SRCFile
while IFS= read -r line
do
	test $count -eq 0 && ((count=count+0)) && continue
	Host=($(echo $line | awk -F',' '{print $2;}'))
	if [[ $Host = $HostSyntax* ]]
		then
			echo "Taken: $HostSyntax part of $Host"
			echo "$DSTcount,$GRPSyntax,,$Host,Custom Host,Autoupdate $RemarkTime" >> $DSTFile
		else
			echo "Not taken: $HostSyntax not part of $Host"
		fi
	
	let "DSTcount++"
	let "count++"
done < "$input"

#DSTFile sortieren
sort -n -o $DSTFile $DSTFile

#Komma an letzter Stelle des DSTFile setzen
sed -i '$s/$/\,/' $DSTFile

##############################################
# Ende Bearbeitung SSLBL CUSTOMGROUPS
##############################################

##############################################
# Beginn Abschluss
##############################################

#temp. Dateien löschen
rm -f /tmp/block-feodo
rm -f /tmp/block-sslbl

#Reload Firewall Rules (Quelle: https://community.ipfire.org/t/testing-dns-redirect-code-snippet/3888/16)
echo "Apply new IP-Shield-Rules"
#/etc/rc.d/init.d/firewall restart >/dev/null 2>&1
/usr/local/bin/firewallctrl

##############################################
# Ende Abschluss
##############################################

But be careful with used lists, because every IP-Address generates a network-object (NO) and will be listed as a single host.

3 Likes