
Обратный тун-
нель приме-
няется в том
случае, когда
нужно попасть
на машину, за-
щ и щ е н н у ю
м е ж с е т е в ы м
экраном или на-
ходящуюся за NAT.
Принцип действия заключается в
том, что соединение инициирует уда-
ленная машина, а мы попадаем туда
по уже готовому соединению. В такой
туннель можно отправить любой тра-
фик, не только ssh.
Итак, со стороны компьютера за
NAT используется следующее закли-
нание:
# ssh user@server -R
5544:localhost:22 -N
U
ser
A
nd
LINUX
Console
ualinux.com
6
U & L
1 1 - 0 1
Ограничение
скорости
с помощью
iptables
Ограничение
количества
сессий с
одного ip адреса
Обратный
туннель SSH
Несмотря на наличие специальных
утилит для разграничения скорости
передаваемых пакетов, ограничивать
скорость можно и с помощью iptables.
Для этой цели используется мо-
дуль limit. Пакеты, проходящие через
правило с этим критерием будут со-
ответствовать такому условию до тех
пор, пока лимит не исчерпается.
Например:
iptables -I FORWARD -i
eth0 -p tcp -s 192.0.2.12
-m limit --limit 3/hour
--limit-burst 5 -j ACCEPT
Такому правилу будут соответство-
вать первые 5 пакетов, пришедшие из
интерфейса eth0 с адреса 192.0.2.12.
Каждый проходящий пакет увеличи-
вает счетчик на единицу, пока тот не
достигнет значения параметра --limit-
burst. Последующие пакеты такому
правилу соответствовать не будут, а
перейдут к следующему в таблице
правил iptables (что с ними будет по-
том – наше правило не волнует).
В течение следующих 20 минут (это
задает параметр —limit 3/hour, что
значит три раза за час уменьшить зна-
чение счетчика на единицу) ни один
пакет через это правило не пройдет
(не прошедшие пакеты передаются
следующим правилам). По истечении
заданного интервала счетчик умень-
шается на единицу. Теперь правило
может принять еще один пакет. Если
пакет придет – счетчик снова достиг-
нет значения limit-burst. А если не
придет в течение еще 20 минут, то в
дальнейшем правило сможет принять
сразу два пакета, и т.д.
www.oper777.co.cc
Как ограничить количество уста-
навливаемых клиентами сетевых со-
единений, проходящих через шлюз
в единицу времени (на шлюзе стоит
Linux)? Я нашел всего два модуля для
iptables, которые помогут мне помочь
в решении данной задачи. Это модуль
connlimit и модуль recent.
connlimit может работать только
с tcp протоколом и ограничивает ко-
личество установленных tcp сессий
для каждого клиента достаточно про-
стым правилом. Приведенный ниже
пример ограничит количество TCP
сессий от каждого клиента из сети
172.16.0.0/12 в 200.
Например:
A FORWARD -s 172.16.0.0/12
-p tcp --syn -m connlimit
--connlimit-above 200 -j
DROP
Но, как показало практическое
тестирование, connlimit очень силь-
но нагружает процессор, что делает
его применение на роутере нецеле-
сообразным, т.к. несколько клиентов
в сети могут создать шторм сетевых
пакетов и вывести роутер из рабочего
режима, затруднив остальным поль-
зователям комфортную работу.
recent работает по следующему
принципу: первым правилом iptables
вы назначаете пакетам, удовлетворя-
ющим определенным критериям, уни-
кальное имя, которое впоследствии
будет использоваться этим модулем
для наложения ограничений. Напри-
мер присвоим всем сетевыем паке-
там с состоянием NEW (новое соеди-
нение), проходящие через сетевой
интерфейс eth0 нашего роутера имя
SYNF.
-A FORWARD -i eth0 -m state
--state NEW -m recent --set
--name SYNF --rsource
Вторым правилом мы скажем мо-
дулю, что если от какого-то клиента
поступает пакетов помеченных как
SYNF больше 10 за 10 секунд, то такие
пакеты должны отбрасываться.
-A FORWARD -i eth0 -m state
--state NEW -m recent
--update --seconds 10
--hitcount 10 --rttl --name
SYNF --rsource -j DROP
Тестирование показало, что ис-
пользование модуля recent не влияет
на нагрузку роутера. Причем с по-
мошью комбинации модулей state и
recent можно делать достаточно ин-
тересные ограничения в сетевом тра-
фике, препятствуя распространению
спама, флуда и пр.
www.centos.alt.ru