Разберемся, как это работает.
Итак, если происходит подключение к ssh-серверу, срабатывает последнее правило из списка, в результате чего адрес отправителя пакета попадает в список адресов с именем ssh_stage1 на одну минуту.Если подключение к серверу было осуществлено успешно, соединение перейдет в состояние established и эти правила, ориентированные на connection-state=new не будут срабатывать.
Если же, подключающийся не знает пароля, сервер его отключит. И при попытке подключения в течении одной минуты после первой попытки, сработает второе снизу правило. В результате чего адрес отправителя пакета попадет на одну минуту в список адресов с именем ssh_stage2.
Третья попытка подбора пароля в течении минуты приведет к попаданию атакующего на одну минуту в список с именем ssh_stage3. Если атакующий попытается подключиться в течении одной минуты после попадания его адреса в список ssh_stage3, он попадет в список ssh_blacklist на длительное время (в примере на 10 дней).
Первое правило этого примера блокирует прохождение пакетов на ssh-сервер, от адресов входящих в последний список.
Результат работы примера:
Понятно, что если Вы замените в примере цепочку input на forward, а dst-port замените на 3389, Вы защитите таким образом опубликованный терминальный сервер. Кстати, данный пример легко модифицируется для реализации такой технологии как Port Knocking.
Суть данной технологии заключается в том, что для того, чтобы адрес источника пакета получил доступ к защищаемому ресурсу, он должен сначала «постучать» в заранее определенной последовательности в заранее определенные порты по протоколам TCP и/или UDP.
Попробуем теперь модифицировать пример. Теперь нам надо добиться того, чтобы удаленный компьютер получил доступ к ssh серверу, «простучав» порты в последовательности tcp:2000, udp:1000, tcp:5000
Между «стуками» не должно пройти более 5 секунд. Доступ для попытки подключения после успешного простукивания портов предоставляется на 1 минуту.
Решение:
add chain=input connection-state=new dst-port=22 protocol=tcp
так как у нас (по предыдущей статье) все пакеты дропаются.