Наваял правила для порткнокинга:
Код: Выделить всё
/ip firewall filter
add action=accept chain=input src-address-list=port_knocking
add action=drop chain=input dst-port=80 in-interface=bridge1 protocol=tcp
add action=add-src-to-address-list address-list=stage1 address-list-timeout=10s chain=input \
in-interface=bridge1 packet-size=38 protocol=icmp
add action=add-src-to-address-list address-list=stage2 address-list-timeout=10s chain=input \
in-interface=bridge1 packet-size=48 protocol=icmp src-address-list=stage1
add action=add-src-to-address-list address-list=port_knocking address-list-timeout=5m chain=input \
in-interface=bridge1 packet-size=58 protocol=icmp src-address-list=stage2
add action=add-src-to-address-list address-list=port_knocking_BAN address-list-timeout=5m chain=input \
comment=BAN in-interface=bridge1 log=yes packet-size=!58 protocol=icmp src-address-list=stage2
а) пакет на 38 бит проходит
б) пакет на 48 бит проходит и по этому же пакету срабатывает последнее правило, так как оно true (48 бит ведь != 58)
Мысля была такая: если кто-то как-то простучался успешно 2 раза, т.е. 38 бит => stage1 => 48 бит => stage2 => и тут отсылается любой размер пакета, не равный 58, то ip заносится в бан лист.
Но, как оказалось, не учел дальнейшее прохождение пакета на предпоследнем правиле; 48 бит проходят соответствующее правило, идет дальше и зацепляет последнее правило (так как source adress list = stage2). Собственно как сделать, чтобы оно не зацеплялось, но в source adress list было stage2, т.е. чтобы правила срабатывали при цепочке?
На просторах инета предлагают только порты-ловушки, вне зависимости от цепочки, а ведь это более красивое решение, только не понимаю как его реализовать..