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; } } } }
このスクリプトは、時間より短い間隔で
スクリプトは何をしますか?
彼はplsdelmeシートでアドレスを検索し、sheets〜 "blacklist"で値をチェックします。一致するものがあれば、このエントリを削除します。
スクリプトを少し修正すると、基本的には何でもできます。
これらの目的には、APIの使用がより適しています。