Laboratorium MikroTik RouterOS – Rozwiązania zadań praktycznych
Poniżej znajdują się kompletne rozwiązania 10 zadań laboratoryjnych z zakresu programowania w MikroTik RouterOS.
Każde rozwiązanie zawiera działający kod skryptu wraz z opisem działania oraz wskazówkami uruchomienia.
Wszystkie skrypty zostały zweryfikowane pod kątem poprawności składni RouterOS.
Zadanie 1: Monitor statusu interfejsów sieciowych
Rozwiązanie:
Skrypt sprawdza status wszystkich interfejsów sieciowych na routerze MikroTik i generuje czytelny raport o ich stanie.
Opis działania:
- Skrypt wykorzystuje polecenie
/interface print do pobrania listy wszystkich interfejsów sieciowych zdefiniowanych w routerze
- Pętla
:foreach iteruje po wynikach polecenia print, przechodząc przez każdy interfejs indywidualnie
- Pobranie statusu interfejsu realizowane jest przez operator
->get pobierający właściwość running określającą czy interfejs jest aktywny
- Pobranie typu interfejsu wykonywane jest przez właściwość
type wskazującą rodzaj interfejsu (ethernet, wireless, bridge, itp.)
- Pobranie adresu MAC realizowane jest przez właściwość
mac-address wyświetlającą unikalny adres sprzętowy interfejsu
- Pobranie prędkości łącza realizowane jest przez właściwość
speed wyświetlającą negocjowaną prędkość w Mbps
- Warunek
:if ($running = true) sprawdza czy interfejs jest aktywny i na tej podstawie określa jego status
- Funkcja
/log print zapisuje informacje do logu systemowego routera z znacznikiem czasu
- Formatowanie wyjścia realizowane jest przez polecenie
:put wyświetlające wyniki w formie czytelnej dla administratora
- Obsługa błędów przez sprawdzenie czy interfejs istnieje przed próbą odczytania jego właściwości
- Zliczanie interfejsów aktywnych i nieaktywnych realizowane jest przez zmienne licznikowe inkrementowane w pętli
- Podsumowanie wyświetlane jest na końcu zawierające liczbę interfejsów w każdym stanie
- Kod wyjścia
:return 0 przy poprawnym zakończeniu, :return 1 w przypadku błędów
Plik rozwiązania:
Pobierz 04_mikrotik_z01.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z01.rsc
Zadanie 2: Automatyczny backup konfiguracji
Rozwiązanie:
Skrypt automatycznie tworzy backup konfiguracji routera i zapisuje go do pliku z datą w nazwie.
Opis działania:
- Skrypt wykorzystuje polecenie
/export file= do eksportu bieżącej konfiguracji do pliku
- Generowanie nazwy pliku z datą realizowane jest przez funkcję
:global date ([/system clock get date]) formatującą datę systemową
- Polecenie
:set filename konstruuje nazwę pliku łączącą prefix z datą w formacie RRRR-MM-DD
- Uruchomienie eksportu wykonywane jest przez polecenie
/export file=$filename tworzące plik .rsc
- Pobranie czasu systemowego realizowane jest przez
[/system clock get time] dodające znacznik godziny do nazwy
- Konwersja formatu daty wykonywana jest przez zamianę separatorów "/" na "-" dla spójności nazwy pliku
- Sprawdzenie powodzenia operacji export realizowane jest przez weryfikację istnienia pliku w systemie plików routera
- Polecenie
/file print pozwala zweryfikować utworzenie pliku i pobrać jego rozmiar w bajtach
- Kopiowanie pliku backup do zewnętrznego serwera realizowane jest przez polecenie
/tool fetch z protokołem FTP lub SCP
- Usuwanie starych backupów starszych niż N dni wykonywane jest przez polecenie
/file remove z warunkiem czasowym
- Logowanie operacji do systemu realizowane jest przez
/log info dokumentujące utworzenie backupu
- Obsługa błędów przez konstrukcję
:do on-error= przechwytującą problemy podczas eksportu
- Podsumowanie zawierające nazwę pliku i jego rozmiar wyświetlane jest po zakończeniu operacji
Plik rozwiązania:
Pobierz 04_mikrotik_z02.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z02.rsc
Zadanie 3: Czyszczenie logów systemowych
Rozwiązanie:
Skrypt do automatycznego czyszczenia starych logów systemowych routera.
Opis działania:
- Skrypt wykorzystuje polecenie
/log print do pobrania wpisów z logu systemowego
- Filtrowanie logów według wieku realizowane jest przez parametr
topic lub sprawdzenie pola time
- Pobranie czasu bieżącego wykonywane jest przez
[/system clock get time] do obliczenia różnicy czasu
- Polecenie
:foreach iteruje po wynikach logu identyfikując stare wpisy do usunięcia
- Konwersja czasu na sekundy wykonywana jest przez funkcję pomocniczą parsowania formatu czasu systemowego
- Porównanie czasu wpisu z progiem (np. 7 dni) realizowane jest przez operator porównania
- Polecenie
/log remove usuwa zidentyfikowane stare wpisy z logu systemowego
- Sprawdzenie polityki przechowywania realizowane jest przez zmienną konfiguracyjną określającą liczbę dni
- Iteracja po kategoriach logów (info, warning, error) wykonywana jest przez osobne pętle dla każdego poziomu
- Zliczanie usuniętych wpisów realizowane jest przez zmienną licznikową
- Logowanie operacji czyszczenia wykonywane jest przed i po operacji przez polecenie
/log info
- Obsługa błędów gdy log jest pusty lub niemożliwy do odczytania
- Podsumowanie wyświetla liczbę usuniętych wpisów i czas wykonania operacji
Plik rozwiązania:
Pobierz 04_mikrotik_z03.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z03.rsc
Zadanie 4: Lista użytkowników i ich uprawnień
Rozwiązanie:
Skrypt wyświetla listę wszystkich użytkowników routera wraz z ich uprawnieniami i grupami.
Opis działania:
- Skrypt wykorzystuje polecenie
/user print do pobrania listy wszystkich użytkowników systemu
- Polecenie
:foreach iteruje po wyniku print przechodząc przez każdego użytkownika
- Pobranie nazwy użytkownika realizowane jest przez operator
->get name
- Pobranie grupy użytkownika wykonywane jest przez właściwość
group określającą uprawnienia
- Pobranie daty ważności konta wykonywane jest przez właściwość
expires-in wskazującą kiedy konto wygasa
- Polecenie
/user group print pobiera dostępne grupy i ich uprawnienia systemowe
- Porównanie uprawnień użytkownika z definicją grupy wykonywane jest przez wyszukiwanie w liście grup
- Filtrowanie kont wyłączonych realizowane jest przez sprawdzenie flagi
disabled
- Zliczanie użytkowników aktywnych i wyłączonych wykonywane jest przez zmienne licznikowe
- Formatowanie wyjścia w tabelarycznej formie realizowane jest przez polecenie
:put z wyrównaniem
- Sprawdzenie czy hasło wymaga zmiany wykonywane jest przez właściwość
password-last-changed
- Logowanie operacji do systemu wykonywane jest przez polecenie
/log info
- Podsumowanie wyświetla liczbę użytkowników w każdej grupie uprawnień
Plik rozwiązania:
Pobierz 04_mikrotik_z04.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z04.rsc
Zadanie 5: Monitor ping i powiadomienie o niedostępności hosta
Rozwiązanie:
Skrypt monitoruje dostępność kluczowych hostów w sieci i zapisuje alert do logów gdy host przestanie odpowiadać.
Opis działania:
- Skrypt definiuje tablicę adresów IP do monitorowania przez zmienną
:global hosts przechowującą listę hostów
- Polecenie
:foreach iteruje po liście hostów sprawdzając każdy indywidualnie
- Polecenie
/ping wysyła żądanie ICMP do określonego hosta z licznikiem powtórzeń
- Pobranie wyniku ping realizowane jest przez analizę wyjścia polecenia pod kątem odpowiedzi
- Ustawienie liczby ping i interwału czasowego wykonywane jest przez parametry
count i timeout
- Warunek sprawdzenia dostępności realizowany jest przez porównanie liczby odpowiedzi z liczbą wysłanych pingów
- Polecenie
/log warning zapisuje alert do logu systemowego gdy host jest niedostępny
- Pobranie czasu odpowiedzi wykonywane jest przez właściwość
avg-rtt podającą średni czas RTT
- Zliczanie hostów online i offline realizowane jest przez zmienne licznikowe
- Formatowanie wyników w formie raportu wykonywane jest przez polecenie
:put
- Konfiguracja powiadomień e-mail wykonywana jest przez dodanie akcji do scheduler dla monitoringu ciągłego
- Obsługa błędów gdy host nie istnieje lub jest nieosiągalny w sieci
- Podsumowanie wyświetla liczbę hostów dostępnych i niedostępnych
Plik rozwiązania:
Pobierz 04_mikrotik_z05.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z05.rsc
Zadanie 6: Zarządzanie regułami firewalla
Rozwiązanie:
Skrypt wyświetla i analizuje reguły firewalla na routerze MikroTik.
Opis działania:
- Skrypt wykorzystuje polecenie
/ip firewall filter print do pobrania reguł filtrowania
- Polecenie
/ip firewall nat print pobiera reguły translacji adresów (NAT)
- Polecenie
/ip firewall mangle print pobiera reguły markowania pakietów
- Pętla
:foreach iteruje po regułach każdej tabeli indywidualnie
- Pobranie parametrów reguły realizowane jest przez właściwości:
chain, action, src-address, dst-address
- Pobranie protokołu wykonywane jest przez właściwość
protocol wskazującą protokół warstwy 3/4
- Pobranie portów źródłowych i docelowych realizowane jest przez właściwości
src-port i dst-port
- Sprawdzenie czy reguła jest aktywna wykonywane jest przez właściwość
disabled
- Zliczanie reguł według akcji realizowane jest przez tablicę asocjacyjną lub zmienne licznikowe
- Filtrowanie reguł według kryterium wykonywane jest przez warunek porównania w pętli
- Sortowanie reguł według priorytetu wykonywane jest przez właściwość
priority
- Formatowanie wyjścia w tabelarycznej formie realizowane jest przez wielokrotne użycie
:put
- Analiza statystyk reguł wykonywana jest przez polecenie
/ip firewall filter print stats
- Podsumowanie wyświetla liczbę reguł w każdej kategorii i ich łączną liczbę
Plik rozwiązania:
Pobierz 04_mikrotik_z06.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z06.rsc
Zadanie 7: Konfigurator DHCP dla podsieci
Rozwiązanie:
Skrypt automatycznie konfiguruje serwer DHCP dla określonej podsieci.
Opis działania:
- Skrypt przyjmuje parametry konfiguracyjne: adres podsieci, maskę, bramę domyślną i pulę adresów
- Polecenie
/ip pool print pobiera istniejące pule adresów DHCP w systemie
- Tworzenie nowej puli adresów realizowane jest przez polecenie
/ip pool add name= z zakresem adresów
- Definicja sieci DHCP wykonywana jest przez polecenie
/ip dhcp-server network add z parametrami podsieci
- Konfiguracja serwera DHCP realizowana jest przez polecenie
/ip dhcp-server add z interfejsem i pulą
- Sprawdzenie czy interfejs istnieje wykonywane jest przez polecenie
/interface print z filtrem
- Walidacja adresacji IP realizowana jest przez weryfikację formatu adresu CIDR
- Konfiguracja opcji DHCP (DNS, WINS, router) wykonywana jest przez polecenie
/ip dhcp-server option
- Dodawanie trasy domyślnej dla klientów realizowane jest przez właściwość
gateway
- Konfiguracja leases czasu wykonywane jest przez parametr
lease-time
- Włączenie serwera DHCP realizowane jest przez właściwość
disabled=no
- Sprawdzenie czy serwer działa wykonywane jest przez weryfikację statusu w
/ip dhcp-server print
- Logowanie konfiguracji do systemu wykonywane jest przez polecenie
/log info
- Podsumowanie wyświetla skonfigurowane parametry DHCP dla podsieci
Plik rozwiązania:
Pobierz 04_mikrotik_z07.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z07.rsc
Zadanie 8: Harmonogram zadań - codzienny raport
Rozwiązanie:
Skrypt z harmonogramem, który automatycznie generuje codzienny raport o stanie routera.
Opis działania:
- Skrypt definiuje funkcję generującą raport o stanie systemu do wielokrotnego użycia
- Polecenie
/system resource print pobiera informacje o zasobach systemu (CPU, pamięć, dysk)
- Polecenie
/system health print pobiera informacje o temperaturze i napięciach (jeśli dostępne)
- Polecenie
/interface monitor-traffic pobiera statystyki ruchu na interfejsach
- Polecenie
/ip address print pobiera skonfigurowane adresy IP na interfejsach
- Polecenie
/ip route print pobiera tablicę routingu
- Polecenie
/ip pool print pobiera wykorzystanie pul DHCP
- Formatowanie raportu w formie tekstowej realizowane jest przez wielokrotne użycie
:put
- Tworzenie harmonogramu (scheduler) realizowane jest przez polecenie
/system scheduler add
- Ustawienie interwału wykonania wykonywane jest przez parametr
interval (np. 1d dla codziennego)
- Ustawienie czasu rozpoczęcia wykonywane jest przez parametr
start-time
- Konfiguracja zapisu raportu do pliku realizowana jest przez przekierowanie wyjścia do pliku
- Wysyłanie raportu e-mail wykonywane jest przez skonfigurowany serwer SMTP
- Sprawdzenie czy harmonogram istnieje wykonywane jest przed próbą utworzenia nowego
- Obsługa błędów gdy serwer SMTP nie jest skonfigurowany
Plik rozwiązania:
Pobierz 04_mikrotik_z08.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z08.rsc
Zadanie 9: Blokowanie adresów IP po ataku
Rozwiązanie:
Skrypt automatycznie blokuje adresy IP próbujące atakować router.
Opis działania:
- Skrypt analizuje logi firewalla w poszukiwaniu wzorców ataku przez polecenie
/log print
- Filtrowanie logów według protokołu SSH wykonywane jest przez parametr
topic z wartością critical
- Wyszukiwanie nieudanych logowań realizowane jest przez grep wzorca "login failed" lub "invalid user"
- Ekstrahowanie adresu IP z logu wykonywane jest przez parsowanie formatu logu systemowego
- Polecenie
/ip firewall address-list print pobiera istniejące listy adresów
- Dodawanie adresu do listy blokowanych realizowane jest przez polecenie
/ip firewall address-list add
- Ustawienie typu listy na "blacklist" wykonywane jest przez parametr
list
- Konfiguracja czasu wygaśnięcia blokady wykonywana jest przez parametr
timeout
- Tworzenie reguły firewalla blokującej adresy z listy wykonywane jest przez
/ip firewall filter add
- Sprawdzenie czy adres już jest na liście wykonywane jest przez wyszukiwanie przed dodaniem
- Zliczanie prób ataku z danego adresu wykonywane jest przez zmienną licznikową
- Progowa liczba prób do zablokowania konfigurowana jest przez zmienną (np. 5 prób)
- Logowanie blokady do systemu wykonywane jest przez polecenie
/log warning
- Obsługa błędów gdy lista adresów jest pełna (domyślnie 1000 wpisów)
- Podsumowanie wyświetla liczbę zablokowanych adresów
Plik rozwiązania:
Pobierz 04_mikrotik_z09.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z09.rsc
Zadanie 10: Reset połączeń dla klienta
Rozwiązanie:
Skrypt resetuje (rozłącza) aktywne połączenia dla określonego klienta na podstawie jego adresu IP.
Opis działania:
- Skrypt przyjmuje jako parametr adres IP klienta do zresetowania połączeń
- Polecenie
/ip connection print pobiera wszystkie aktywne połączenia IP w systemie
- Filtrowanie połączeń według adresu IP wykonywane jest przez warunek porównania w pętli
- Polecenie
:foreach iteruje po wyniku print sprawdzając każde połączenie
- Pobranie adresu źródłowego i docelowego realizowane jest przez operator
->get
- Sprawdzenie czy połączenie należy do klienta wykonywane jest przez porównanie adresów
- Polecenie
/ip connection remove usuwa zidentyfikowane połączenia
- Alternatywnie użycie firewalla do blokowania połączeń od tego adresu przez dodanie reguły drop w
/ip firewall filter
- Zliczanie usuniętych połączeń realizowane jest przez zmienną licznikową
- Sprawdzenie czy podany adres IP ma poprawny format wykonywane jest przez walidację CIDR
- Logowanie operacji resetu do systemu wykonywane jest przez polecenie
/log info
- Uwierzytelnianie administratora wykonywane jest przed wykonaniem operacji rozłączenia
- Obsługa błędów gdy adres IP nie jest skojarzony z żadnym połączeniem
- Podsumowanie wyświetla liczbę zresetowanych połączeń dla podanego adresu
Plik rozwiązania:
Pobierz 04_mikrotik_z10.rsc
Uruchomienie w WinBox:
File > Upload > Import
lub
/new terminal
/import file_name=04_mikrotik_z10.rsc
Podsumowanie
- Wszystkie 10 zadań zostało rozwiązane
- Każdy skrypt zweryfikowany pod kątem poprawności składni RouterOS
- Skrypty zawierają obsługę błędów i logowanie operacji
- Pliki gotowe do importu w MikroTik WinBox lub RouterOS
- Wymagane: router MikroTik z RouterOS v6+
- Import skryptów: WinBox > File > Upload > Import