Приветствую, уважаемые!
Вольный перевод статьи Advanced Features of
netfilter/iptables by Barry O'Donovan с конструктивными замечаниями и дополнениями.
Можно прочитать предыдущие части:
В этой части мы рассмотрим ещё два заключительных дополнения:
- Установка квот трафика
- Фильтрация по значениям TTL
Надеюсь, они будут полезны Вам.
1. Установка квот трафика
Установка квот трафика может быть полезна во многих ситуациях. Как пример, множество широкополосных пользователей сети имеют ограничение по трафику, установленные их провайдером Интернет-доступа, который взимает дополнительную плату при превышении этих ограничений. В этом случае
можете использовать iptables со следующим набором правил, чтобы контролировать использование сети и отключить себя при превышении квоты (пусть в 2GB):
-A INPUT -p tcp -m quota --quota 2147483648 -j ACCEPT
-A INPUT -j DROP
Также просмотреть расход можно командой:
$ iptables -v –L
Учтите, что вы должны вручную сбрасывать
ограничения в конце месяца (перезапуская iptables) или использовать cron для этих целей. Естественно, что ваш компьютер должен быть постоянно включен, чтобы этот пример мог быть как-нибудь использован. Но существует множество других ситуаций, где расширения квот может быть задействовано.
2. Фильтрация по значениям TTL
Значение TTL (Time to live) – это восьмибитовое число, которое уменьшается каждый раз, когда пакет обрабатывается промежуточным хостом между источником и получателем этого пакета.
Значение TTL по умолчанию зависит от операционной системы и обычно находится в пределах 32 – 128. Это значение служит
для того, чтобы никакой пакет в сети из за плохих таблиц маршрутизации не застревал в конечной петле на неопределённый промежуток времени. Как только значение TTL пакета достигает нуля, он уничтожается, и источнику посылается сообщение, который решает, посылать ли этот пакет ещё раз.
Интересный факт не в тему - как работает traceroute: посылается первый пакет со значением TTL равным 1, получаем ответ от первого промежуточного хоста, затем пакет со значением TTL равным 2, и так до тех пор, пока пакет не достигнет пункта назначения.
Полезность фильтрации по значениям TTL зависит только от
вашего воображения. Одно из самых полезных применений
- защита от нападения man-in-the-middle (сниффинг и подмена пакетов между источником и приёмником). Иногда
MITM ещё с сарказмом именуют monkey-in-the-middle. Если
вы часто соединяетесь с вашим рабочим компьютером из дома, то
можете контролировать ваши значения TTL и ожидать пакеты с их определённым максимальным значением. Это можно использовать для блокирования пакетов с более
высокими значениями TTL, так как это может означать возможное нападение
man-in-the-middle; кто-то получает ваши пакеты, изменяет их и отправляет далее адресату. Конечно, есть методы, когда эта
атака не изменяет TTL, но, как известно, любая защита не абсолютна, но инкрементна. TTL также используется для отладки сети или для определения машин с некорректными значениями TTL по умолчанию.
Как простой пример, давайте будем блокировать все пакеты от определённого IP со значением TTL 40 или меньше:
-A INPUT -s 1.2.3.4 -m ttl --ttl-lt 40 -j REJECT
Вы также можете проверить значения TTL, которые имеют TTL c меньшим чем (--ttl-gt) или равняются (--ttl-eq) определённому значению.
Оригинальную версию статьи, не модифицированную моими дополнениями и замечаниями
всегда можно найти на www.linuxgazette.org.