ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Блокирование нежелательного 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