code.fastix.org

Dateiansicht:

Datei:Projekte -> Linux:block_bad_ips -> block_bad_ips.sh
md5:ba336aec2004af21047027a7361bca33
sha1:d51f1da3f7e486ba9879a8af738349c3ac4bfb72
Download-Link:Download
  1. #!/bin/bash
  2.  
  3. urlIList='
  4. https://lists.blocklist.de/lists/strongips.txt
  5. https://www.badips.com/get/list/any/3?age=1d
  6. https://api.blocklist.de/getlast.php?time=24h
  7. https://www.dan.me.uk/torlist/
  8. ';
  9.  
  10.  
  11. ### Programm:
  12. umask 066;
  13. newRulesFile=`mktemp`;
  14. newListFile=`mktemp`;
  15.  
  16. # Holen der bösen IPs
  17. for url in ${urlIList}; do
  18.         wget  -q -O- "${url}"  >> ${newListFile};
  19.         if [ 0 -lt $? ]; then
  20.                 echo "WARNUNG: Download von ${url} hat nicht funktioniert";
  21.                 #exit 2;
  22.         fi
  23. done
  24.  
  25. # Test auf Daten, ggf. Abbruch:
  26.  
  27. if [ 1 -gt `wc -l < ${newListFile}` ]; then
  28.         echo "Es konnten keine Daten empfangen werden";
  29.         exit 2;
  30. fi
  31.  
  32. # Ausfiltern und Liste in Variable laden
  33. ipList=`sort -u -V < "${newListFile}" | grep -P '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | grep -Pv "^[ \t]*$" | tr "\n" ' ';`;
  34.  
  35. # Letztes Trennzeichen löschen:
  36. ipList=${ipList:0:${#ipList}-1};
  37.  
  38. # Erzeugen einer Datei wie iptables.rules
  39.  
  40. echo -n "# Generated by $0 on " > $newRulesFile;
  41. date >> ${newRulesFile};
  42. grep -Pv 'Generated|Completed|^-A BLOCKLIST|COMMIT' < /etc/iptables.rules >> ${newRulesFile};
  43. # IPs an neue Chain anhängen
  44. for ip in ${ipList}; do
  45.         echo "-A BLOCKLIST -s ${ip}/32 -j DROP" >> ${newRulesFile};
  46. done
  47. echo 'COMMIT'  >> ${newRulesFile};
  48. echo -n '# Completed on ' >> ${newRulesFile};
  49. date >> ${newRulesFile};
  50.  
  51. # Testen, "wirksam machen" und speichern der Datei:
  52.  
  53. iptables-restore --test < ${newRulesFile};
  54. if [ 0 = $? ]; then
  55.         tee /etc/iptables.rules < ${newRulesFile} | iptables-restore;
  56.         rm ${newRulesFile};
  57.         rm ${newListFile};
  58.         exit 0;
  59. else
  60.         echo "Beim Erzeugen der Rollen für iptables-restore ist ein Fehler aufgetreten.";
  61.         sek=`date +%s`;
  62.         mv ${newRulesFile} /tmp/block-bad-ips.bad-rules-${sek};
  63.         mv ${newListFile}  /tmp/block-bad-ips.bad-list-${sek};
  64.         echo "Die fehlerhaften Dateien wurden als 'block-bad-ips.bad-rules-${sek}' und 'block-bad-ips.bad-list-${sek}' gespeichert.";
  65.         exit 4;
  66. fi
  67.