Blocklisten von blocklist.de in iptables einbinden 2


UPDATE: http://blog.schaal-24.de/?p=2683

Ich verwende unter anderem einige Blocklisten von blocklist.de, um potentielle Angriffe zu minimieren.

Da die einzelnen Listen pro Zeile eine IP enthalten, lassen Sie sich problemlos über xt_recent einbinden. Ich verwende ein einfaches Bash-Script, um einmal am Tag über cron meine Firewall mit den Listen abzugleichen.

Einige Parameter des Scripts:

BLOCKLIST enthält die einzelnen Listen von blocklist.de.

OPT_RECENT definiert die recent-Optionen. Dabei steht --update für

Ich will dich für n Sekunden nicht sehen. Aber kommst Du innerhalb der Zeit wieder, läuft sie von neuem.

--rcheck hingegen steht für

Ich blocke dich für die nächste n Sekunden.

OPT_CHAIN_PREFIX ist das Prefix des jeweiligen Jails.

MAX_IP definiert die maximale Anzahl von IP-Adressen, die durch xt_recent gespeichert werden können. Grundsätzlich speichert xt_recent 100 IP Adressen.

Wenn die einzelnen Regeln nicht vorhanden sind, werden sie durch das Script angelegt.

Damit nicht jede IP für alle Dienste gesperrt wird, können die Ports (--dports) angepasst werden.

Und hier das Script – und als Download.


# !/bin/bash

# Script to add banlists to the firewall
#
# Created: 02/17/2013
# Version: 1.0
# Author: Florian Schaal (info@schaal-24.de)
#
# Copyright (c) 2012 Florian Schaal (info@schaal-24.de.)
# All rights reserved.
#
# This script is free software
# you can redistribute it and/or modify it under
# the terms of the GNU General Public License.
# See http://www.fsf.org/licensing/licenses/gpl.html
#
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY;
# without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

#binaries
IPTABLES=`which iptables`
WGET=`which wget`

# CONFIG
# lists from http://www.blocklist.de/en/export.html
BLOCKLIST="all ssh mail apache imap ftp sip bots strongips ircbot"
BLOCKLIST_URL="http://lists.blocklist.de/lists/"

# options for recent
OPT_RECENT="--update --seconds 86400 --hitcount 1"
OPT_CHAIN_PREFIX="block"
OPT_ACTION=" -j REJECT"
MAX_IP=10000

check_chain () {
  $IPTABLES -C INPUT $1 2>/dev/null
  if [ $? -ne 0 ]; then
    echo "insert rule for chain in INPUT"
    $IPTABLES -I INPUT $1
  fi
}

check_chain_exists () {
  if [ -z "`$IPTABLES -L block-$1 2>/dev/null|grep \Chain`" ]; then
    echo create new chain: block-$1
    $IPTABLES -N block-$1
  fi
  case "$1" in
    all)
      check_chain "-m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-all $OPT_ACTION"
    ;;
    ssh)
      check_chain "-m tcp -p tcp --dport 22 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    mail)
      check_chain "-m multiport -p tcp --dports 25,143,993,110,995 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    apache)
      check_chain "-m multiport -p tcp --dports 80,443 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    imap)
      check_chain "-m multiport -p tcp --dports 143,993,110,995 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    ftp)
      check_chain "-m tcp -p tcp --dport 21 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;
    sip)
      check_chain "-m tcp -p tcp --dport 5060 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    bots)
      check_chain "-m multiport -p tcp --dports 194,994,529,5060 -m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    strongips)
      check_chain "-m recent $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    ircbot)
      check_chain "-m multiport -p tcp --dports 194,994,529 $OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
    *)
      check_chain "$OPT_RECENT --name $OPT_CHAIN_PREFIX-$1 $OPT_ACTION"
    ;;
  esac
  }

get_blocklist () {
  echo / > /proc/net/xt_recent/block-$1
  $WGET -q -O - $BLOCKLIST_URL/$1.txt|while read ip; do
    echo +$ip > /proc/net/xt_recent/$OPT_CHAIN_PREFIX-$1
  done
}

chmod 600 /sys/module/xt_recent/parameters/ip_list_tot
echo $MAX_IP > /sys/module/xt_recent/parameters/ip_list_tot
chmod 400 /sys/module/xt_recent/parameters/ip_list_tot

for blocklist in $(echo $BLOCKLIST); do
  echo "processing $blocklist"
  check_chain_exists $blocklist
  get_blocklist $blocklist
done


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

2 Gedanken zu “Blocklisten von blocklist.de in iptables einbinden

  • Sebastian

    Hallo,
    vielen Dank – einfaches und sehr nützliches Script und Listen.
    noch kurz als Hinweis: Kann es sein, dass bei den letzten beiden Regeln das -m recent fehlt?
    MfG
    Sebastian