В одной из нашей предыдущей статье мы разместили учебное руководство о том, как защитить ваш 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. Если вам понравился этот пост, поделитесь им с друзьями в социальных сетях с помощью кнопок соц сетей или просто оставьте комментарий ниже. Заранее благодарю.