Das nachfolgende Shell-Skript nimmt eine IP-Adresse als Parameter entgegen und fügt diese IP-Adresse in eine Spammer-Liste ein. Diese Spammerliste ist einerseits eine dynamische ipfw-Tabelle und andererseits eine Datei.


Wenn das Shell-Skript ohne Parameter aufgerufen wird, wird die ipfw-Tabelle und dazugehörige Regel gelöscht, neu angelegt, und alle Einträge aus der Datei geladen.

#!/bin/sh -

tablename="spammers"
rule=2000
file="/etc/ipfw.table.${tablename}"
ipfw="/sbin/ipfw"

if [ $# -ne 1 ]; then
        have_addr=0
else
        have_addr=1
        addr=$1
fi

if [ $have_addr -eq 0 ]; then
        $ipfw delete ${rule} > /dev/null 2>&1
        $ipfw table ${tablename} destroy > /dev/null 2>&1
fi

# check if ipfw table exist and create it otherwise
if ! $ipfw table ${tablename} info > /dev/null 2>&1; then
        $ipfw table ${tablename} create
        $ipfw add ${rule} deny all from 'table('${tablename}')' to any > /dev/null
        if [ -e $file ]; then
                for entry in `cat $file`; do
                        $ipfw table ${tablename} add ${entry} > /dev/null
                done
        fi
fi

if [ $have_addr -eq 0 ]; then
        exit 0
fi

if $ipfw table ${tablename} lookup ${addr} > /dev/null 2>&1; then
        store=0
else
        $ipfw table ${tablename} add ${addr} > /dev/null 2>&1
        store=1
fi

if [ $store -eq 1 ]; then
        echo $addr >> $file
fi

# vim: ts=4