[研究所] MikroTik RouterOS 學習 (持續更新)

top100011 wrote:
謝謝GFX大回覆,很(恕刪)
您會錯意啦!!
我是指nat映射除了原本的您加的以外,同樣的內容還要複製一個。
但第二組唯一不同的是將第一組的in-interface=pppoe-out1,換成in-interface=bridge1。

這樣第一組的in-interface=pppoe-out1,是負責外網的連線映射;
而第二組的in-interface=bridge1,則是負責內網連線映射。是這個意思。

另一種方式則是不使用in-interface,而是從連接對象判斷。
這種判斷因沒有使用in-interface,所以就沒有分外網與內網。
但您要告知連接的對象是誰,而這個對象即您的pppoe-ip。
pppoe-ip要設為目地端,所以ip要設在dst-address這個欄位。
gfx wrote:
我是指nat映射除了原本的您加的以外,同樣的內容還要複製一個。
但第二組唯一不同的是將第一組的in-interface=pppoe-out1,換成in-interface=bridge1


謝謝大大指導,總算可以了
但我並不是設 bridge1 ,我直接改成 ether1
我這個是在VM裡面的 RouterOS 系統,也只有單一網卡在用而以

真心覺得 RouterOS 真的非常好玩,要什麼功能都可以搞出來
但自己的修行還是必須要夠啊,感謝 GFX大的幫忙

‍‍‍‍‍
成為對的人是要持續執行核心價值來成就自己附加價值的永恆.[V-Ing]By Myself
請教一下,從網路找了段scripts,想把vpn登入失敗的列入防火牆名單中,但放入scripts中後執行一直沒反應,不知道是語法那裡有問題,謝謝!

*********************************************************
* Mikrotik L2TP protection. *
* https://github.com/Onoro/Mikrotik/ *
* *
*********************************************************
#variables
:local pop 3
:local ipaddr
#searching for "failed to get valid proposal." string in log.
:local l2tp [/log find message~"failed to get valid proposal."]
#walking through array
foreach i in=$l2tp do={
#searching IP address of remote host
:set ipaddr [:pick [/log get $i message ] 0 ([:len [/log get $i message ]]-30)]
#execute if quantity of "failed to get valid proposal." records more than pop variable
if ([:len [/log find message~"failed to get valid proposal."]]>=$pop) do={
#execute if IP address isn't in firewall adress-list
if ([:len [/ip firewall address-list find address=$ipaddr]]=0 ) do={
#supplementation IP to address-list
/ip firewall address-list add list=l2tp-brutforce address=[:toip $ipaddr]
}
}
}
chencjc wrote:
請教一下,從網路找了(恕刪)


剛好我也有這種需求,找了一下官方論壇參考後
https://forum.mikrotik.com/viewtopic.php?t=148397#p745399

以下腳本會去抓60分鐘內含有關鍵字「phase1 negotiation failed due to time up」的日誌
並且篩出 IP 加進 blocked 清單中。


最終版腳本請參考這


不過現在比較麻煩的是, /system clock get time 只能取到時間,取不到日期
如果跨日一小時內發生的日誌的話,應該會失效。
lenbo wrote:
剛好我也有這種需求,(恕刪)


我找到的參考例子也是從log資料中篩出錯誤嘗試的IP,放進名單後再用防火牆規則擋掉
scripts對我來說比較容易看得懂,也趁機找些參考資料研究一下,再利用terminal測試一下指令
還在找為什麼無法得到想要結果的原因,你的例子有空也來研究一下
chencjc wrote:
我找到的參考例子也是(恕刪)


昨天試到天亮,發現 RouterOS v6.45.7 腳本
不支援 :for 或 :foreach 裡加上 :if 的 nested 處理;
/log find 也沒辦法加上 time 的 wildcard 時間篩選。
所以只好改成以下的腳本,並設上每小時執行排程,
可以篩出日誌中三種 error 中的 IP 加進 address-list 中做阻斷處理。

缺點是已經加過進 address-list 的 IP 還是會一直被找出來,
然後 :do 失敗走到空處理的 on-error={}
目前我只能把 /system logging action memory 的緩存行數設少一些。
日誌的 time 的 wildcard 時間篩選,真的有待強者來解決了。


