[Iptables] script pour bloquer et relacher ips

Voici un petit script bash, que j’ai écrit, pour bloquer et/ou relacher des ips malveillantes :

#!/bin/bash
#set -x

action="DROP"  # action iptables ; par défaut : DROP
chain="INPUT"    # chain iptables ; par défaut : INPUT
interface="eth0"

days=7  # nb de jours à calculer

dirname="$(dirname $0)"
file="${dirname}/block_ips"
hoy="$(date +"%Y-%m-%d")"
seconds="$(bc <<< "${days} * 24 * 60 * 60")" # nb de secondes == x jours

function block() {

    local ip="$1"

    if [[ ! -f "${file}" ]]; then touch "${file}"; fi

    if [[ -f "${file}" ]]; then

        echo "${ip}|${hoy}" >> "${file}"

    fi

    iptables -A "${chain}" -i "${interface}" -s "${ip}" -j "${action}"

    }

function release() {

    if [[ -f "${file}" ]]; then
        readarray -t infos < "${file}"

        for info in "${infos[@]}"; do
            ip="$(awk -F '|' '{print $1}' <<< "${info}")"
            date="$(awk -F '|' '{print $2}' <<< "${info}")"

            if [[ "${date}" != "no" ]]; then
                date_seconds="$(date -d ${date} +%s)"
                hoy="$(date -d ${hoy} +%s)"

                let nb="$(bc <<< "${hoy} - ${date_seconds}")"
                if [[ ${nb} -gt ${seconds} ]]; then
                    echo "${ip}"

                    # recherche de la ligne correspondante à l'ip à détruire
                    let line=$(iptables -L ${chain} -n --line-numbers | awk '/"${ip}"/ {print $1}'); echo "$line"
                    iptables -D "${chain}" ${line}

                    # suppression de la ligne dans le fichier
                    sed -i -e "s#${ip}|${date}##g" "${file}"
                    unset line
                fi
            fi

            unset date ip
        done

        # suppression des lignes vides
        sed -i '/^$/d' "${file}"

    fi

    }

case "$1" in
    -b|block)   block "$2" ;;
    -r|release) release ;;
    *)
        clear
        echo "Usage: ${0##*/} {block|release}" >&2
        exit 1
    ;;
esac

Pour bloquer des ips, après analyse des logs du serveur :

./manage_ips block “adr_ip”

Pour relacher des ips, édition de la table cron, pour analyse quotidienne :

1 0 * * * /root/manage_ips release

manage_ips.txt (1.82 KB)

Nouvelle version :

git.framasoft.org/HucSte/tools/ … manage_ips

Modification de la fonction block pour gestion des logs du serveur web et pour fonctionnement de celle-ci par le biais de la crontab …

Je fait du 404. Si la version est toujours disponible fait nous un retour :wink:

Non, non, elle est disponible :wink:
https://git.framasoft.org/hucste/tools/raw/master/mng_ips

1 J'aime