Схемата която ще разгледаме е много проста. Имаме рутер управляващ достъпа от/към Интернет и клиент ползващ услугите управлявани от рутера.

Няколко полезни линка: Базов FireWall със SNAT и DNAT Ако не искате да четете цялата статия накратко командите:
### Защита от SSH атака /ip firewall filter add chain=input protocol=tcp dst-port=22 src-address-list=ssh_blacklist \ action=drop comment="drop ssh brute forcers" add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage3 \ action=add-src-to-address-list address-list=ssh_blacklist address-list-timeout=1w3d add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage2 \ action=add-src-to-address-list address-list=ssh_stage3 address-list-timeout=1m add chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage1 \ action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m add chain=input protocol=tcp dst-port=22 connection-state=new \ action=add-src-to-address-list address-list=ssh_stage1 address-list-timeout=1m ### Защита на рутера и LAN-a /ip firewall filter add action=accept chain=input connection-state=established,related,untracked add action=accept chain=forward connection-state=established,related,untracked add action=accept chain=input dst-port=8291 in-interface=ether1 protocol=tcp add action=drop chain=input in-interface=ether1 add action=drop chain=forward in-interface=ether1 out-interface=ether2 connection-nat-state=!dstnat add action=drop chain=input connection-state=invalid add action=drop chain=forward connection-state=invalid ### SNAT/DNAT /ip firewall nat add chain=srcnat out-interface=ether1 src-address=10.0.0.0/24 action=masquerade add chain=dstnat protocol=tcp dst-port=80 in-interface=ether1 action=dst-nat to-addresses=10.0.0.100 to-ports=80 add chain=dstnat protocol=tcp dst-port=21 in-interface=ether1 action=dst-nat to-addresses=10.0.0.100 to-ports=21 add chain=dstnat protocol=tcp dst-port=2222 in-interface=ether1 action=dst-nat to-addresses=10.0.0.100 to-ports=22
Това е много брутална защитна стена с високи ограничения. Има по-интелигентен начин примерно на: "Примери основно FireWall"
Много хора обръщат много внимание за защита на потребителите от хакерски атаки, особено идващи отвън. Практиката показва, че системата се руши отвътре, но това е тема за друг разговор. Mikrotik получава настройките си за ether1, чрез DHCP Client. За вътрешната мрежа имаме NAT. На интерфейс ether2 има стартирал DHCP сървър. Ще покажа командите от конзола защото тук няма нищо ново.
Дефиниране на IP адреси /ip address add address=10.0.0.1/24 interface=ether2 network=10.0.0.0 DHCP сървър върху ether2 /ip pool add name=dhcp_pool_LAN ranges=10.0.0.200-10.0.0.254 /ip dhcp-server add address-pool=dhcp_pool_LAN interface=ether2 name=dhcp-LAN /ip dhcp-server network add address=10.0.0.0/24 dns-server=10.0.0.1 gateway=10.0.0.1 DHCP клиент върху ether1 /ip dhcp-client add interface=ether1 За да може Mikrotik да играе ролята на DNS сървър /ip dns set allow-remote-requests=yes NAT на вътрешната мрежа /ip firewall nat add action=masquerade chain=srcnat out-interface=ether1 src-address=10.0.0.0/24 Име на Mikrotik-a /system identity set name=Mikrotik
Така клиента VPC ще получава автоматично мрежовите си настройки и ще може да излиза в Интернет.
Отнася се за всичко което идва към рутера. Това са така наречените input правила. Освен това ще се отнасят и за интерфейс ether1, значи има значение за всичко идващо от Интернет.




Всичко което идва от Интернет към рутера забраняваме. Обърнете внимание на номерацията на правилата. На по-късен етап това има значение. В случая правилото е с номер 0. Първо ще покажа всички правила през WinBox и след това как изглеждат за конзола. Така създаденото правило "чупи" връзката към Интернет. Примерно тестваме чрез командата ping tlan.net. Това ще изпрати пакет до tlan.net и ще очаква отговор от същото място. Пакета ще излезе но с горното правило нищо няма да влезе и така достъпа до Интернет е разрушен. За да се върне Интернет ще създадем ново правило.


Разрешаваме на всички пакети които са маркирани от предни връзки. Грубо казано пакети които са излезли и се знаят, че са наши ще се приемат.

