„MikroTik::Scripting” változatai közötti eltérés
| (10 közbenső módosítás ugyanattól a szerkesztőtől nincs mutatva) | |||
| 1. sor: | 1. sor: | ||
[[category:MikroTik]] | |||
= Bevezetés = | = Bevezetés = | ||
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk: | A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk: | ||
| 84. sor: | 85. sor: | ||
= Komplex scriptek = | = Komplex scriptek = | ||
[[category:Backup]] | |||
[[category:Biztonsági mentés]] | |||
== Backup küldés emailben és SFTP szerverre == | |||
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel. | |||
<syntaxhighlight lang="bash"> | |||
:local sendEmail {\ | |||
"address"="email@provider.hu"\ | |||
} | |||
:local smtp {\ | |||
"server"="smtp.provider.hu";\ | |||
"port"=465;\ | |||
"tls"="yes";\ | |||
"user"="user@provider.hu";\ | |||
"password"="password"\ | |||
} | |||
:local toEmails {\ | |||
"email1@provider.hu";\ | |||
"email2@provider.com"\ | |||
} | |||
:local backup {\ | |||
"prefix"="";\ | |||
"key"="VERYSTRONGKEY";\ | |||
"fileName"=([/system identity get name ] . "_" . \ | |||
[:pick [/system clock get date] 0 4] ."_". \ | |||
[:pick [/system clock get date] 5 7] ."_". \ | |||
[:pick [/system clock get date] 8 10] ."-". \ | |||
[:pick [/system clock get time] 0 2] ."_". \ | |||
[:pick [/system clock get time] 3 5] ."_". \ | |||
[:pick [/system clock get time] 6 8] \ | |||
.".backup"\ | |||
)\ | |||
} | |||
:local sftpServers {\ | |||
{\ | |||
"address"="srv1.hu";\ | |||
"port"="22";\ | |||
"dst-path"="/destination/path/";\ | |||
"user"="username";\ | |||
"password"="password"\ | |||
};\ | |||
{\ | |||
"address"="srv2.hu";\ | |||
"port"="22";\ | |||
"dst-path"="/destination/path/";\ | |||
"user"="user";\ | |||
"password"="password"\ | |||
}\ | |||
} | |||
# sendMail function | |||
:local sendMail do={ | |||
:local toEmails "" | |||
:foreach i in $emails do={ | |||
:if ( $toEmails != "" ) do={ | |||
:set toEmails ($toEmails . ",") | |||
} | |||
:set toEmails ($toEmails . $i) | |||
} | |||
/tool/e-mail/send server=($smtp->"server") port=($smtp->"port") tls=($smtp->"tls") \ | |||
user=($smtp->"user") password=($smtp->"password") \ | |||
subject="$subject" to="$toEmails" from=($sender->"address") \ | |||
body="$text" file="$file" | |||
} | |||
# end of sendMail function | |||
# uploadSftp function | |||
:local uploadSftp do={ | |||
:foreach i in $servers do={ | |||
:put (\ | |||
"Upload ". $file . " to " . $i->"address" .":". $i->"port" \ | |||
. ", into " . $i->"dst-path" . " folder with user: ". $i->"user" \ | |||
) | |||
/tool/fetch mode=sftp upload=yes \ | |||
address=($i->"address") port=($i->"port") \ | |||
user=($i->"user") password=($i->"password") \ | |||
src-path="$file" dst-path=($i->"dst-path".$file) | |||
} | |||
} | |||
#end of uploadSftp function | |||
/file remove [find where type="backup"] | |||
/file remove [find where type="script"] | |||
/system backup save name=(($backup->"prefix") . ($backup->"fileName")) password=($backup->"key") | |||
/export show-sensitive file=(($backup->"prefix").($backup->"fileName")) | |||
:delay 10000ms | |||
$sendMail emails=$toEmails sender=$email smtp=$smtp file=($backup->"prefix" . $backup->"fileName") \ | |||
subject=([/system identity get name] ." ". [/system clock get date] . " " . [/system clock get time] . " backup file") \ | |||
text="Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person." | |||
$uploadSftp servers=$sftpServers file=($backup->"prefix" . $backup->"fileName") | |||
$uploadSftp servers=$sftpServers file=($backup->"prefix" . $backup->"fileName".".rsc") | |||
/file remove [find where type="script"] | |||
</syntaxhighlight> | |||
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk. A plain text alapú RSC fájlt csak az SFTP szerverre töltjük fel. Meg kell jegyezni, hogy ha az Identity paraméter szóközöket tartalmaz, akkor az RSC fájl feltöltésével problémák adódhatnak - ez esetben érdemes a $backup->fileName paramétert úgy előállítani, hogy ne legyen benne szóköz. | |||
A lap jelenlegi, 2024. május 18., 19:40-kori változata
Bevezetés
A MikroTik eszközök rendelkeznek grafikus programozói felülettel (Winbox), de több olyan helyzet is előállhat, hogy a parancssorhoz kellene nyúlnunk:
- Alap konfigurációk előállítása
- L1-L2 konfiguráció
- bridge
- wireless mód (station, ap stb.)
- VPN szerver / kliens aktiválás és alap konfiguráció
- VLAN interfészek
- L3 konfiguráció
- IP címek
- statikus route szabályok
- routing protokollok (ospf, bgp) alap beállítások
- L1-L2 konfiguráció
- Ütemezett feladatok végrehajtása
- Backup küldése emailben
- Watchdog / Netwatch
- Paraméterek monitorozása
A fentiek között találhatunk kényelmi megoldásokat és olyanokat is, amelyeket nem tudunk más módon megvalósítani ezen az eszközön. Ezért tehát érdemes bele nézni, hogy hogyan is készíthetünk scripteket az eszközre.
A script nyelv dokumentációját a MikroTik hivatalos oldalán itt találod.
A terminál használata
Nyelvi alap elemek
Változók
- Lokális változók
- Globális változók
- Tömbök
Elágazás
Ciklusok
- for
- foreach
- do-while
Terminál alapvető eszközei
Az eszközök közül csak egy-két érdekesebbet tekintek át, ezeknél sokkal több áll rendelkezésünkre.
- :put
- :set
- :pick
- :delay
- :resolv
Scriptelési lehetőségek
Az eszközben több olyan menüpontot is találunk, amelyek egy több soros text mezőt rejtenek. Ezekben a pozíciókban írhatunk saját scriptet, ami egy adott eseményre triggerelődik. Ha a jelet egy olyan esemény indítja el, amelyhez adatcsomag is tartozott (például egy dhcp lease történt), akkor egyedi változók segítségével kikérhetjük annak tartalmát. A következő helyeken találkozhatunk ilyennel, alatta a használható változókkal:
- /system/script
- /system/scheduler
- /ip/dhcp-client
- bound
- $"server-address"
- $"lease-address"
- $interface
- $"gateway-address"
- $"vendor-specific"
- $"lease-options"
- /ip/dhcp-server
- $leaseBound
- $leaseServerName
- $leaseActMAC
- $leaseActIP
- $lease-hostname
- $lease-options
- /tool/netwatch
- up-script
- down-script
- test-script
- /ppp/profile
- on-up
- $user
- $"local-address"
- $"remote-address"
- $"caller-id"
- $"called-id"
- $interface
- on-down
- $user
- $"local-address"
- $"remote-address"
- $"caller-id"
- $"called-id"
- $interface
- on-up
- /iot/mqtt/subscriptions
- $msgData
- $msgTopic
Komplex scriptek
Backup küldés emailben és SFTP szerverre
Az egyik legfontosabb, hogy mindig legyen mentésünk az eszközökről. A következő script segítségével biztonsági mentést hozhatunk létre, amit akár egyszerre több email címre és SFTP szerverre tölthetünk fel.
:local sendEmail {\
"address"="email@provider.hu"\
}
:local smtp {\
"server"="smtp.provider.hu";\
"port"=465;\
"tls"="yes";\
"user"="user@provider.hu";\
"password"="password"\
}
:local toEmails {\
"email1@provider.hu";\
"email2@provider.com"\
}
:local backup {\
"prefix"="";\
"key"="VERYSTRONGKEY";\
"fileName"=([/system identity get name ] . "_" . \
[:pick [/system clock get date] 0 4] ."_". \
[:pick [/system clock get date] 5 7] ."_". \
[:pick [/system clock get date] 8 10] ."-". \
[:pick [/system clock get time] 0 2] ."_". \
[:pick [/system clock get time] 3 5] ."_". \
[:pick [/system clock get time] 6 8] \
.".backup"\
)\
}
:local sftpServers {\
{\
"address"="srv1.hu";\
"port"="22";\
"dst-path"="/destination/path/";\
"user"="username";\
"password"="password"\
};\
{\
"address"="srv2.hu";\
"port"="22";\
"dst-path"="/destination/path/";\
"user"="user";\
"password"="password"\
}\
}
# sendMail function
:local sendMail do={
:local toEmails ""
:foreach i in $emails do={
:if ( $toEmails != "" ) do={
:set toEmails ($toEmails . ",")
}
:set toEmails ($toEmails . $i)
}
/tool/e-mail/send server=($smtp->"server") port=($smtp->"port") tls=($smtp->"tls") \
user=($smtp->"user") password=($smtp->"password") \
subject="$subject" to="$toEmails" from=($sender->"address") \
body="$text" file="$file"
}
# end of sendMail function
# uploadSftp function
:local uploadSftp do={
:foreach i in $servers do={
:put (\
"Upload ". $file . " to " . $i->"address" .":". $i->"port" \
. ", into " . $i->"dst-path" . " folder with user: ". $i->"user" \
)
/tool/fetch mode=sftp upload=yes \
address=($i->"address") port=($i->"port") \
user=($i->"user") password=($i->"password") \
src-path="$file" dst-path=($i->"dst-path".$file)
}
}
#end of uploadSftp function
/file remove [find where type="backup"]
/file remove [find where type="script"]
/system backup save name=(($backup->"prefix") . ($backup->"fileName")) password=($backup->"key")
/export show-sensitive file=(($backup->"prefix").($backup->"fileName"))
:delay 10000ms
$sendMail emails=$toEmails sender=$email smtp=$smtp file=($backup->"prefix" . $backup->"fileName") \
subject=([/system identity get name] ." ". [/system clock get date] . " " . [/system clock get time] . " backup file") \
text="Please note that the file is transmitted encrypted. If you have forgotten the key, please contact the appropriate person."
$uploadSftp servers=$sftpServers file=($backup->"prefix" . $backup->"fileName")
$uploadSftp servers=$sftpServers file=($backup->"prefix" . $backup->"fileName".".rsc")
/file remove [find where type="script"]
A script elején található konfigurációs rész igény szerint bővíthető, vagy redukálható. Jelenlegi állapotában két email címre és két sftp szerverre került mentésre a biztonsági mentésünk. A plain text alapú RSC fájlt csak az SFTP szerverre töltjük fel. Meg kell jegyezni, hogy ha az Identity paraméter szóközöket tartalmaz, akkor az RSC fájl feltöltésével problémák adódhatnak - ez esetben érdemes a $backup->fileName paramétert úgy előállítani, hogy ne legyen benne szóköz.
