Конфигуриране на MikroTik като NGFW – интелигентна защитна стена

СЪДЪРЖАНИЕ:

Основни правила в защитната стена (base firewall)
Блокиране на насилие и порнография (violence, porn)
Блокиране на “злонамерени” IP адреси (malicious, botnet)
Блокиране на “опасни сайтове” (malicious, hijacked, ransomware)
Блокиране на нежелани реклами (advertisements and tracking)
Блокиране на социални мрежи (social media)
Блокиране на държави (countries)
Филтриране на мейл трафика (spammers)

увод:

Ако прохождате в MikroTik и въобще в света на рутерите, този пост не е за вас. Причината е не, че няма да научите бързо какво е NAT, DHCP, DNS и др. Причината е, че трябва да имате поне няколко години стаж като системен администратор за да знаете какво е да “стъпваш върху коричка лед” и по точно въпроса с ограничението на потребителите в Интернет. Ограничението на потребителите в Интернет има най малко три аспекта: психологически, политически и технически, които поставят системния админстратор в малко неудобна поза.

Психологическия вариант е често задаваните въпроси: -Защо го правите? Това е цензура! Нямаме ли права сами да избираме! И тем подобни, колкото и смешно да звучи ако погледнем конституцията на всяка една държава тези потребители са прави да негодуват.

Политическият вариант е: -Виждам сайта на еди коя си партия а не виждам на опонента и?!?! или -Виждам Църкви но не виждам Джамии!?!?! и така нататък. Представете си сега системния администратор който е дръзнал да влезе във филма с филтрирането на съдържанието в Интернет как професионалните му умения всъщност стават социални и как той трябва да обира “луфта” между поръчителя и потребителя.

Техническият вариант е най прост: След създаването на хиляди правила за филтрация защото Интернет е огромен, ресурсите на рутера/защитната стена рязко намаляват в резултат на което се влошава драстично услугата достъп до Интернет. В тази фаза се преминава към решение подмяна на техниката с по висок клас или колкото е възможно оптимизация която също има праг, с две думи втори епизод с повече “екшън”.

С времето съм установил, че голяма част от хората си мислят, че филтриране на съдържанието в Интернет става с натискането на няколко бутона на които пише [STOP-PORN], [STOP-MALICIOUS], [STOP-RACISM] и така нататък. Ако някой производител на мрежова техника ви предлага подобен лесен вариант за администрация и вие му вярвате, това значи, че сте твърде наивен. По принцип от години съм придобил неприязън към всякакви бутони, били те в графични операционни системи или уеб страници. – Защо ли ? Ами защото незнам какво ще последва когато натисна бутона, освен да си повярвам, че каквото си мисля аз, това ще се случи след натискане на бутона.

През последните години филтрирането на Интернет съдържанието стана още по сложно с масово използвания протокол HTTPS/SSL където между потребителя и сайта/услугата се създава един криптиран тунел през който преминава комуникацията между тях в нечетим (криптиран) вид. Споменавам това защото съм виждал изисквания от клиенти които искат защитната стена да ги пази от вируси, използването на определени нецензурни думи или дори спам защита. Да, това беше възможно в някаква степен до преди няколко години с изпозлването на прокси сървъри и layer7 филтри инспектиращи съдържанието на пакетите но след масовото навлизане на SSL това стана история. На антивирусните програми мястото им е в операционните системи, на спам филтрите в мейл сървърите а използването на нецензурирани думи на форумите и чатовете където си има модератори.

Ако до тук не съм ви разубедил в желанието си да филтрирате Интернет, нека си представим тогава, но само за малко, че аз съм доктор Злобил и искам да филтрирам Интернет съдържанието на един рутер с наистина актуални динамично обновяващи се правила на всеки 24 часа.

Основни правила в защитната стена (base firewall)

Това са основни правила в защитната стена, без които е твърде рисковано да работи рутера ви и в който се предполага, че локалната ви мрежа е 192.168.1.0/24 като само от там може да го администрирате! Това естествено значи, че ако се намирате в Интернет няма да имате достъп, както до мениджмънта така и до услугите на рутера. Такъв ще имате само ако се намирате зад самия рутер.

