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