iptables заблокировать ip из AS при помощи bash скрипта

Тут нужно было заблокировать доступ к серверу целой AS при помощи iptables, сетей было много, ручками лень, решил написать bash скрипт.
В целом он подойдет и вам, под свои нужды отредактируете сами.

apt install whois

Обратите внимание на строки:

# Проверка наличия файла для сохранения правил iptables
# Если установлен iptables-persistent
iptables_rules_file="/etc/iptables/rules.v4"
# Просто iptables
# iptables_rules_file="/etc/iptables.save"

#!/bin/bash

# AS для блокировки
blocked_as=(
    "AS12345"
    "AS123456"
    # добавьте другие AS, которые вы хотите заблокировать, в формате "ASxxxx"
)

# Проверка наличия файла для сохранения правил iptables
# iptables_rules_file="/etc/iptables/rules.v4"
iptables_rules_file="/etc/iptables.save"

# Создание временного файла для новых правил
temp_rules_file=$(mktemp)

# Получение списка IP-адресов для данного AS
for as in "${blocked_as[@]}"; do
ip_addresses=$(whois -h whois.radb.net -- '-T route -i origin '$as | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}")

# Добавление правил iptables для блокировки каждого IP-адреса
for ip in $ip_addresses; do
    # Проверка, есть ли данное правило уже в файле
    if ! grep -q "$ip" "$iptables_rules_file"; then
        # Если нет, добавляем во временный файл
        echo "-A INPUT -s $ip -j DROP" >> "$temp_rules_file"
    fi
  done

done

# Если есть новые правила, добавляем их в файл перед COMMIT
if [ -s "$temp_rules_file" ]; then
    echo "# Запрещаем все сети из ${blocked_as[*]}" >> "$temp_rules_file"
    echo "" >> "$temp_rules_file"  # Пустая строка перед правилами

    # Добавление правил в файл перед COMMIT
    cat "$iptables_rules_file" | awk '/COMMIT/ {print ""; print "# Запрещаем все сети из '"${blocked_as[*]}"'"; system("cat '"$temp_rules_file"'"); print "";} {print}' > "$iptables_rules_file.tmp" && mv "$iptables_rules_file.tmp" "$iptables_rules_file"
    echo "Добавлены новые правила iptables."
else
    echo "Нет новых правил для добавления в iptables."
fi

# Удаление временного файла
rm -f "$temp_rules_file"

# Проверка наличия правил в файле перед его применением
if [ -s "$iptables_rules_file" ]; then
    # Перезагрузка правил iptables
    iptables-save > "$iptables_rules_file"
    iptables-restore < "$iptables_rules_file"

    echo "Обновление правил iptables завершено."
else
    echo "Файл правил iptables пуст или отсутствует. Нет правил для применения."
fi

Если при добавления правил видите:

Файл правил iptables пуст или отсутствует. Нет правил для применения.

То просто добавляем рандомное правило, например:

iptables -A INPUT -p tcp --dport 8888 -j DROP

и перезапустите bash скрипт

Установка WireGuard на Debian 10 Buster и Debian 11 Bullseye

Добавить комментарий

Поля, отмеченные звёздочкой, обязательны к заполнению

Выполните арифметические действия *Достигнут лимит времени. Пожалуйста, введите CAPTCHA снова.