/ip firewall filter
add action=drop chain=input connection-state=invalid
add action=accept chain=input src-address=192.168.1.0/24
add chain=input protocol=icmp
add action=accept chain=input connection-state=established,related
add action=drop chain=input
add action=drop chain=forward connection-state=invalid
add action=fasttrack-connection chain=forward connection-state=established,related
add action=accept chain=forward connection-state=established,related
add action=drop chain=output connection-state=invalid

Блокиране на насилие и порнография (violence, porn)

Една безплатна услуга на OpenDNS:

FamilyShield е специална услуга, предлагана от OpenDNS, различна от другите стандартни пакети. Предназначена за домашни потребители, които искат да предпазят децата си да не виждат неподходящи изображения на компютрите си. FamilyShield винаги ще блокира домейни, категоризирани в системата на OpenDNS, като вулгарни, просташки, насилие или порнография. Единственото нещо, което трябва да направите е да използвате DNS сървърите 208.67.220.123 и 208.67.222.123.

/ip dns
set allow-remote-requests=yes cache-size=8192KiB servers=208.67.220.123,208.67.222.123

Освен, че трябва да сте сигурни, че порт 53/udp е блокиран в Интернет на вашия рутер и разрешен за локалната ви мрежа, трябва да се убедите, че DHCP сървъра рекламира собствения ви рутер за DNS сървър, където стойността в “dns-server=” трябва да е локалният IP адрес на рутера:

/ip dhcp-server network
add address=192.168.1.0/24 dns-server=192.168.1.1 gateway=192.168.1.1

Тъй като все пак е възможно, някои клиенти зад рутера могат да си конфигурират каквито си искат DNS сървъри и да се опитат да заобиколят тези рестрикции. Затова ще добавим още едно правило, в което без значение към кой DNS сървър е заявката за име на домейн, тя винаги ще идва към нашия рутер и само той ще отговаря на запитванията. По този начин клиентите зад рутера могат само да си мислят, че си сменят DNS сървърите, но на практика те винаги ще попадат в рестрикциите и ще отговаря нашия рутер.

/ip firewall nat
add action=dst-nat chain=dstnat dst-port=53 protocol=udp src-address=192.168.1.0/24 to-addresses=192.168.1.1 to-ports=53

Сега остава да проверим работи ли нашата конфигурация и:

– Ооо, ужас, любимия ми сайт е блокиран !!! 🙁

Филтриране на трафика чрез динамични списъци Blacklists

Една безплатна услуга на SQUIDBLACKLIST:

Без значение какъв е вашия рутер, той не е изкуствен интелект и си няма никаква представа, че кликате на всеки мигащ бутон в браузера си който иска да ви подари телефон или да ви запознае с много красива и самотна мацка. Интернет е пълен със сайтове, които се опитват да ви заразят, съберат информация или да ви криптират файловете, за да ви искат пари. Историята показва, че нито човешката природа може да спре да се поддава на такива изкушения, нито вашия рутер има потенциала да засече такава ситуация. Затова в някаква степен можем да намалим риска като използваме така наречената блеклиста (blacklist). Блеклистите са различни видове, голяма част от тях са платени или труднодостъпни, някой не са актуални, други са неразбираеми, трети изискват повече от една “гънка на мозъка”, за да ги подкаращ. Блеклистите всъщност са динамични списъци с променящо се съдържание (IP адреси или домейни), който помагат на рутера чрез правила в защитната стена да не позволява да достигат пакети до вас от лошите хора. Блеклистите се поддържат от групи хора, които или искат да изкарат пари от това или и е писнало от непрекъснатия огън на подобни атаки. Една добра блеклиста е https://www.squidblacklist.org/, като в случая има както безплатен така и много по подробен (платен) списък на лошите места в Интернет:

Блокиране на “злонамерени” IP адреси (malicious, botnet)

