web-dev-qa-db-ja.com

F5パケットフィルタリングまたはiRules、あるいはその両方?

IPアドレスチェックとURLチェックの両方を必要とする仮想ホスト用のカスタムフィルターを設定する必要があります。そのようです:

_if_  _(_ http-request matches url _and_ ip is from certain Host/net range _)_  
      _or_ ip is     from a certain VIP range _then_ let the request through  

IPチェックをパケットフィルターに移動してから、IPチェックを2回実行する必要がありますか(VIP範囲のURLチェックをバイパスするため))、それともiruleのパフォーマンスの範囲内に置いても大丈夫ですか?

1
iddqd

これはiRuleで行う非常に一般的なことであり、BIG-IPが大量にロードされていない限り、問題は発生しません。

懸念がある場合は、iRuleのタイミングをオンにして、ルールで使用されているCPUサイクル数を確認できます。 DevCentralには古いが良い これを行う方法に関する記事 があります。唯一の古い部分はv11で、bigpipeの代わりにtmshが必要になります(例:「show/ltmrule」)。

本当にiRulesを避けたい場合は、代替方法はHTTPクラス(ローカルトラフィック>プロファイル>プロトコル> HTTPクラス)ですが、これはソースIPではなくURIで分類されます。一致するURIを別のプールに送信したり、リダイレクトを返したりすることができます。これをv11.3の仮想サーバーの新しいソース属性と組み合わせて、それぞれが特定のネットワークからのトラフィックのみを処理する複数の仮想サーバーを作成できます。

ただし、カバーするソース範囲が多数ある場合は、iRuleとアドレスタイプのデータグループを使用します(「matchclass ..equals」コマンドを使用してデータグループ内のクライアントIPを検索します。ルーティングテーブル)。

パケットフィルターは残酷であり、クライアントにタイムアウトを引き起こしますが、HTTPクラスまたはiRuleオプションを使用すると、要求をドロップするか、別のプールを選択するか、リダイレクトを返すか、エラーページを返すかを選択できます。

1
eey0re

私はそれをすべて1つのiRuleで行います。

仮想サーバーごとにレイヤー4ACLを実行する例を次に示します。

https://devcentral.f5.com/wiki/iRules.AccessControlBasedOnNetworkOrHost.ashx

CLIENT_ACCEPTEDのデータグループに対してクライアントIPを確認してから、[HTTP :: uri]を使用してHTTP_REQUESTのURIを確認できます。

Classコマンドを使用した例を次に示します。

https://devcentral.f5.com/wiki/iRules.class.ashx

when CLIENT_ACCEPTED {
    # Check if the client IP is in the allowed_hosts_dg data group
    if {[class match [IP::client_addr] equals allowed_hosts_dg]}{
        set allowed_ip 1
    } else {
        set allowed_ip 0
    }
}
when HTTP_REQUEST {
    # If the client is a legal source IP check if the HTTP path is in the allowed_paths_dg data group
    if {$allowed_ip == 1 && [class search allowed_paths_dg contain [string tolower [HTTP::path]]]}{
        # allow the request
    } else {
        # Send a 403 blocking response
        HTTP::respond 403 content {Illegal request!}
    }
}

アーロン

2
Aaron