воскресенье, 7 августа 2016 г.

Защита WAN-интерфейса в Mikrotik.

  После первоначальной настройки роутера Mikrotik его нужно защитить от сканирования и атак из WAN-интерфейса. Это нужно делать обязательно, во избежания неприятностей. Защиту внутри локальной сети тоже нужно производить, но она не так критична, хотя и важна. Сами методы разделю по пунктам.

  1) Отключаем учетную запись admin. Создаем новую учетную запись, Имя должно быть не общепринятое, что-бы комбинация логин-пароль служила доп. защитой. Не используйте имена user, guest, admin и другие стандартные. Не используйте пароли 12345, qwerty и тому подобные, а также совпадающие с логином. Пароль должен быть не меньше 8 символов, содержать буквы верхнего и нижнего регистров, цифры и, в идеале, символы.



  2) Отключаем ненужные сервисы, все нужные переводим на не стандартные порты! Список не зарезервированных портов можно найти в Википедии: Список портов TCP и UDP. Доступ из-вне отставляем только реально нужным сервисам. Если есть возможность, сервисы ограничиваем по подсетям.

  
  3)  Отключаем "поиск соседей". MNDP (Neighbor Discovery Protocol) - протокол, с его помощью роутеры MikroTik получают информацию друг о друге и могут выполнить автоматическую настройку некоторых функций. Однако протокол MNDP передает информацию о версии операционной системы и функции, которые включены в роутере. Отключаем в ip/neighbors поиск на WAN-интерфейсе.

  4) Отключаем подключение к роутеру по MAC-адресу из-вне в Tools/MAC Server. На вкладках Telnet Interfaces и WinBox Interfaces добавляем интерфейс LAN, удаляем если есть любые другие интерфейсы и отключаем интерфейс "*all".


  Теперь идет настройка непосредственно firewall, правила имеют очередность, поэтому команды выполнять в последовательности. Перед началом работ сделайте бекап. И помните - удаленная настройка фаервола -к выезду!

5) Организовываем ловушку от перебора портов. Грубый метод. В пункте 8 будет представлено более утонченное решение. Но в нашем деле все методы хороши. Теория такова, если злоумышленник будет перебирать открытые порты вашего маршрутизатора, при попадании на определенный порт, этот IP попадет в блек-лист. Порт нужно выбирать осторожно, что бы он нигде в вашей конфигурации не использовался, и был свободен. После того как определились с портом, добавим 2 правила.
/ip firewall filter
add action=add-src-to-address-list address-list=perebor_portov_drop address-list-timeout=30m chain=input comment=Perebor_portov_add_list dst-port=22 in-interface=ether1-velton log=yes log-prefix=Attack protocol=tcp
add action=drop chain=input comment=Perebor_portov_list_drop in-interface=ether1-velton src-address-list=perebor_portov_drop
  Первым правилом при обращении на порт 22 IP добавляем в дроп-лист "perebor_portov_drop". Вторым правилом - баним его. В последнем скриншоте этих правила нет, но они идут в начале списка в /ip firewall filter.
  * На "MUM Москва 2016" докладчик рассказывал, что ловит злоумышленников в эту ловушку на популярные порты. Например SSH (22/TCP) или RDP (3389/TCP). Можно еще добавить SIP-порт (5060). Вероятность скана именно этих портов - велика. Если вы их не используете для доступа из-все (что разумно) - смело можно воспользоваться этим методом.

6) Ограничиваем количество ICMP-запросов (делаем защиту от флуд-пинг). Вводим дополнительное правило Drop для отслеживания ICMP Drop. Последнее правило не обязательно - нужно лишь для визуального представления администратору сколько пакетов словилось. Необязательное - потому-как в конце у нас все не разрешенные запросы с WAN - блокируются.
/ip firewall filter
add chain=input comment=Allow_limited_pings in-interface=ether1-velton limit=\
    50/5s,2:packet protocol=icmp
