MikroTik +ポートノックオーバーICMP

ICMPパケットをキャッチし、ロジックでフィルタリングする方法を伝える非常に小さな投稿。



icmpプロトコルを介してRouterOSにポートノッキングテクノロジーを実装します。



猫をお願いします。



ポートのノッキングが何であるかを伝えることは、おそらくインターネット上で非常に多くの説明があるため、意味がありません。

非常に簡単に言えば、このテクノロジは、列挙が正しい場合に特定の順序のポート列挙を許可して、さまざまなアクションを実行します。

ポートをサポートしないICMPプロトコルを介してこのテクノロジーを実装する方法を紹介します。 そして、ICMPパケットのサイズでアピールします。

white_listに自分を追加する



フィルターにルールがあります。

[admin@kirilka] /ip firewall filter> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=input action=accept protocol=tcp src-address-list=white_list_ssh in-interface=ether1 dst-port=22
      
      





これは、white_listに含まれるすべてのアドレスからのポート22(ssh)での着信接続を許可するというものです。

2つのルールを追加

基準を設定し、2つのアプローチの結合の簡単なチェックが必要です。 サイズ70の最初のノックパケットと、2番目の100のノックパケットがあり、必然的に2つのパケットがあるとします。

ICMPパケットのヘッダーが28バイトであることを忘れないでください。

したがって、次の図が表示されます。パケットサイズが98バイトのICMPをダブルクリックし、パケットサイズが128バイトの場合は2回クリックする必要があります。

98バイトのサイズの最初のパケットをキャッチします。


 chain=input action=add-src-to-address-list protocol=icmp address-list=ICMP_SSH_98_stage1 address-list-timeout=1m in-interface=ether2 packet-size=98
      
      





ICMPプロトコルを使用する98バイトのパケットは、ICMP_SSH_98_stage1シートの発信アドレスに入力されます


98バイトのサイズの2番目のパケットをキャッチします。


 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_98_stage1 address-list=ICMP_SSH_98_stage2 address-list-timeout=1m in-interface=ether2 packet-size=98
      
      





ICMPを使用する98バイトのパケットと発信アドレスがICMP_SSH_98_stage1シートに既に含まれている場合、ICMP_SSH_98_stage2シートに発信アドレスを入力します。


送信時に98バイトまたは70バイトの2つのパケットをキャッチしました。

128バイトのサイズの3番目のパケットをキャッチします。


 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_98_stage2 address-list=ICMP_SSH_128_stage1 address-list-timeout=1m in-interface=ether1 packet-size=128
      
      





ICMPを使用する128バイトのパケットと発信アドレスはICMP_SSH_98_stage2シートに既に含まれているため、ICMP_SSH_128_stage1シートに発信アドレスを入力します。


128バイトのサイズの4番目のパケット(最後)をキャッチします。


 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_128_stage1 address-list=white_list_ssh address-list-timeout=1h in-interface=ether1 packet-size=128
      
      





ICMPと発信アドレスを使用する128バイトのパケットは、ICMP_SSH_128_stage1シートに既に含まれています。次に、white_list_sshシートに発信アドレスを1時間入力します。




アクションのシーケンスを見ることができるように、具体的に最初の例を少し間違っています。

すべてが機能するためには、ルールの順序を逆順に移動する必要があります。 スポイラーの下を見てください。



フルフィルターテーブル
 [admin@kirilka] /ip firewall filter> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=input action=accept protocol=tcp src-address-list=white_list_ssh in-interface=ether2 dst-port=22 1 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_128_stage1 address-list=white_list_ssh address-list-timeout=1h in-interface=ether1 packet-size=128 2 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_98_stage2 address-list=ICMP_SSH_128_stage1 address-list-timeout=1m in-interface=ether1 packet-size=128 3 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_98_stage1 address-list=ICMP_SSH_98_stage2 address-list-timeout=1m in-interface=ether1 packet-size=98 4 chain=input action=add-src-to-address-list protocol=icmp address-list=ICMP_SSH_98_stage1 address-list-timeout=1m in-interface=ether1 packet-size=98
      
      









実際、ここではすべてが簡単です。



さらに進んで、アドレスシートから自分自身を削除します。



MikroTikを構成する多くの人がBruteforceパスワード保護を使用していますwiki.mikrotik.com/wiki/Bruteforce_login_prevention

自分で手を切ったことがあります。 だから今、私たちは私たちが落ちる可能性のあるシートから自分自身を取り除きます。

そして、前の例で得た成果を使用して、最終シートのみをplsdelmeに変更します



 [admin@kirilka] /ip firewall filter> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_128_stage1 address-list=plsdelme address-list-timeout=1m in-interface=ether1 packet-size=128 1 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_98_stage2 address-list=ICMP_SSH_128_stage1 address-list-timeout=1m in-interface=ether1 packet-size=128 2 chain=input action=add-src-to-address-list protocol=icmp src-address-list=ICMP_SSH_98_stage1 address-list=ICMP_SSH_98_stage2 address-list-timeout=1m in-interface=ether1 packet-size=98 3 chain=input action=add-src-to-address-list protocol=icmp address-list=ICMP_SSH_98_stage1 address-list-timeout=1m in-interface=ether1 packet-size=98
      
      





また、次の内容のスクリプトも必要です。

 :local wlist "plsdelme"; :local tmp ""; :local tmp1 ""; :if ( [/ip firewall address-list find ] != "") do={ :foreach i in [/ip firewall address-list find list=$wlist] do={ :set tmp [/ip firewall address-list get $i address]; :foreach x in [/ip firewall address-list find list~"blacklist"] do={ :set tmp1 [/ip firewall address-list get $x address]; :if ( $tmp1 = $tmp) do={ /ip firewall address-list remove $x; } } } }
      
      





このスクリプトは、時間より短い間隔でcronスケジューラに配置する必要がありますが、plsdelmeシートにアドレスを追加します

スクリプトは何をしますか?

彼はplsdelmeシートでアドレスを検索し、sheets〜 "blacklist"で値をチェックします。一致するものがあれば、このエントリを削除します。



スクリプトを少し修正すると、基本的には何でもできます。

これらの目的には、APIの使用がより適しています。



All Articles