/ip firewall raw
add action=drop chain=prerouting src-address-list="sbl blocklist.de"
add action=drop chain=prerouting dst-address-list="sbl blocklist.de"
/system scheduler
add comment="Malicious host ip address list " interval=1d name=schedule1 on-event=\
    "/tool fetch url=\"https://www.squidblacklist.org/downloads/sbl-blocklist-de.rsc\" mode=https;\r\
    \n/import file-name=sbl-blocklist-de.rsc;\r\
    \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
/tool fetch url="https://www.squidblacklist.org/downloads/sbl-blocklist-de.rsc" mode=https;
/import file-name=sbl-blocklist-de.rsc;

Нека все пак да уточним каква е функцията на кода по горе. С първите два реда създаваме филтрираща верига в двете посоки на защитната стена, която ще блокира адресния списък с име: “sbl blocklist.de”. Този списък първо трябва да се изтегли от интернет сайта https://www.squidblacklist.org/downloads/sbl-blocklist-de.rsc и след това да се изпълни с командата import file-name=sbl-blocklist-de.rsc. Това ще налее в моя случай забележителната цифра от 31903 IP адреса на който рутера няма да позволи да достъпват пакети до мен. Тази операция ще се извършва на определен интервал от време (автоматично) без да пипа човешка ръка, разбира се с опцията interval=1d.

Блокиране на “опасни сайтове” (malicious, hijacked, ransomware)

Цифрата на блокираните заразени сайтове чрез DNS е още по впечатляваща в този момент – малко над 70 000 🙂 Това са сайтове които аз по никакъв начин не мога да разгледам, защото рутера пречи на моя браузер да открие съответствието между име на домейн и IP адрес. Този интелигентен начин намалява вероятността компютрите зад моя рутер да пострадат почти до ниво “въздушно капков път”, за което сърдечно благодаря на хората грижещи се за тази динамична блеклиста.

/system scheduler
add comment="Malicious, hijacked, ransomware, dangerous websites." interval=1d name=schedule2 on-event=\
    "/tool fetch url=\"https://www.squidblacklist.org/downloads/tik-dns-malicious.rsc\" mode=https;\r\
    \n/import file-name=tik-dns-malicious.rsc;\r\
    \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
/tool fetch url="https://www.squidblacklist.org/downloads/tik-dns-malicious.rsc" mode=https;
/import file-name=tik-dns-malicious.rsc;

Блокиране на нежелани реклами (advertisements and tracking)

Нежеланите реклами и СПАМ-а са любима тема в скромната ми практика на системен администратор. И въпреки, че ме сърбят ръцете да изпиша още доста редове по темата няма да го направя, защото ще набера скорост и няма да спра. Само ще кажа, че долният код работи много добре. Почти няма случай, в който да кликна на някакъв линк и да се “ошашави” браузера от “попъпи” и нови табове, в които искат да залагам на мачове или да се регистрирам в най- новата онлайн игра ….

/system scheduler
add comment="Advertisements and tracking" interval=1d name=schedule3 on-event=\
    "/tool fetch url=\"https://www.squidblacklist.org/downloads/tik-dns-ads.rsc\" mode=https;\r\
    \n/import file-name=tik-dns-ads.rsc;\r\
    \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
/tool fetch url="https://www.squidblacklist.org/downloads/tik-dns-ads.rsc" mode=https;
/import file-name=tik-dns-ads.rsc;

Блокиране на социални мрежи (social media)

Някак си усещам как започва да виси въпроса: -А, социалните мрежи ? Въпреки, че съм много против и наистина не виждам смисъл от филтрирането на Facebook по много причини ще покажа как става това.

/system scheduler
add comment="Official Facebook domains" interval=1d name=schedule4 on-event=\
    "/tool fetch url=\"https://www.squidblacklist.org/downloads/tik-dns-facebook.rsc\" mode=https;\r\
    \n/import file-name=tik-dns-facebook.rsc;\r\
    \n" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
/tool fetch url="https://www.squidblacklist.org/downloads/tik-dns-facebook.rsc" mode=https;
/import file-name=tik-dns-facebook.rsc;
Да обобщим до тук, освен OpenDNS филтъра FamilyShield създадохме още 4 динамични листи които ще се обновяват на всеки 24 часа автоматично:

1. Malicious host ip address list – 31903 IP адреса
2. Malicious, hijacked, ransomware, dangerous websites – 91125 домейна
3. Advertisements and tracking – 4403 домейна
4. Official Facebook domains – 81 домейна

Освен, че блокирахме на 31903 IP адреса достъпа до нашия рутер чрез защитната стена също така клиентите зад рутера няма да имат достъп до 95567 домейна чрез услугата DNS !!!

Блокиране на държави (countries)

Още една безплатна услуга но този път на https://mikrotikconfig.com/

Възможно ли е да се блокира цяла държава към рутера ? Възможно е, да! И твърде не ефективно, защото от една страна потребителя може да плати за 2$ един OpenVpn във въпросната или съседна страна а от друга твърде възможно е (зависи от държавата разбира се) да засегне някаква услуга, например известен полезен сайт който е колокиран там. Затова аз ще блокирам Албания като предварително се извинявам на Албанския народ за това. Въпреки всичко има, макар и редки случаи когато гео локацията е оправдана като филтър например ако искате да забраните определен порт на услуга.

След като кликнете на бутона OK, ще получите правилата в готов формат copy/paste в терминала на MikroTik. Създаите си сами правило в защитната стена което да блокира или разрешава пакети на адрес листа с име: CountryIPBlocks

/ip firewall address-list
add address=31.22.48.0/20 comment="ALBANIA" list=CountryIPBlocks
add address=31.44.64.0/20 comment="ALBANIA" list=CountryIPBlocks
add address=31.171.152.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=31.222.40.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=37.26.64.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=37.26.80.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=37.139.112.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=45.66.224.0/22 comment="ALBANIA" list=CountryIPBlocks
add address=45.66.252.0/22 comment="ALBANIA" list=CountryIPBlocks
add address=45.67.0.0/22 comment="ALBANIA" list=CountryIPBlocks
add address=46.19.224.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=46.99.0.0/16 comment="ALBANIA" list=CountryIPBlocks
add address=46.183.120.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=46.252.32.0/20 comment="ALBANIA" list=CountryIPBlocks
add address=46.255.144.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=77.83.120.0/22 comment="ALBANIA" list=CountryIPBlocks
add address=77.242.16.0/20 comment="ALBANIA" list=CountryIPBlocks
add address=77.247.88.0/21 comment="ALBANIA" list=CountryIPBlocks
add address=79.98.112.0/21 comment="ALBANIA" list=CountryIPBlocks

Филтриране на мейл трафика (spammers)

По принцип не е решение за забраним въобще 25 порт, чрез който комуникират мейл сървърите, но пък можем да лимитираме всеки който се опита да изпрати много мейли на куп, идентифицирайки го като spammer и блокирвайки тази услуга само за него за 24 часа !

/ip firewall filter
add action=add-src-to-address-list address-list=spammer address-list-timeout=1d chain=forward connection-limit=30,32 dst-port=25 protocol=tcp
add action=drop chain=forward dst-port=25 protocol=tcp src-address-list=spammer

