Собрание статей и заметок преимущественно по администрированию операционных систем Linux и Windows (но не только). Цель - собрать в одном месте полезное и интересное, что то вроде записной книжки. Большая часть скопирована целиком или скомпилирована из найденного в интернете, и я никоим образом не предендую на авторство, которое мне не принадлежит, чукча не писатель, чукча читатель. Некоторые же статейки - написаны мной, в качестве шпаргалок по мотивам прохождения некоторых квестов.
Если у вас вдруг возникнет необходимость ограничить количество сессий для айпи адресов в вашей локальной сети, то после прочтения данной заметки у вас будет готовое решение. Воспользуемся штатными возможностями пакетного фильтра iptables, а именно его модулями connlimit иrecent. Модуль connlimit сильно расходует ресурсы машины, и использовать его рекомендуется только в маленьких сетях, да и работает он только с протоколом TCP. Connlimit может ограничивать количество установленных tcp сессий для каждого клиента достаточно простым правилом, например пример приведенный ниже ограничит количество TCP сессий от каждого клиента из сети 172.16.0.0/12 в 200.
Код:
iptables -A FORWARD -s 172.16.0.0/12 -p tcp --syn -m connlimit --connlimit-above 200 -j DROP
Модуль recent работает по следующему принципу: первым правилом iptables вы назначаете пакетам удовлетворяющим определенным критериям уникальное имя которое впоследствии будет использоваться этим модулем для наложения ограничений. Например присвоим всем сетевым пакетам с состоянием NEW (новое соединение), проходящие через сетевой интерфейс eth0 нашего роутера имя SYNF. Код:
iptables -A FORWARD -i eth0 -m state --state NEW -m recent --set --name SYNF --rsource
Вторым правилом мы скажем модулю, что если от какого-то клиента таких пакетов помеченных как SYNF больше 10 за 10 секунд, то такие пакеты должны отбрасываться.
Код:
iptables -A FORWARD -i eth0 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 --rttl --name SYNF --rsource -j DROP
Тестирование показало, что использование модуля recent не влияет на нагрузку роутера. Причем с помошью комбинации модулей state и recent можно делать достаточно интересные ограничения в сетевом трафике препятствуя распространению спама, флуда и пр.