ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Блокирование нежелательного IP-адреса с помощью брандмауэра IPTABLES в Debian/Ubuntu

Блокирование нежелательного IP-адреса с помощью брандмауэра IPTABLES в Debian/Ubuntu

В одной из нашей предыдущей статье мы разместили учебное руководство о том, как защитить ваш Debian/Ubuntu на базе VPS с помощью IPTABLES/Netfilter .

В этой статье мы добавляем черный список в сценарий брандмауэра, который позволит вам блокировать любые нежелательные IP-адреса или диапазоны IP-адресов из вашей Debian или Ubuntu на базе виртуального сервера.

Что такое Iptables?

Это пространство прикладных программ пользователя, позволяющий системному администратору настраивать таблицы, предоставляемые брандмауэром ядра Linux (реализованы в виде различных Netfilter модулей), цепей и правил.

Перед тем, как продолжить работу, убедитесь, что вы читали статью о том, как обеспечить/дизайн брандмауэра в вашей системы Linux VPS . Включает:

Блокирующие IP-адреса с использованием IPtables

Для того, чтобы блокировать некоторые нежелательные IP — адреса или диапазон IP — адресов, вы можете использовать следующие правила iptables:

## iptables -I INPUT -s 2.3.4.5 -j DROP
## iptables -I INPUT -s 2.3.0.0/32 -j DROP

Создание Blacklist

Для лучшей читаемости и технического обслуживания, это хорошая идея , иметь все нежелательные IP — адреса в одном конкретном файле, например /etc/myblacklist.ips. Таким образом, вы можете добавить IP — адреса или подсети , в этом файле ( один IP или подсети в каждой строке ) и использовать сценарий fwall-rules ниже, чтобы заблокировать все перечисленное в этом файле.

Таким образом, создайте или отредактируйте /usr/local/bin/fwall-rules и  сделайте его следующим образом:

#!/bin/bash
#
# iptables firewall script
# https://andreyex.ru
#

IPTABLES=/sbin/iptables
BLACKLIST=/etc/myblacklist.ips

echo " * Очистка старых правил"
${IPTABLES} --flush
${IPTABLES} --delete-chain
${IPTABLES} --table nat --flush
${IPTABLES} --table nat --delete-chain

echo " * Настройка политики по умолчанию"
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P OUTPUT ACCEPT

echo " * Разрешение loopback devices"
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A OUTPUT -o lo -j ACCEPT

${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Здесь блокировка IPs ##
#echo " * BLACKLIST"
#${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP
#${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP

echo " * Разрешение ssh по порту 5632"
${IPTABLES} -A INPUT -p tcp --dport 5632  -m state --state NEW -j ACCEPT

echo " * Разрешение ftp по порту 21"
${IPTABLES} -A INPUT -p tcp --dport 21  -m state --state NEW -j ACCEPT

echo " * Разрешение dns по порту 53 udp"
${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT

echo " * Разрешение dns по порту 53 tcp"
${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

echo " * Разрешение http по порту 80"
${IPTABLES} -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

echo " * Разрешение https по порту 443"
${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

echo " * Разрешение smtp по порту 25"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

echo " * Разрешение submission по порту 587"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT

echo " * Разрешение pop3s по порту 995"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT

echo " * Разрешение imaps по порту 993"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT

echo " * Разрешение imap по порту 143"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT

echo " * Разрешение pop3 по порту 110"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT

echo " * Разрешение отклика ping"
${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

# DROP все остальное и журнал
${IPTABLES} -A INPUT -j LOG
${IPTABLES} -A INPUT -j DROP

#
# Блокировка нежелательного IPs 
# из ${BLACKLIST}
#
if [[ -f "${BLACKLIST}" ]] && [[ -s "${BLACKLIST}" ]]; then
    echo " * Блокировка нежелательных IPs"
    while read IP; do
        ${IPTABLES} -I INPUT -s "${IP}" -j DROP
    done < <(cat "${BLACKLIST}")
fi

#
# Сохранение настроек
#
echo " * Сохранение правил"

if [[ -d /etc/network/if-pre-up.d ]]; then
    if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then
        echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables
        echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
    fi
fi

iptables-save > /etc/fwall.rules
iptables-restore -c /etc/fwall.rules

убедитесь, что скрипт является исполняемым файлом, добавив ‘х’ к нему:

## chmod +x /usr/local/bin/fwall-rules

Применения правил

Чтобы применить правила брандмауэра и блокировать нарушителей, вам нужно просто запустить скрипт fwall-rules и все.

## fwall-rules
 * Очистка старых правил
 * Настройка политики по умолчанию
 * Разрешение loopback devices
 * Разрешение ssh по порту 5632
 * Разрешение ftp по порту 21
 * Разрешение dns по порту 53 udp
 * Разрешение dns по порту 53 tcp
 * Разрешение http по порту 80
 * Разрешение https по порту 443
 * Разрешение  smtp по порту 25
 * Разрешение submission по порту 587
 * Разрешение pop3s по порту 995
 * Разрешение  imaps по порту 993
 * Разрешение imap по порту 143
 * Разрешение pop3 по порту 110
 * Разрешение отклика ping
 * Блокирование нежелательных IPs
 * Сохранение правил

 

PS. Если вам понравился этот пост, поделитесь им с друзьями в социальных сетях с помощью кнопок соц сетей или просто оставьте комментарий ниже. Заранее благодарю.

Блокирование нежелательного IP-адреса с помощью брандмауэра IPTABLES в Debian/Ubuntu

Exit mobile version