До тук създадохме приблизително умопомрачителните 150 000 правила които дефинират по някакъв начин динамично обновяваща се база. Както сами видяхте безплатна и актуална, сега вече може да се наслаждавате на останалата част от Интернет която не е филтрирана и вероятно твърде скучна 🙂

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This Post Has 10 Comments

  1. Сашо

    просто страхотно.
    действа.
    Има ли начин да го огранича за време…
    т.е. говоря специално за порно сайтовете.
    Примерно след 20.00 часа това блокиране вече да не работи?

  2. Самуил Арсов

    Ако в dst-nat веригата която не позволява на клиентите да ползват други DNS сървъри добавим time=6h-20h то тя ще работи само в този промеждутък от 6 часа сутринта до 20 часа вечерта.


    /ip firewall nat
    add action=dst-nat chain=dstnat dst-port=53 protocol=udp \
    src-address=192.168.1.0/24 to-addresses=192.168.1.1 \
    to-ports=53 time=6h-20h,sun,mon,tue,wed,thu,fri,sat

    Това значи, че през останалото време от 20 часа вечерта до 6 часа сутринта ако на домашния ви компютър DNS сървъра е 8.8.8.8 рестрикциите няма да работят.

  3. Румен

    Поста е страхотен, поздравления за труда. Аз имам един въпрос, който не съм сигурен дали е по темата точно, но все пак смятам, че е важен.
    Имате ли решение за лимитиране на спам конекции към Mikrotik VPN (L2TP\pre-shared key). (Цели китайски мрежи с ИП адреси, който се опитват да налучкат key-a за VPN-a)

  4. Liubo

    Много приятно съм изненадан да видя точно такъв тип статия, защото от доста време ползвам Opedns за филтриране на уеб-трафика заедно с Микротик. Благодарение на статията ще добавя нови неща към защитата, благодаря!

  5. Венелин

    Изключително полезна информация. Веднага се възползвах, за да увелича защитата …
    Поздравления!

  6. sysadmin

    Всичкото това ми идва малко прекалено, до FamilyShield добре, няма порно – няма морно, но от там нататък незнам дали има смисъл да се филтрира. Аз съм с RB4011-ка във фирмата и не усеща натоварване въобще. Направих всичко без Facebook и започнаха да не се отварят на пръв поглед съвсем известни нормални сайтове. Например отваряш mail.ru но не можеш да се логнеш в него защото те води в друг домейн (логина на login.mail.ru) установих, че е в списъка 2. Malicious, hijacked, ransomware, dangerous websites – 91125 домейна . Колежките ме изядоха,че куп сайтове не и се отварят от които аз установих, че проблема е в рекламите с явно еротично съсдържание, това ОК ама самите сайтове са си чисти !

  7. Govermansysadmin

    Е то и на платените е само, само, че има доста повече групи. Същата работа е но там се плащат сериозни пари за лицензи за определен период от време. При нас са Huawei и съм имал случай – пускам адулт и не мога да отворя сайтове за мебели 🙂 Така, че всичко си е ок – да не ползват едни и същи сорсове на листи 🙂

  8. Teodor

    Първо искам да благодаря на автора на тази прекрасна статия, изключително полезна информация. Имам едно питане по темата, как е по-удачно да се drop-ват адресните листи през Raw или през Filter?

  9. Самуил Арсов

    През raw натоварването на процесора е между 30-50% по малко защото на практика е първата верига в защитната стена. Натоварването пада защото не трябва да се взима решение към коя верига да се насочи пакета а направо го дропва. Препоръчително е обаче raw да се използва само за дроп защото пакетите не достигат до conntrack таблицата на рутера и съответно няма connection state.

  10. Nibiru

    Направих го на hAP Lite:

    admin@MikroTik] > system resource print 
                       uptime: 7m30s
                      version: 6.46.2 (stable)
                   build-time: Jan/14/2020 07:17:12
             factory-software: 6.38
                  free-memory: 7.8MiB
                 total-memory: 32.0MiB
                          cpu: MIPS 24Kc V7.4
                    cpu-count: 1
                cpu-frequency: 650MHz
                     cpu-load: 7%
               free-hdd-space: 7.5MiB
              total-hdd-space: 16.0MiB
      write-sect-since-reboot: 533
             write-sect-total: 48978
                   bad-blocks: 0%
            architecture-name: smips
                   board-name: hAP lite
                     platform: MikroTik
    

    и в лога излезе това :

    [admin@MikroTik] > log print
    22:15:38 system,error,critical router was rebooted without proper shutdown 
    22:15:38 system,error,critical kernel failure in previous boot 
    22:15:38 system,error,critical out of memory condition was detected 
    

    Т а с две думи на слаб хардуер не става – не му стига памета и се рестартира .. иска си ресурс !!!