拡張子でファイルのダウンロードをブロックします。 Mikrotik RouterOS

こんにちはHabr! トラフィックをフィルタリングできるハードウェアとソフトウェアがたくさんあります。 私の場合、これはMikrotik RB3011UiAS-RMです。 特定のファイル形式のダウンロードを禁止するというタスクがありました。

WebプロキシはHTTPでのみ動作するため、簡単なタスクのようであり、迅速なグーグルにより、Layer7を介した接続をブロックする決定に至りました。 そして、例はありましたが、本来の動作-動作しませんでした。
upd:このソリューションは、HTTPを介したファイルリクエストがサイトのHTTPSから送信された場合にのみ機能します。 ( iaon )( drsmoll
その結果、 mp3-tut.netを使用した例は機能し ますが、 www.nasa.gov / connect / sounds / index.htmlを使用する機能し ません

したがって、Mikrotik Layer7の最初のリンクはWiki-Mikrotikにつながります。

レイヤー7が機能するためには、ルーターが動作する正規表現を入力する必要があることがわかります。 POSIX互換の正規表現の使用に関する注意事項もあります。

画像

最初の正規表現オプションの1つ:

^.+(exe|mp3|mpeg).*$ 

動作しません! すべてのダウンロードがブロックされているわけではありません。名前または拡張文字があるクエリ行で、サイトがブロックされている場合があります。

次に、Googleのリストの最初の3ページの多くのサイトがチェックされました。 そして、私は結論に達しました-正規表現を選ぶべきです。

そして再びグーグルと検索。 その結果、素晴らしいサイトに出会いました。

http://web-sniffer.net/
https://regex101.com/

1つ目は、ファイルをダウンロードするためにどのリクエストが送信されるかを示します。 この正規表現の2番目は一致と一致します。

その結果、私は次のオプションに到達しました:

 GET .*(\.exe|\.bat|\.reg|\.cmd|\.scr|\.vbs|\.vbs|\.ws|\.wsf|\.wsc|\.apk)[^a-zA-Z0-9].*HTTP.*\n 

詳細に検討してください:


[^ a-zA-Z0-9]を持つ最後から2番目の段落は、非制御文字を許可するために使用されます。例: php.net/manual/ru/function.exec.php

  1. Connect to 72.52.91.14 on port 80 ... ok
    GET /manual/ru/function .exec.php HTTP/1.1
    Host: php.net
  2. Connect to 72.52.91.14 on port 80 ... ok
    GET /manual/ru/function .exe.php HTTP/1.1
    Host: php.net

ルールは2番目の場合にのみ適用されます。

はい、 .extensionがあるGET 落ちます。 しかし、私の場合、これで十分です。 ユーザーは文句を言いませんでした。 そして、これらのルールを好きなように補完できます。

次に、すべてが正常に機能するように、ファイアウォールのルールを作成します。
upd:-DROPの代わりにREJECT-TCP RESETを指定します。 この場合、ブラウザは「接続のリセット」という応答を受け取ります。 ルールが機能していたページまたはフレームのロードをすぐに拒否できます。これにより、ロードが高速化されます。 ( AcidVenomヒントをありがとう)

画像

AllowAllリストには、ルールが適用されないIPアドレスが含まれています。

Layer7正規表現セットの確認:

画像

以上です!

Source: https://habr.com/ru/post/J321408/


All Articles