НАСТРОЙКА IPTABLES. Защита от паразитного трафика
Posted by Cooper Tue, 28 Nov 2006 16:14:00 GMT
Анализируя информацию о статистике использования моего блога, я обнаружил, что ежедневно с конкретных хостов происходит подозрительно бурная активность, характерная скорее для роботов или пауков чем для реальных пользователей.
Кроме того, что эта информация искажала общие данные статистики использования ресурса, к тому же я получал приличный объем зарубежного трафика, за который при определенных условиях приходится платить отдельно.
Я решил найти простое и действенное средство защиты от паразитного трафика, которое, по возможности, должно базироваться на стандартных утилитах LINUX. Для себя я выделил несколько подходов:
Блокировать “плохие” хосты на уровне приложения;
Использовать стандартные средства вэб-сервера Apache или lighttpd;
Настроить правила утилиты iptables, которая присутствует во всех LINUX дистрибутивах, базирующихся на ядрах 2.4.x или 2.6.x
Первые два способа были исключены из рассмотрения, поскольку здесь существует определённая привязка к приложению или к конкретному web-серверу. И если, например, Apache будет заменён на ngnix, придется заново прописывать блокирующие правила. К тому же, паразитные пакеты будут доходить до вэб сервера и приложения, дополнительно загружая их.
Используя утилиту iptables достаточно просто можно настроить набор правил для блокирования, а также получить средство для накопления и просмотра статистики по созданным правилам.
Настройка правил iptables
Процесс настройки достаточно простой и занимает несколько минут. Надо заметить, что Вы должны зайти на сервер как root пользователь или использовать команду sudo для добавления правил.
Итак, у нас есть конкретный хост (crawler.bloglines.com, IP=65.214.44.29) и целая подсеть (84.110.0.0), которые надо забанить. Правила выглядят так:
#Crawler bloglines /sbin/iptables -A INPUT -s 65.214.44.29 -p tcp -m multiport --dports 80 -j DROP #bzq-*.red.bezeqint.net /sbin/iptables -A INPUT -s 84.110.0.0/255.255.0.0 -p tcp -m multiport --dports 80 -j DROP
Для других хостов или подсетей в правилах iptables, меняется только IP источника (параметр -s).
Просмотр статистики iptables
Запускаем iptables с параметрами -L и -v для просмотра статистики. Опция -L определяет вывод статистики для цепочки (chain). Если конкретная цепочка не задана, то для всех.
Опция -v задает расширенный вывод, включающий в себя счетчики пакетов и байт.
Очень часто добавляется параметр -n, который говорит команде iptables о том, что не надо обращаться к DNS для разрешения IP адресов и вывода их в виде доменных имен. Это значительно уменьшает время на выдачу результатов и позволяет уменьшить нагрузку на сервер.
Для дополнительного удобства список правил может быть пронумерован. Для этого используется опция –line-numbers.
/sbin/iptables -L -v --line-numbers

Сохранение правил и статистики
Если перезагрузить компьютер или удалить iptables kernel modules вся информация о собранной статистике и добавленных правилах будет утеряна. Чтобы предотвратить потерю данных необходимо делать бэкап после каждого изменения в списке правил. Для этого служить утилита iptables-save. Например:
iptables-save -c > /root/iptables-backup.txt
Восстановить данные из бэкапа можно используя команду iptables-restore. Обычно это делается после перезагрузки в одном из скриптов инициализации, например в /etc/rc.d/rc.local для Red Hat Linux.
iptables-restore -c < /root/iptables-backup.txt
Библиография:

