#!/bin/bash
urlIList='
https://lists.blocklist.de/lists/strongips.txt
https://www.badips.com/get/list/any/3?age=1d
https://api.blocklist.de/getlast.php?time=24h
https://www.dan.me.uk/torlist/
';
### Programm:
umask 066;
newRulesFile=`mktemp`;
newListFile=`mktemp`;
# Holen der bösen IPs
for url in ${urlIList}; do
wget -q -O- "${url}" >> ${newListFile};
if [ 0 -lt $? ]; then
echo "WARNUNG: Download von ${url} hat nicht funktioniert";
#exit 2;
fi
done
# Test auf Daten, ggf. Abbruch:
if [ 1 -gt `wc -l < ${newListFile}` ]; then
echo "Es konnten keine Daten empfangen werden";
exit 2;
fi
# Ausfiltern und Liste in Variable laden
ipList=`sort -u -V < "${newListFile}" | grep -P '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | grep -Pv "^[ \t]*$" | tr "\n" ' ';`;
# Letztes Trennzeichen löschen:
ipList=${ipList:0:${#ipList}-1};
# Erzeugen einer Datei wie iptables.rules
echo -n "# Generated by $0 on " > $newRulesFile;
date >> ${newRulesFile};
grep -Pv 'Generated|Completed|^-A BLOCKLIST|COMMIT' < /etc/iptables.rules >> ${newRulesFile};
# IPs an neue Chain anhängen
for ip in ${ipList}; do
echo "-A BLOCKLIST -s ${ip}/32 -j DROP" >> ${newRulesFile};
done
echo 'COMMIT' >> ${newRulesFile};
echo -n '# Completed on ' >> ${newRulesFile};
date >> ${newRulesFile};
# Testen, "wirksam machen" und speichern der Datei:
iptables-restore --test < ${newRulesFile};
if [ 0 = $? ]; then
tee /etc/iptables.rules < ${newRulesFile} | iptables-restore;
rm ${newRulesFile};
rm ${newListFile};
exit 0;
else
echo "Beim Erzeugen der Rollen für iptables-restore ist ein Fehler aufgetreten.";
sek=`date +%s`;
mv ${newRulesFile} /tmp/block-bad-ips.bad-rules-${sek};
mv ${newListFile} /tmp/block-bad-ips.bad-list-${sek};
echo "Die fehlerhaften Dateien wurden als 'block-bad-ips.bad-rules-${sek}' und 'block-bad-ips.bad-list-${sek}' gespeichert.";
exit 4;
fi