Ако се пробваме да пингнем tlan.net, отговорът отново ще е отрицателен. Това е така, защото правилата с по-малък номер имат по-голяма тежест. По-точно правилата се изпълняват отгоре надолу. Първо трябва да разрешим удостоверените пакети и след това да забраним всички останали, входящи. С мишката drop правилото го дърпаме надолу.

Това е правилната подредба на правилата. Сега ping-a до tlan.net върви.
Това са така наречените forward правила. В 90% от случаите рутера обработва точно този трафик. Сега ще блокираме всички заявки от Интернет към нашата локална мрежа. Така никй няма да може да напише някакви правила отвън като маршрути примерно.



Всички пакети идващи отвън (ether1), пренасочени навътре (ehter2) ще бъдат блокирани. Така наново VPC няма да има достъп до Интернет. Случаят е аналогичен на input правилото. Разликата е, че рутера ще може да ping-ва адреси от Интернет, а клиента не. В горния случай (правило № 1) и рутера и клиента не можеха. Да оправим проблема.


Разрешаваме всички познати (установени или свързани) пакети да се пренасочват.

Наново с мишката правилото трябва да се премести по-нагоре.

Трябва да се получи както горната картинка. Сега наново ping-a към Интернет върви. На практика тези правила не са достатъчни. Ще създадем още 2 правила. Ще блокираме всички неизвестни съединения. Започваме с input правилото.


Всички входящи непознати пакети се блокират.

Продължаваме с forward правилото.


Всички непознати пренасочвани пакети се блокират.

Сега ако се пробва от VPC или Mikrotik да се ping-не някое IP от Интернет ще има успех. Да видим дежурните команди през терминал.
/ip firewall filter add action=accept chain=input connection-state=established,related add action=accept chain=forward connection-state=established,related add action=drop chain=input in-interface=ether1 add action=drop chain=forward in-interface=ether1 out-interface=ether2 add action=drop chain=input connection-state=invalid add action=drop chain=forward connection-state=invalid
Наново напомням! Последователността на правилата са от значение. За всеки случай да пуснем ping-a от Интернет към рутера. Не е добра практика но понякога се налага.



Правилото е най-долу и е с най малка тежест. Трябва да се премести най-отгоре.

