# \[Iptables\] script pour bloquer et relacher ips

**URL:** <https://www.debian-fr.org/t/iptables-script-pour-bloquer-et-relacher-ips/66562>\
**Category:** Trucs et Astuces\
**Created:** [Février 21, 2016, 9:48 UTC](https://www.debian-fr.org/t/iptables-script-pour-bloquer-et-relacher-ips/66562 "2016-02-21T21:48:35Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 21, 2016, 9:48 UTC](https://www.debian-fr.org/t/iptables-script-pour-bloquer-et-relacher-ips/66562/1 "2016-02-21T21:48:35Z")

</div>

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

```auto
#!/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 :

```auto
1 0 * * * /root/manage_ips release
```

[manage\_ips.txt](https://www.debian-fr.org/uploads/default/original/2X/d/dc303cb3125a9b44b148493af33b7fcbb129fe44.txt) (1.82 KB)

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Février 21, 2016, 9:49 UTC](https://www.debian-fr.org/t/iptables-script-pour-bloquer-et-relacher-ips/66562/2 "2016-02-21T21:49:00Z")

</div>

Nouvelle version :

[git.framasoft.org/HucSte/tools/ … manage\_ips](https://git.framasoft.org/HucSte/tools/raw/master/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 …

---

<div class="post-metadata">

**Author:** ![beroots](https://www.debian-fr.org/user_avatar/www.debian-fr.org/beroots/32/3054_2.png) [@beroots](https://www.debian-fr.org/u/beroots)\
**Post date:** [Juillet 16, 2017, 1:45 UTC](https://www.debian-fr.org/t/iptables-script-pour-bloquer-et-relacher-ips/66562/3 "2017-07-16T13:45:53Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Juillet 16, 2017, 3:08 UTC](https://www.debian-fr.org/t/iptables-script-pour-bloquer-et-relacher-ips/66562/4 "2017-07-16T15:08:44Z")

</div>

> [@](#):
>
> Je fait du 404. Si la version est toujours disponible fait nous un retour

Non, non, elle est disponible 😉  
[https://git.framasoft.org/hucste/tools/raw/master/mng\_ips](https://git.framasoft.org/hucste/tools/raw/master/mng_ips)