add action=drop chain=input comment=Pings_Drop in-interface=ether1-velton \
    protocol=icmp
  7) Ставим лимит входящих соединений. Если с одного IP адреса подключений больше лимита, то этот IP попадает в "черный список" и в дальнейшем блокируется. Например
/ip firewall filter add chain=input protocol=tcp connection-limit=LIMIT,32 \
action=add-src-to-address-list address-list=blocked-addr address-list-timeout=1d
  Где LIMIT - максимальное количество соединений в определенного IP. Предел должен быть от 100 и выше, так как многие услуги, используют несколько соединений (HTTP, Torrent, и другие P2P-программы). После того как пакеты добавлены в address-list можно выставить их drop или опцию tarpit. Она позволяет вместо того чтобы просто удалять пакеты атакующего - захватить и удерживать соединения и с достаточно мощным маршрутизатором это может замедлить скорость атаки.
/ip firewall filter add chain=input protocol=tcp src-address-list=blocked-addr \
connection-limit=3,32 action=tarpit

  Но нам такие сложности не к чему, просто добавим правило с лимитом 200 соединений с одного IP и блоком на сутки:
/ip firewall filter
add action=add-dst-to-address-list address-list=connection-limit \
    address-list-timeout=1d chain=input comment=Connection_limit \
    connection-limit=200,32 in-interface=ether1-velton protocol=tcp
add action=drop chain=input comment=Adr_list_connection-limit_drop \
    in-interface=ether1-velton src-address-list=connection-limit
  8) Включаем защиту от сканеров портов на WAN-интерфейсе:
/ip firewall filter
add action=drop chain=input comment=Port_scanner_drop src-address-list=\
    "port scanners"
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp psd=21,3s,3,1
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp tcp-flags=fin,!syn,!rst,!psh,!ack,!urg
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp tcp-flags=fin,syn
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp tcp-flags=syn,rst
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp tcp-flags=fin,psh,urg,!syn,!rst,!ack
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp tcp-flags=fin,syn,rst,psh,ack,urg
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input in-interface=ether1-velton protocol=\
    tcp tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg
 9) Защищаем от перебора паролей подключения по нестандартному порту к WinBox и SSH из вне. Комментарии читать снизу-вверх.
/ip firewall filter
# все IP в black_list - отклоняем
add action=drop chain=input comment=Drop_winbox_black_list dst-port=5323,5324 \
    in-interface=ether1-velton protocol=tcp src-address-list=black_list
# если новые подключения с адрес-листа Winbox_Ssh_stage3 продолжаются - заносим в новый адрес-лист black_list на 5 минут.
add action=add-src-to-address-list address-list=black_list \
    address-list-timeout=5m chain=input comment=Winbox_add_black_list \
    connection-state=new dst-port=5323,5324 in-interface=ether1-velton \
    protocol=tcp src-address-list=Winbox_Ssh_stage3
# если новые подключения с адрес-листа Winbox_Ssh_stage2 продолжаются - заносим в новый адрес-лист Winbox_Ssh_stage3
add action=add-src-to-address-list address-list=Winbox_Ssh_stage3 \
    address-list-timeout=1m chain=input comment=Winbox_Ssh_stage3 \
    connection-state=new dst-port=5323,5324 in-interface=ether1-velton \
    protocol=tcp src-address-list=Winbox_Ssh_stage2
# если новые(значит была неудачная попытка, например - неправильный пароль, и соединение разорвалось) подключения с адрес-листа Winbox_Ssh_stage1 продолжаются - заносим в новый адрес-лист Winbox_Ssh_stage2
add action=add-src-to-address-list address-list=Winbox_Ssh_stage2 \
    address-list-timeout=1m chain=input comment=Winbox_Ssh_stage2 \
    connection-state=new dst-port=5323,5324 in-interface=ether1-velton \
    protocol=tcp src-address-list=Winbox_Ssh_stage1
