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

Triggered by many bad news about latest infections I found ipfblocklist as an add-on to IPFire. In this forum thread it was discussed a year ago to include this tool into IPFire. Will this become true in the near future, or shall I proceed with installation of ipfblocklist? Is there any other advice / best practice how to deal with Emotet/TrickBot in IPFire?

1 Like

Hi guys,
–> https://lists.ipfire.org/pipermail/development/2019-November/006664.html .

Best,

Erik

1 Like

Ok, this means we can expect an addon in the near future or is it just a discussion if this addon is possible there on the dev list?

Yes, this may land in IPFire at some point.

I do not get how you expect this feature to prevent any malware like this. If you are already infected it can potentially mitigate it, but the IPS can already do that.

My question did not aim on how this may prevent those attacks but when will this be part of IPFire because this addon may serve other tasks, too.

1 Like

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.

1 Like

When interesting let’s talk about it.
Added for my own some more checks.
Cleaning up the temp-files for dos&unix (especially for the sslbl necessary).
Checking both temp-files for IP-Adresses to avoid usage of empty files or HTML-error within the file.

@hellfire A solution for you? Or too late?