拡張子でファイルのダウンロードをブロックします。 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正規表現セットの確認:



画像






以上です!



All Articles