# заносим все айпи, которые создали новые подключения на наши порты в адрес-лист на 1 минуту
add action=add-src-to-address-list address-list=Winbox_Ssh_stage1 \
    address-list-timeout=1m chain=input comment=Winbox_Ssh_stage1 \
    connection-state=new dst-port=5323,5324 in-interface=ether1-velton \
    protocol=tcp
# разрешаем подключение к Winbox и Ssh по портам 5323 и 5324
add chain=input comment=Accept_Winbox_Ssh dst-port=5323,5324 in-interface=\
    ether1-velton protocol=tcp
  10) Блокируем bogon-сети. Это зарезервированные диапазоны IP адресов которые еще не были закреплены ни за одним провайдером в мире. Это свободные/пустые диапазоны. Частные сети прячутся от интернета средствами компании или провайдером. Поэтому если к вам вдруг прилетает пакет с сорсом из этих списков, ничего хорошего он принести не может. Bogon IP часто используют злые хакеры для своих вредоносных атак. Актуальный список сетей можно посмотреть тут: http://www.team-cymru.org/Services/Bogons/bogon-bn-nonagg.txt.
/ip firewall address-list
add address=0.0.0.0/8 disabled=no list=BOGON
add address=10.0.0.0/8 disabled=no list=BOGON
add address=100.64.0.0/10 disabled=no list=BOGON
add address=127.0.0.0/8 disabled=no list=BOGON
add address=169.254.0.0/16 disabled=no list=BOGON
add address=172.16.0.0/12 disabled=no list=BOGON
add address=192.0.0.0/24 disabled=no list=BOGON
add address=192.0.2.0/24 disabled=no list=BOGON
add address=192.168.0.0/16 disabled=no list=BOGON
add address=198.18.0.0/15 disabled=no list=BOGON
add address=198.51.100.0/24 disabled=no list=BOGON
add address=203.0.113.0/24 disabled=no list=BOGON
add address=224.0.0.0/4 disabled=no list=BOGON
add address=240.0.0.0/4 disabled=no list=BOGON

Само запрещающее правило:
/ip firewall filter
add action=drop chain=input comment=Bogon_Wan_Drop in-interface=ether1-velton \
    src-address-list=BOGON
  11) Разрешаем все уже установленные подключения (connection state=established). Established - Существующее соединение. Пакет относится у уже установленному соединению, обрабатываемому в данный момент маршрутизатором.
add chain=input comment=Established_Wan_Accept connection-state=established
  12) Разрешаем все зависимые подключения (connection state=related). Related – Связанное соединение. Пакет, который связан с существующим соединением, но не является его частью. Например, пакет, который начинает соединение передачи данных в FTP-сессии (он будет связан с управляющим соединением FTP), или пакет ICMP, содержащий ошибку, отправляемый в ответ на другое соединение.
add chain=input comment=Related_Wan_Accept connection-state=related
13) Блокируем все входящие соединения с WAN.
add action=drop chain=input comment=Drop_all_WAN in-interface=ether1-velton
-------------------
Визуально последовательность правил выглядит так:


   Это минимальная настройка безопасности. Если вы хотите разрешить подключение VPN к роутеру, то как минимум нужно открыть порт. Например, для соединений по порту 1723 (PPTP):
/ip firewall filter
add chain=input dst-port=1723 protocol=tcp
  Так же рекомендую использовать скрипт Оповещение администратора о входе в Mikrotik. Метод защиты сервисов, на которые проброшенные порты с Mikrotik описан в статье тут.
-------------------
Продолжение статьи:

Подписаться на новые статьи.

6 комментариев:

  1. Спасибо за этот пост,как и за большинство других.
    А разве PPTP не нужно еще открыть и GRE?

    ОтветитьУдалить
    Ответы
    1. Да. Все верно. "/ip firewall filter add chain=input action=accept protocol=gre".

      Удалить
  2. established и related уже можно одним правилом разрешать

    ОтветитьУдалить
  3. chain=input action=accept connection-state=established,related log=no

    ОтветитьУдалить
  4. и pptp без gre chain=input action=accept protocol=tcp dst-port=1723 log=no

    ОтветитьУдалить