• Обратная связь: [email protected]

    Наш канал в telegram: https://t.me/ru_sfera

    Группа VK: https://vk.com/rusfera

    Пользователи могут писать на форуме ТОЛЬКО ЧЕРЕЗ 7 ДНЕЙ после регистрации

Информация Создание скрипта для защиты сервера с помощью iptables


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 197
Репутация
8 331
1732713189653.png


Введение​

Безопасность сервера является одной из ключевых задач администратора системы. Одним из инструментов для обеспечения сетевой безопасности является iptables — мощный инструмент для настройки правил фильтрации трафика в Linux.

В этом руководстве мы рассмотрим, как создать Bash-скрипт, который автоматически обновляет список IP-адресов Cloudflare и настраивает правила iptables для защиты вашего сервера.

Шаг 1: Основы работы с iptables​

iptables — это утилита для настройки и управления таблицами правил фильтрации пакетов в ядре Linux.
С его помощью можно контролировать входящий и исходящий сетевой трафик на основе различных критериев, таких как IP-адрес, порт, протокол и т.д.

Основные команды iptables:​

  • iptables -A — добавить правило в цепочку.
  • iptables -D — удалить правило из цепочки.
  • iptables -P — установить политику по умолчанию для цепочки.
  • iptables -F — очистить все правила из цепочки.
ip6tables — аналогичная утилита для IPv6-трафика.

Шаг 2: Автоматизация настроек с помощью Bash-скрипта​

Bash-скрипты позволяют автоматизировать повторяющиеся задачи.

Мы создадим скрипт, который:
  1. Обновляет списки IP-адресов Cloudflare.
  2. Настраивает правила iptables на основе этих списков.
  3. Добавляет дополнительные правила для защиты сервера.

Создание скрипта​

Создайте новый файл скрипта, например firewall.sh, и сделайте его исполняемым:

Код:
touch firewall.sh
chmod +x firewall.sh

Откройте файл в текстовом редакторе и начните с указания интерпретатора:
Код:
#!/bin/bash

Если скрипт будет запускаться в планировщике, например если хотите автоматически проверять айпи-адреса CloudFlare, они могут меняться, то рекомендую задать переменную PATH:
Код:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Шаг 3: Обновление списков IP Cloudflare​

Cloudflare предоставляет актуальные списки своих IP-адресов. Мы будем автоматически скачивать эти списки и использовать их в наших правилах iptables.

Скачивание списков​

Используйте команду curl для скачивания списков:

Код:
# Скачивание IPv4-адресов
curl -sf https://www.cloudflare.com/ips-v4 -o /path/to/cloudflare-ips-v4.txt

# Скачивание IPv6-адресов
curl -sf https://www.cloudflare.com/ips-v6 -o /path/to/cloudflare-ips-v6.txt

Проверка что команда отработала успешно:
Код:
curl -sf https://www.cloudflare.com/ips-v4 -o /path/to/cloudflare-ips-v4.txt
if [[ $? -ne 0 || ! -s /path/to/cloudflare-ips-v4.txt ]]; then
    echo "Ошибка при скачивании IPv4 списка или файл пустой. Завершение работы скрипта."
    exit 1
fi

curl -sf https://www.cloudflare.com/ips-v6 -o /path/to/cloudflare-ips-v6.txt
if [[ $? -ne 0 || ! -s /path/to/cloudflare-ips-v6.txt ]]; then
    echo "Ошибка при скачивании IPv6 списка или файл пустой. Завершение работы скрипта."
    exit 1
fi

Шаг 4: Настройка правил iptables​

Перед применением новых правил рекомендуется очистить текущие и установить политики по умолчанию.

Очистка правил и установка политик по умолчанию.

ВАЖНО:Мы устанавливаем политику блокировать всё, кроме специально разрещённых правил, это очень опасная политика, в плане что можно потерять доступ к серверу.
Как минимум всегда разрешайте ssh, как сделать разрешающие правила, смотри ниже.


Код:
# Установка политики по умолчанию в DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP

# Очистка всех правил
iptables -F
ip6tables -F

Разрешение основных соединений​

Локальный интерфейс (localhost):
Код:
iptables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT

Установленные и связанные соединения:
Код:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Добавление правил для IP Cloudflare​

Пройдитесь по спискам IP-адресов и добавьте соответствующие правила:

Код:
# Для IPv4
while read -r ip; do
    iptables -A INPUT -p tcp -m multiport --dports 80,443 -s "$ip" -j ACCEPT
done < /path/to/cloudflare-ips-v4.txt

# Для IPv6
while read -r ip; do
    ip6tables -A INPUT -p tcp -m multiport --dports 80,443 -s "$ip" -j ACCEPT
done < /path/to/cloudflare-ips-v6.txt

Защита SSH​

Защита SSH-сервера от перебора паролей и DDoS-атак является критически важной.
Рекомендуется изменить порт по умолчанию и установить fail2ban.

Но мы в скрипте ещё кое-что сделаем.)

Ограничение частоты подключений (5 подключений в минуту):
Код:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

Т.к. политика нашего файервола блокируй всё, нужно обязательно разрешить доступ к SSH, иначе потеряете доступ к серверу.

Код:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Аналогичным образом, можно открыть другие порты.

Разрешение специфичных портов для определенных IP​

Если вам нужно разрешить доступ к определенному порту только с определенных IP-адресов:
Код:
iptables -A INPUT -p tcp --dport 1500 -s your.allowed.ip.address -j ACCEPT

Блокировка остальных соединений​

После того как все необходимые правила добавлены, остальные подключения будут автоматически блокироваться из-за политики по умолчанию DROP.

Шаг 5: Сохранение и применение правил​

Чтобы сохранить текущие правила и применять их после перезагрузки, используйте:

Код:
# Сохранение правил
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Убедитесь, что утилита iptables-persistent установлена:
Код:
apt-get install iptables-persistent

И тогда можно так:
Код:
netfilter-persistent save

Придумал ещё безопасное атомарное сохранение правил, на случай если например сервер кто-то вырубит в момент сохранения правил, полезно если скрипт работает в планировщике:
Код:
iptables-save > /etc/ispiptable.conf.new && mv /etc/ispiptable.conf.new /etc/ispiptable.conf
ip6tables-save > /etc/ispip6table.conf.new && mv /etc/ispip6table.conf.new /etc/ispip6table.conf

Заключение​

Создание скрипта для автоматизации настройки iptables позволяет обеспечить надежную защиту сервера и упростить управление правилами брандмауэра. Регулярное обновление списка IP-адресов Cloudflare гарантирует, что ваш сервер будет правильно взаимодействовать с их сетью, обеспечивая безопасность и производительность.

Важно: Всегда тестируйте новые правила iptables в тестовой среде или осторожно применяйте их на рабочем сервере, чтобы избежать случайной блокировки доступа.

Данные советы можно использовать в зависимости от ваших целей.
Удачи!)
 

HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
173
Репутация
176
Беру на вооружение, спасибо))
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 197
Репутация
8 331
Беру на вооружение, спасибо))
Ага, советы универсальные.
Так можно прикрыть айпи на любой защите, закрыть например если поднимете сайт в ТОРе.

И вообще прикол в том-что сайт будет на айпи, а при этом все порты закрыты, все будут думать что айпи не рабочий.)
 
Верх Низ