Така правилно изглежда защитната стена. Командите от терминал. Напомням, че не добра практика но понякога се налага.
### Създаваме правилото за отговор по ICMP. /ip firewall filter add action=accept chain=input protocol=icmp ### Проверяваме къде се намира правилото /ip firewall/filter/print Flags: X - disabled, I - invalid; D - dynamic 0 chain=input action=accept connection-state=established,related log=no log-prefix="" 1 chain=forward action=accept connection-state=established,related log=no log-prefix="" 2 chain=input action=drop in-interface=ether1 log=no log-prefix="" 3 chain=forward action=drop in-interface=ether1 out-interface=ether2 log=no log-prefix="" 4 chain=input action=drop connection-state=invalid log=no log-prefix="" 5 chain=forward action=drop connection-state=invalid log=no log-prefix="" 6 chain=input action=accept protocol=icmp log=no log-prefix="" ### Правилото ни е най-отдоло (6), трябва да стане (0) ip/firewall/filter/ move 6 destination=0 ### Проверяваме /ip firewall/filter/print Flags: X - disabled, I - invalid; D - dynamic 0 chain=input action=accept protocol=icmp log=no log-prefix="" 1 chain=input action=accept connection-state=established,related log=no log-prefix="" 2 chain=forward action=accept connection-state=established,related log=no log-prefix="" 3 chain=input action=drop in-interface=ether1 log=no log-prefix="" 4 chain=forward action=drop in-interface=ether1 out-interface=ether2 log=no log-prefix="" 5 chain=input action=drop connection-state=invalid log=no log-prefix="" 6 chain=forward action=drop connection-state=invalid log=no log-prefix=""
Всичко е точно.
Доста често ще видите по логовете на Mikrotik как всякакви потребители с различни IP адреси се мъчат да се свържат и да Ви хакнат. За да не си играете, постоянно да ги следите и блокирате ще покажа начин, тази опция да се извършва автоматично. За начало да видим командите:
/ip firewall filter add action=drop chain=input comment="drop ssh brute forcers" dst-port=22 \ protocol=tcp src-address-list=ssh_blacklist add action=add-src-to-address-list address-list=ssh_blacklist \ address-list-timeout=1w3d chain=input connection-state=new dst-port=22 \ protocol=tcp src-address-list=ssh_stage3 add action=add-src-to-address-list address-list=ssh_stage3 \ address-list-timeout=1m chain=input connection-state=new dst-port=22 \ protocol=tcp src-address-list=ssh_stage2 add action=add-src-to-address-list address-list=ssh_stage2 \ address-list-timeout=1m chain=input connection-state=new dst-port=22 \ protocol=tcp src-address-list=ssh_stage1 add action=add-src-to-address-list address-list=ssh_stage1 \ address-list-timeout=1m chain=input connection-state=new dst-port=22 \ protocol=tcp add action=accept chain=input comment="SSH traffic monitor" dst-port=22 \ protocol=tcp/ip firewall filter add action=drop chain=input comment="drop ssh brute forcers" dst-port=22 \ protocol=tcp src-address-list=ssh_blacklist add action=add-src-to-address-list address-list=ssh_blacklist \ address-list-timeout=1w3d chain=input connection-state=new dst-port=22 \ protocol=tcp src-address-list=ssh_stage3 add action=add-src-to-address-list address-list=ssh_stage3 \ address-list-timeout=1m chain=input connection-state=new dst-port=22 \ protocol=tcp src-address-list=ssh_stage2 add action=add-src-to-address-list address-list=ssh_stage2 \ address-list-timeout=1m chain=input connection-state=new dst-port=22 \ protocol=tcp src-address-list=ssh_stage1 add action=add-src-to-address-list address-list=ssh_stage1 \ address-list-timeout=1m chain=input connection-state=new dst-port=22 \ protocol=tcp add action=accept chain=input comment="SSH traffic monitor" dst-port=22 \ protocol=tcp
Малко обяснение по горните команди. 1. Забраняваме всичко което идва отвън и се обръща към порт 22. Създаваме и файл наречен ssh_blacklist. В него ще се записват IP адреси които няколко пъти са се опитали да се свържат с рутера и не са успели. Ако три пъти не са успели да се свържат по SSH то IP-то автоматично ще се запише в блеклистата. 2. Проверяваме всеки опит за влизане в Mikrotik по порт 22. Ако по някаква причина не може да се влезе (примерно грешна парола) се създават записи ssh_stage 3, ssh_stage 2 и ssh_stage 1, 3. При 3 грешни опита за влизане IP адреса от който се прави опита за влизане се записва в ssh_blacklist и автоматично се блокира за достъп до системата за 10 дена. 4. Ако пък правилно се достъпи по SSH то не се прави запис в ssh_blacklist и се достъпва рутера. За накрая да позволим достъп до рутера през Интернет по WinBox. Наново само команди, без картинки.
/ip firewall filter add action=accept chain=input dst-port=8291 protocol=tcp /ip/firewall/filter/print Flags: X - disabled, I - invalid; D - dynamic 0 chain=input action=accept protocol=icmp log=no log-prefix="" 1 chain=input action=accept connection-state=established,related log=no log-prefix="" 2 chain=forward action=accept connection-state=established,related log=no log-prefix="" 3 chain=input action=drop in-interface=ether1 log=no log-prefix="" 4 chain=forward action=drop in-interface=ether1 out-interface=ether2 log=no log-prefix="" 5 chain=input action=drop connection-state=invalid log=no log-prefix="" 6 chain=forward action=drop connection-state=invalid log=no log-prefix="" 7 chain=input action=accept protocol=tcp dst-port=8291 /ip firewall/filter/move 7 destination=1 /ip/firewall/filter/print Flags: X - disabled, I - invalid; D - dynamic 0 chain=input action=accept protocol=icmp log=no log-prefix="" 1 chain=input action=accept protocol=tcp dst-port=8291 2 chain=input action=accept connection-state=established,related log=no log-prefix="" 3 chain=forward action=accept connection-state=established,related log=no log-prefix="" 4 chain=input action=drop in-interface=ether1 log=no log-prefix="" 5 chain=forward action=drop in-interface=ether1 out-interface=ether2 log=no log-prefix="" 6 chain=input action=drop connection-state=invalid log=no log-prefix="" 7 chain=forward action=drop connection-state=invalid log=no log-prefix=""
Всичко е точно. Използвани материали: YouTube - Базовая настройка firewall на Mikrotik
SSH блокиране на "хакери"