code.fastix.org

Dateiansicht:

Datei:Projekte -> Linux:block_bad_ips -> block_bad_ips.sh
md5:574fbae18c1245fea9f1aac440ab8ba8
sha1:9577ee4dd5cca40465879d6a00d65267cd0959e4
  1. #!/bin/bash
  2. # Skript holt böse IPs von diversen Listen und blockt diese in der Firewall
  3. # braucht Root-Rechte, Dosierung: 2-3 + täglich per Cronjob ausführen.
  4. # Autor: Jörg Reinholz, fastix Webdesign & Consult, Kassel;  http://www.fastix.org
  5.  
  6. ### SETUP: #######################################################################
  7. _urlIList='
  8. https://lists.blocklist.de/lists/strongips.txt
  9. https://www.badips.com/get/list/any/3?age=1d
  10. https://api.blocklist.de/getlast.php?time=24h
  11. ';
  12.  
  13. ### Programm: #######################################################################
  14. _chain='BLOCKLIST';
  15. _tmpFile=`mktemp`;
  16.  
  17. # Holen der bösen IPs
  18. for url in ${_urlIList}; do
  19.     echo "Action: Hole ${url}";
  20.     wget --no-check-certificate -qO- "${url}"  >> "${_tmpFile}";
  21.     echo "Done: ${url} geholt."
  22. done
  23.  
  24. # Test auf Daten, ggf. Abbruch:
  25. if [ 1 -gt `wc -l < ${_tmpFile}` ]; then
  26.     echo "Es konnten keine Daten empfangen werden: ${url}.";
  27.     exit 2;
  28. fi
  29.  
  30. # Ausfiltern und Liste in Variable laden
  31. ipList=`sort -u < "${_tmpFile}" | grep -P '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | grep -Pv "^[ \t]*$" | tr "\n" ' ';`;
  32. #letztes Komma löschen:
  33. ipList=${ipList:0:${#ipList} - 1};
  34.  
  35. # Alte Liste löschen
  36. /sbin/iptables -D INPUT   -j ${_chain} 2> /dev/null;
  37. /sbin/iptables -D OUTPUT  -j ${_chain} 2> /dev/null;
  38. /sbin/iptables -D FORWARD -j ${_chain} 2> /dev/null;
  39. /sbin/iptables -F ${_chain}  2> /dev/null;
  40. /sbin/iptables -X ${_chain}  2> /dev/null;
  41.  
  42. # Neue chain
  43. /sbin/iptables -N ${_chain} 2> /dev/null;
  44.  
  45. # IPs an neue Chain anhängen
  46. for ip in ${ip}List; do
  47.     /sbin/iptables -A ${_chain} -s ${ip} -j DROP;
  48. done
  49.  
  50. # chain wirksam machen
  51. /sbin/iptables -I INPUT -j ${_chain}
  52. /sbin/iptables -I OUTPUT -j ${_chain}
  53. /sbin/iptables -I FORWARD -j ${_chain}
  54.  
  55. exit 0