Настройка Firewall Mikrotik

Автор George, Март 11, 2024, 11:55

« назад - далее »

George

Сначала дропаем всё подозрительное, ненормальное, и противоестественное, такое как invalid connection, запросы на мой DNS, листы DROP и так далее.
Далее защиты от сканера портов, от DDoS и Syn атак и т.д.
Следом правила по разграничиванию доступа, запрет ненормалых подключений по VPN....
Потом разрешающие и запрещающие правила для конкретных сетей и пользователей
Последнее правило для запрета всего остального, что не попало под правила выше.
Блокировка любителей сканировать порты:

Код: bash
>/ip firewall filter add chain=input psd=21,3s,3,1 action=add-src-to-address-list address-list=psd

Код: bash
/ip firewall raw add chain=prerouting src-address-list=psd action=drop

Так мы дропнем его навсегда

блокировка DDoS

Код: bash
/ip firewall address-list
Код: bash
add list=ddos-attackers
Код: bash
add list=ddos-target
Код: bash
/ip settings set tcp-syncookies=yes
Код: bash
/ip firewall filter
Код: bash
add chain=forward connection-state=new action=jump jump-target=detect-ddos
Код: bash
add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s
Код: bash
add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s protocol=tcp tcp-flags=syn,ack
Код: bash
add action=add-dst-to-address-list address-list=ddos-target address-list-timeout=10m chain=detect-ddos
Код: bash
add action=add-src-to-address-list address-list=ddos-attackers address-list-timeout=10m chain=detect-ddos
Код: bash
/ip firewall raw
Код: bash
add action=drop chain=prerouting dst-address-list=ddos-target src-address-list=ddos-attackers
1-3 создаем два списка адресов, в которые будут попадать спамеры и жертвы (ведь спам может быть направлен и не на вас, а на сторонний ресурс).

4 включаем кэш для отслеживания SYN-ACK пакетов.

5-10 правила определяющие кто и как часто пытается нас или через нас спамить кого-либо малыми пакетами. Если это не спам, то пакетик считается легитимным и продолжает обрабатываться в обычном режиме.

11-12 отдельная цепочка прероутинга, в которой спам начинает отбрасываться.

Особенно разжевывать или тюнить эту схему не вижу смысла - у всех будут разные задачи и разный результат, который должен получиться. В моем случае мне этого вполне достаточно. Не забудьте в IP -> Firewall поднять эти правила в самый верх. У меня еще выше этих правил стоят правила BLOCK и WhiteList - где, соответственно, черный список - это те адреса, которые мне совсем не нравятся, а белый - это список моих внешних адресов, которые нет смысла пропускать через все остальные правила фаервола. Далее должны расположиться вот эти 4 правила по отсеиванию флуда, а далее уже все остальные с пробросом к внутренним ресурсам.

  •  

George

#1
Входим в редактирование FW
Код: bash
/ip firewall filter
Пакеты проходят по списку правил по порядку, сверху вниз. Если пакет соответствует какому-то правилу, то он прекращает движение по цепочке. Из этого следует важный вывод - первыми в цепочке должны быть правила, которые охватывают максимальный объем трафика, чтобы он дальше не обрабатывался устройством. Примером такого правила является разрешение пакетов уже установленных (established) или связанных (related) соединений, которые ранее были разрешены каким-то правилом. Повторно проверять по всем правилам их не нужно. Сделаем такое правило для цепочки input - входящие соединения роутера.
Код: bash
add action=accept chain=input comment="accept establish & related" connection-state=established,related
Отбрасываем все неверные (Invalid) пакеты
Код: bash
add action=drop chain=input comment="drop invalid" connection-state=invalid
Разрешаем ICMP (ping). У меня он обычно закрыт (drop)
Код: bash
add action=accept chain=input comment="accept ICMP" protocol=icmp
Создаем заключительное правило для цепочки input, которое будет блокировать все запросы, пришедшие не из локальной сети. В моем примере у меня локальная сеть подключена к бриджу bridge1-lan. В него входят все порты, подключенные в локалку.
Код: bash
add action=drop chain=input comment="drop all not from lan" in-interface=!bridge1-lan
На текущий момент мы запретили все запросы из вне к роутеру, кроме пингов. При этом доступ из локальной сети полный. Настроим теперь правила для транзитного трафика цепочки forward. Здесь по аналогии с input первыми идут правила для established, related, invalid пакетов.
Код: bash
add action=accept chain=forward comment="accept established,related" connection-state=established,related
Код: bash
add action=drop chain=forward comment="drop invalid" connection-state=invalid
Теперь запретим все запросы из внешней сети, связь с которой через интерфейс ether1-wan к локальной сети. dstnat это проброс портов, о нем отдельная тема.
Код: bash
add action=drop chain=forward comment="drop all from WAN to LAN" connection-nat-state=!dstnat connection-state=new in-interface=ether1-wan
Разрешаем 80 и 443 порты из локальной сети:
Код: bash
add action=accept chain=forward comment="accept http & https from LAN" dst-port=80,443 in-interface=bridge1-lan out-interface=ether1-wan protocol=tcp
И разрешаем 53 (DNS) порт
Код: bash
add action=accept chain=forward comment="accept dns from LAN" dst-port=53 in-interface=bridge1-lan out-interface=ether1-wan protocol=udp
Все остальное отбрасываем
Код: bash
add action=drop chain=forward comment="drop all from LAN to WAN" in-interface=bridge1-lan out-interface=ether1-wan
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.