На моём микротике есть возможность подключения через WAN(интернет) и для безопасности решил настроить Port Knocking.
Тут я хочу разместить пример своей настройки, который вы можете применить у себя или высказать свою критику, которая тоже одобряется.
И так. Мой Port Knocking был реализован на протоколе TCP. Клиент, который должен стучаться на порты, отправляет TCP пакеты на определённые порты в определённой последовательности. В моём случае для этого я написал программу для автоматизации процесса. Если захотите реализовать такой же вариант конфигурации, то ПО можно найти тут: https://github.com/kukurua/Port-Knocking.
Микротик, в свою очередь, обрабатывает получаемые пакеты TCP с помощью фаервола и посылает ответ TCP-reset(чтобы моя программа поняла, что она стучится в тот порт). От отправки ответа можно и избавиться. Мне это необходимо для работы программы.
В случае, если клиент стучится на верный порт, микротик добавляет на небольшой промежуток времени IP адрес клиента в список прошедших первую ступень проверки. За то время, пока клиент находится в списке прошедших проверку он должен постучаться на второй порт, который также добавит IP адрес клиента в список прошедших вторую ступень проверки и т.д. Количество необходимых портов для "простукивания" определяет сам администратор сети. После всех этих кругов ада микротик предоставляет вам доступ уже к полезным портам(к примеру: SSH, WinBox) или выполняет другие функции, которые вы настроили.
От теории к конфигурации
Лично я вывел Port Knocking в отдельную цепочку, а для того чтобы в неё попасть создал правило в цепочке input с действием jump, которое отслеживает входящие tcp пакеты на определённых портах.
Правило из цепочки input:
Код: Выделить всё
12 ;;; Port Knoking Chain Jump
chain=input action=jump jump-target=Security Port Knock connection-state=new protocol=tcp in-interface-list=WAN dst-port=1111,1112,1113 log=no log-prefix=""
Код: Выделить всё
0 ;;; security: Port Knoking
chain=Security Port Knock action=add-src-to-address-list protocol=tcp src-address-list=knock 2 address-list=knock 3 address-list-timeout=2h dst-port=1113
log=yes log-prefix="accept port knocking"
1 chain=Security Port Knock action=reject reject-with=tcp-reset protocol=tcp src-address-list=knock 2 dst-port=1113 log=no log-prefix=""
2 chain=Security Port Knock action=add-src-to-address-list protocol=tcp src-address-list=knock 1 address-list=knock 2 address-list-timeout=30s dst-port=1112
log=no log-prefix=""
3 chain=Security Port Knock action=reject reject-with=tcp-reset protocol=tcp src-address-list=knock 1 dst-port=1112 log=no log-prefix=""
4 chain=Security Port Knock action=add-src-to-address-list protocol=tcp address-list=knock 1 address-list-timeout=30s dst-port=1111 log=no log-prefix=""
5 chain=Security Port Knock action=reject reject-with=tcp-reset protocol=tcp dst-port=1111 log=no log-prefix=""
6 chain=Security Port Knock action=drop log=no log-prefix=""
Правила под номерами: 5, 3 и 1 не обязательны. В моём случае они нужны для корректной работы программы.