最終版腳本請參考這
lenbo wrote:
昨天試到天亮,發現 RouterOS...(恕刪)
時間篩選你想怎麼做?
想要截取今天的log,time最前顯示的是時間,所以第一個字元是數字;
想要截取昨日前的log,time最前顯示的是月份,所以第一個字元是英文。

所以搜尋您可以字串(message)搭時間(time)做,
要是今天的log,就用:
:foreach i in=[ /log find message~"failed to get valid proposal" && [:pick $time 0]~"[0-9]"] do={}

昨日前的log,則用:
:foreach i in=[ /log find message~"failed to get valid proposal" && [:pick $time 0]~"[a-z]"] do={}
gfx wrote:
時間篩選你想怎麼做?
想要截取今天的log,time最前顯示的是時間,所以第一個字元是數字;
想要截取昨日前的log,time最前顯示的是月份,所以第一個字元是英文。

所以搜尋您可以字串(message)搭時間(time)做,
要是今天的log,就用:
:foreach i in=[ /log find message~"failed to get valid proposal" && [:pick $time 0]~"[0-9]"] do={}

昨日前的log,則用:
:foreach i in=[ /log find message~"failed to get valid proposal" && [:pick $time 0]~"[a-z]"] do={}


因為腳本是排程一小時執行一次,
所以時間篩選想抓前一小時內的日誌就夠了,
依照 gfx大 的例子,現學現賣,

:local lastHour [ :pick [ /system clock get time ] 0 2 ]

#phase1 negotiation failed due to time up 127.0.0.1[500]<=>0.0.0.0[53801] 0011223344556677:5982fff0ba1e7774
:foreach obj in=[ /log find message~"phase1 negotiation failed due to time up" && [ :pick $time [ :find $time " " ] [ :find $time ":" ] ]~$lastHour ] do={
:local logMsg [ /log get $obj message ]
:local tmp [ :pick $logMsg [ :find $logMsg ">" ] [ :len $logMsg ] ]
:local pickedIp [ :pick $tmp 1 [ :find $tmp "[" ] ]
:do { /ip firewall address-list add list="Blocked_IP" address=$pickedIp timeout=7d } on-error={}
}

#<0.0.0.0>: user account authentication failed
:foreach obj in=[ /log find message~"authentication failed" && [ :pick $time [ :find $time " " ] [ :find $time ":" ] ]~$lastHour ] do={
:local logMsg [ /log get $obj message ]
:local pickedIp [ :pick $logMsg 1 [ :find $logMsg ">" ] ]
:do { /ip firewall address-list add list="Blocked_IP" address=$pickedIp timeout=7d } on-error={}
}

#0.0.0.0 failed to get valid proposal
:foreach obj in=[ /log find message~"failed to get valid proposal" && [ :pick $time [ :find $time " " ] [ :find $time ":" ] ]~$lastHour ] do={
:local logMsg [ /log get $obj message ]
:local pickedIp [ :pick $logMsg 0 [ :find $logMsg " " ] ]
:do { /ip firewall address-list add list="Blocked_IP" address=$pickedIp timeout=7d } on-error={}
}

排程設為 00:59:59 開始,週期 01:00:00 應該就能達成了吧。

謝謝 gfx大 的指導。
lenbo wrote:
因為腳本是排程一小時(恕刪)


我參考你的例子,把之前的修改簡化了一些,功能應該都一樣
:local ipaddr
:local l2tp [/log find message~"failed to get valid proposal."]
foreach i in=$l2tp do={
:set ipaddr [:pick [/log get $i message ] 0 [:find [/log get $i message ] " "]]
:do {/ip firewall address-list add list="Black_Name" address=[:toip $ipaddr] timeout=7d} on-error={}
}
也是每小時執行一次,log裡有重覆的ip在Black_Name也不會重覆出現,script裡執行沒什麼問題,再丟進去排程裡執行看看有沒有什麼問題再說
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 871)

今日熱門文章 網友點擊推薦!