Comments 27
Неделя port knocking на Хабре! Ждем следующую статью "Я тут почитал предыдущие, ну нельзя же так!" Вот за это и любим наш Хабр ;)
Может, это классическая схема с "... захожу под другим именем и пишу заведомо неправильный ответ" :-)
Да, так и есть)))
Тогда если завтра выйдет пост про реализацию PortKnocking через NFQueue, то это буду либо я, либо наши сеньоры =))
Шутка.
Думаю, простого комментария по этой теме хватит :)
#!/usr/sbin/nft -f
flush ruleset
define SSH_KNOCK_PING_LEN1 = 128
define SSH_KNOCK_PING_LEN2 = 138
define SSH_KNOCK_PING_LEN3 = 148
define SSH_KNOCK_PING_LEN4 = 158
table inet filter {
set s_ip_ssh_knock_step1 { type ipv4_addr; timeout 15s; gc-interval 5s; }
set s_ip_ssh_knock_step2 { type ipv4_addr; timeout 15s; gc-interval 5s; }
set s_ip_ssh_knock_step3 { type ipv4_addr; timeout 15s; gc-interval 5s; }
set s_ip_ssh_knock_step4 { type ipv4_addr; timeout 15s; gc-interval 5s; }
chain input {
type filter hook input priority filter;
ct state invalid counter drop
ct state related,established counter accept
ct state new tcp dport ssh ip saddr @s_ip_ssh_knock_step4 counter accept
icmp type echo-request jump input_knock
ct state new tcp dport ssh counter drop
}
chain input_knock {
ip saddr @s_ip_ssh_knock_step3 meta length $SSH_KNOCK_PING_LEN4 add @s_ip_ssh_knock_step4 { ip saddr } counter
ip saddr @s_ip_ssh_knock_step2 meta length $SSH_KNOCK_PING_LEN3 add @s_ip_ssh_knock_step3 { ip saddr } counter
ip saddr @s_ip_ssh_knock_step1 meta length $SSH_KNOCK_PING_LEN2 add @s_ip_ssh_knock_step2 { ip saddr } counter
meta length $SSH_KNOCK_PING_LEN1 add @s_ip_ssh_knock_step1 { ip saddr } counter
}
}
Вы что?! Нельзя использовать PortKnocker, используйте VPN, Nginx... и вообще желательно отключить фаервол)))
Извините, если мой велосипед Вас задел!)))
Это значит, что послав один пакет, можно (гипотетически) сразу попасть во все списки.
Вы сравниваете размер и нахождение в предыдущем сете. Размер реального пакета удовлетворяет только одной из записей в таблице. Сколько бы из них и в каком порядке вы ни тестировали. Какая разница, в каком порядке располагать записи? Каждый пакет будет прописывать адресанта в свой сет.
только если адресант есть в предыдущем. то есть послав пакет размером 1028 раньше 999 в 3 список попасть не получится. Как я и говорил, если бы было 3 записи размером 999, то первый же пакет записал адресанта во все списки. А это - не зер гут
только если адресант есть в предыдущем. то есть послав пакет размером 1028 раньше 999 в 3 список попасть не получится.
Ага, так и задумано ведь.
Как я и говорил, если бы было 3 записи размером 999, то первый же пакет записал адресанта во все списки.
Не говорили :) при одинаковом размере да, только обратная проверка сетов работает (как единственное условие сравнения при всегда прямом прохождении ip-таблиц).
А вот и говорил =)))
"Почему я рассматриваю списки с начала в конец? Потому что при прохождении правил, таргет SET не прекращает прохождение по списку правил файрвола. Это значит, что послав один пакет, можно (гипотетически) сразу попасть во все списки. В данном примере, конечно, не получится, но все равно лучше смотреть с конца в начало."
Я так понял это было указано для общего случая, а не конкретного.
К примеру у меня какое-то время fail2ban работал так: при попытке доступа IP попадает в список подозрительных, а если подозрительный IP попадает в fail2ban правило, то уже банится.
И второе правило должно быть до первого.
С нетерпением жду ваш вариант. Мне он уже по нраву =)))
Тут надо хитрее, список портов должен зависеть от чего-то глобального, например от времени. Схема будет сложнее, зато безопаснее.
Можно пойти дальше, если есть IPv6 /64 подсеть, то еще и IPv6 адрес генерировать в зависимости от времени, например раз в минуту менять на новый.
следующая статья будет про knockd
Если правильно понял, такой конфиг принимает соединения точечно, для всех остальных сервак остается безмолвным черным ящиком, который нет смысла атаковать. Шикарное решение.
Для семейного миниофиса (3-5 сотрудников) можно и в прод выпустить. На микротиках это работает не плохо и сам часто этим пользуюсь. На андройде есть не плохая тулза (Knock on Ports - от A Yaburov) для стука на разные устройства. Из минусов - не понятно, кто стучится -), но с впн возни много и далеко не всегда получится подключится через впн... Так что вариант вполне себе...
@ZakharovAV, поясните, пожалуйста, почему у финального списка ("достучавшихся") тип hash:net,iface
? А не просто hash:ip
Port knocking и не только