FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | SYSCTL 変数とローダ調整変数 | カーネルオプション | IOCTL インタフェース | 関連ファイル | 使用例 | 関連項目 | 歴史
PF(4)              FreeBSD カーネルインタフェースマニュアル              PF(4)

名称
     pf -- パケットフィルタ

書式
     device pf
     options PF_DEFAULT_TO_DROP

解説
     パケットフィルタリングは、カーネルで行われます。疑似デバイス /dev/pf は、
     ユーザランドプロセスで ioctl(2) インタフェースを通るパケットフィルタの振
     る舞いを制御できるようにします。フィルタを有効にして無効にする、ルール
     セットのロード、個別の規則か状態テーブルエントリの追加と削除、統計値の検
     索するコマンドがあります。最も一般的に使用される関数は、pfctl(8) によって
     カバーされています。

     一つの ioctl(2) 呼び出し以上に影響を及ぼすルールセットをロードするような
     操作は、複数の並列操作の発生を防ぐ、いわゆるチケットを必要とします。

     (アドレスとポートのような) パケットデータを参照する ioctl(2) パラメータ構
     造のフィールドは、一般的にネットワークバイト順が期待されます。

     規則とアドレステーブルは、いわゆる anchor (アンカ) に含まれています。
     ioctl(2) 要求をサービスするとき、引数構造体のアンカフィールドが空であるな
     ら、カーネルは、作動中にデフォルトのアンカ (すなわち、メインルールセット)
     を使用します。アンカは、名前によって指定され、ファイルシステム階層構造が
     どのように配置されているかと同様に、`/' 文字で分離された構成要素で、入れ
     子にされるかもしれません。アンカパスの最終的な構成要素は、操作が実行され
     るアンカです。

SYSCTL 変数とローダ調整変数
     次の loader(8) 調整変数が利用可能です。

     net.pf.states_hashsize
             状態を格納するハッシュテーブルのサイズ。2 のべき乗であるべきで
             す。デフォルト値は、131072 です。

     net.pf.source_nodes_hashsize
             ソースノードを格納するハッシュテーブルのサイズ。2 のべき乗である
             べきです。デフォルト値は、32768 です。

     一致する名前がある読み込み専用の sysctl(8) 変数は、実行時に現在の値を得る
     ために提供されています。

カーネルオプション
     カーネル設定ファイルの次のオプションは、pf 操作と関連しています:

     PF_DEFAULT_TO_DROP  デフォルトでデフォルトポリシをドロップ (drop) に変更
                         します

IOCTL インタフェース
     pf は、<net/pfvar.h> を通して利用可能な、次の ioctl(2) コマンドをサポート
     します:

     DIOCSTART
             パケットフィルタを開始する。

     DIOCSTOP
             パケットフィルタを停止する。

     DIOCSTARTALTQ
             ALTQ バンド (帯域) 幅制御システムを開始する (altq(9) 参照)。

     DIOCSTOPALTQ
             ALTQ バンド (帯域) 幅制御システムを停止する。

     DIOCBEGINADDRS struct pfioc_pooladdr *pp

             struct pfioc_pooladdr {
                     u_int32_t               action;
                     u_int32_t               ticket;
                     u_int32_t               nr;
                     u_int32_t               r_num;
                     u_int8_t                r_action;
                     u_int8_t                r_last;
                     u_int8_t                af;
                     char                    anchor[MAXPATHLEN];
                     struct pf_pooladdr      addr;
             };

             バッファのアドレスプールをクリアし、その後の DIOCADDADDR,
             DIOCADDRULE と DIOCCHANGERULE 呼び出しのための ticket を取得しま
             す。

     DIOCADDADDR struct pfioc_pooladdr *pp

             次の DIOCADDRULE または DIOCCHANGERULE 呼び出しに使用されるバッ
             ファアドレスプールにプールアドレス addr を追加します。他のすべて
             の構造体のメンバは、無視されます。

     DIOCADDRULE struct pfioc_rule *pr

             struct pfioc_rule {
                     u_int32_t       action;
                     u_int32_t       ticket;
                     u_int32_t       pool_ticket;
                     u_int32_t       nr;
                     char            anchor[MAXPATHLEN];
                     char            anchor_call[MAXPATHLEN];
                     struct pf_rule  rule;
             };

             不活発なルールセットの終りに rule を追加します。この呼び出しは、
             以前の DIOCXBEGIN 呼び出しで取得された ticket と DIOCBEGINADDRS
             呼び出しで取得された pool_ticket を必要とします。また、プールアド
             レスが必要であるなら、DIOCADDADDR を呼び出さなければなりません。
             オプションの anchor 名は、規則を追加する anchor (アンカ) を示しま
             す。nraction は、無視されます。

     DIOCADDALTQ struct pfioc_altq *pa
             ALTQ 制御規則またはキューを追加します。

             struct pfioc_altq {
                     u_int32_t       action;
                     u_int32_t       ticket;
                     u_int32_t       nr;
                     struct pf_altq  altq;
             };

     DIOCGETRULES struct pfioc_rule *pr
             その後の DIOCGETRULE 呼び出しのための ticket と、アクティブなルー
             ルセット中の規則の番号 nr を取得します。

     DIOCGETRULE struct pfioc_rule *pr
             以前の DIOCGETRULES 呼び出しで得られた ticket を使用して、その番
             号 nr によって rule を取得します。action が PF_GET_CLR_CNTR に設
             定されるなら、要求された規則で規則毎の統計値は、クリアされます。

     DIOCGETADDRS struct pfioc_pooladdr *pp
             以前の DIOCGETADDR 呼び出しのための ticket と、r_action, r_numanchor で指定された規則中のプールアドレスの番号 nr を取得します。

     DIOCGETADDR struct pfioc_pooladdr *pp
             以前の DIOCGETADDRS 呼び出しで得られた ticket を使用して、
             r_action, r_numanchor で指定された規則からその番号 nr によっ
             てプールアドレス addr を取得します。

     DIOCGETALTQS struct pfioc_altq *pa
             以前の DIOCGETALTQ のための ticket と、アクティブリスト中のキュー
             の番号 nr を取得します。

     DIOCGETALTQ struct pfioc_altq *pa
             以前の DIOCGETALTQS 呼び出しで得られた ticket を使用して、その番
             号 nr によってキュー制御規則 altq を取得します。

     DIOCGETQSTATS struct pfioc_qstats *pq
             キューおける統計値を取得します。

             struct pfioc_qstats {
                     u_int32_t        ticket;
                     u_int32_t        nr;
                     void            *buf;
                     int              nbytes;
                     u_int8_t         scheduler;
             };

             この呼び出しは、nr によって指定されたキューのための長さ nbytes の
             統計値 buf のバッファへのポインタに書き込みます。

     DIOCGETRULESETS struct pfioc_ruleset *pr

             struct pfioc_ruleset {
                     u_int32_t        nr;
                     char             path[MAXPATHLEN];
                     char             name[PF_ANCHOR_NAME_SIZE];
             };

             その後の DIOCGETRULESET 呼び出しでの使用のために path によって指
             定されたアンカに直接アタッチされたルールセット (すなわち、アンカ)
             の番号 nr を取得します。入れ子にされたアンカは、それらが与えられ
             たアンカに直接アタッチされないので、含まれません。与えられたアン
             カが存在しないなら、この ioctl は、EINVAL を返します。

     DIOCGETRULESET struct pfioc_ruleset *pr
             与えられたアンカ path から、その番号 nr によってルールセット (す
             なわち、アンカ) name と、以前の DIOCGETRULESETS 呼び出しで得るこ
             とができる最大数を取得します。この ioctl は、与えられたアンカが存
             在しないなら、EINVAL を返すか、または別のプロセスが同時にルール
             セットを更新するなら、EBUSY を返します。

     DIOCADDSTATE struct pfioc_state *ps
             状態エントリを追加します。

             struct pfioc_state {
                     struct pfsync_state     state;
             };

     DIOCGETSTATE struct pfioc_state *ps
             状態テーブルから state 構造体の idcreatorid フィールドによっ
             て識別されたエントリを抽出します。

     DIOCKILLSTATES struct pfioc_state_kill *psk
             状態テーブルから一致するエントリを削除します。psk_killed 中の
             kill された状態の数を返します。

             struct pfioc_state_kill {
                     struct pf_state_cmp     psk_pfcmp;
                     sa_family_t             psk_af;
                     int                     psk_proto;
                     struct pf_rule_addr     psk_src;
                     struct pf_rule_addr     psk_dst;
                     char                    psk_ifname[IFNAMSIZ];
                     char                    psk_label[PF_RULE_LABEL_SIZE];
                     u_int                   psk_killed;
             };

     DIOCCLRSTATES struct pfioc_state_kill *psk
             すべての状態をクリアします。それは、DIOCKILLSTATES のように動作し
             ますが、pfioc_state_kill 構造体の psk_af, psk_proto, psk_srcpsk_dst フィールドを無視します。

     DIOCSETSTATUSIF struct pfioc_if *pi
             統計値が累算されるインタフェースを指定します。

             struct pfioc_if {
                     char             ifname[IFNAMSIZ];
             };

     DIOCGETSTATUS struct pf_status *s
             内部のパケットフィルタの統計値を取得します。

             struct pf_status {
                     u_int64_t       counters[PFRES_MAX];
                     u_int64_t       lcounters[LCNT_MAX];
                     u_int64_t       fcounters[FCNT_MAX];
                     u_int64_t       scounters[SCNT_MAX];
                     u_int64_t       pcounters[2][2][3];
                     u_int64_t       bcounters[2][2];
                     u_int32_t       running;
                     u_int32_t       states;
                     u_int32_t       src_nodes;
                     u_int32_t       since;
                     u_int32_t       debug;
                     u_int32_t       hostid;
                     char            ifname[IFNAMSIZ];
                     u_int8_t        pf_chksum[MD5_DIGEST_LENGTH];
             };

     DIOCCLRSTATUS
             内部のパケットフィルタの統計値をクリアします。

     DIOCNATLOOK struct pfioc_natlook *pnl
             発信元 (始点) と宛先 (終点) とポートで状態テーブルエントリを検索
             します。

             struct pfioc_natlook {
                     struct pf_addr   saddr;
                     struct pf_addr   daddr;
                     struct pf_addr   rsaddr;
                     struct pf_addr   rdaddr;
                     u_int16_t        sport;
                     u_int16_t        dport;
                     u_int16_t        rsport;
                     u_int16_t        rdport;
                     sa_family_t      af;
                     u_int8_t         proto;
                     u_int8_t         direction;
             };

     DIOCSETDEBUG u_int32_t *level
             デバッグレベルを設定します。

             enum    { PF_DEBUG_NONE, PF_DEBUG_URGENT, PF_DEBUG_MISC,
                       PF_DEBUG_NOISY };

     DIOCGETSTATES struct pfioc_states *ps

             struct pfioc_states {
                     int     ps_len;
                     union {
                             caddr_t          psu_buf;
                             struct pf_state *psu_states;
                     } ps_u;
             #define ps_buf          ps_u.psu_buf
             #define ps_states       ps_u.psu_states
             };

             ps_len がエントリで 0 以外であるなら、このサイズに収まるできるだ
             け多くの状態は、供給されたバッファ ps_states にコピーされます。終
             了時に、ps_len は、常にすべての状態テーブルエントリを保持するため
             に必要な合計のサイズに設定されます (すなわち、それは、
             sizeof(struct pf_state) * nr に設定されます)。

     DIOCCHANGERULE struct pfioc_rule *pcr
             rule.action によって指定された ruleset の rule を追加するか、また
             は削除します。

             実行される操作のタイプは、次のいずれかで指定できる、action 示され
             ます:

             enum    { PF_CHANGE_NONE, PF_CHANGE_ADD_HEAD, PF_CHANGE_ADD_TAIL,
                       PF_CHANGE_ADD_BEFORE, PF_CHANGE_ADD_AFTER,
                       PF_CHANGE_REMOVE, PF_CHANGE_GET_TICKET };

             ticket は、PF_CHANGE_GET_TICKET 以外のすべての動作 (action) のた
             めに PF_CHANGE_GET_TICKET で得られる値を設定しなければなりませ
             ん。pool_ticket は、PF_CHANGE_REMOVE と PF_CHANGE_GET_TICKET 以外
             のすべての動作 (action) のための DIOCBEGINADDRS 呼び出しで得られ
             る値を設定しなければなりません。anchor は、どのアンカの操作が適用
             されるかを示します。nr は、PF_CHANGE_ADD_BEFORE,
             PF_CHANGE_ADD_AFTER または PF_CHANGE_REMOVE 動作が適用されている
             規則番号を示します。

     DIOCCHANGEADDR struct pfioc_pooladdr *pca
             r_action, r_numanchor によって指定された規則 (rule) からプー
             ルアドレス addr を追加するか、または削除します。

     DIOCSETTIMEOUT struct pfioc_tm *pt

             struct pfioc_tm {
                     int              timeout;
                     int              seconds;
             };

             timeout の状態タイムアウトを seconds に設定します。古い値は、
             seconds に置かれます。timeout に指定可能な値は、<net/pfvar.h> の
             PFTM_* 値を調べてください。

     DIOCGETTIMEOUT struct pfioc_tm *pt
             timeout の状態タイムアウトを取得します。値は、seconds フィールド
             に置かれます。

     DIOCCLRRULECTRS
             規則ごとに統計をクリアします。

     DIOCSETLIMIT struct pfioc_limit *pl
             パケットフィルタで使用されるメモリプールにおけるハードの制限を設
             定します。

             struct pfioc_limit {
                     int             index;
                     unsigned        limit;
             };

             enum    { PF_LIMIT_STATES, PF_LIMIT_SRC_NODES, PF_LIMIT_FRAGS,
                       PF_LIMIT_TABLE_ENTRIES, PF_LIMIT_MAX };

     DIOCGETLIMIT struct pfioc_limit *pl
             index によって示されたメモリプールのためのハードの limit を取得し
             ます。

     DIOCRCLRTABLES struct pfioc_table *io
             すべてのテーブルをクリアします。同じ構造体を使用する基数テーブル
             を操作するすべての ioctl は、以下に説明されます。DIOCRCLRTABLES
             に関して、pfrio_ndel は、終了時に削除されたテーブルの数を含んでい
             ます。

             struct pfioc_table {
                     struct pfr_table         pfrio_table;
                     void                    *pfrio_buffer;
                     int                      pfrio_esize;
                     int                      pfrio_size;
                     int                      pfrio_size2;
                     int                      pfrio_nadd;
                     int                      pfrio_ndel;
                     int                      pfrio_nchange;
                     int                      pfrio_flags;
                     u_int32_t                pfrio_ticket;
             };
             #define pfrio_exists    pfrio_nadd
             #define pfrio_nzero     pfrio_nadd
             #define pfrio_nmatch    pfrio_nadd
             #define pfrio_naddr     pfrio_size2
             #define pfrio_setflag   pfrio_size2
             #define pfrio_clrflag   pfrio_nadd

     DIOCRADDTABLES struct pfioc_table *io
             1 つ以上のテーブルを作成します。登録時に、pfrio_buffer は、少なく
             とも pfrio_size 要素を含む struct pfr_table の配列を指さなければ
             なりません。pfrio_esize は、struct pfr_table のサイズでなければな
             りません。終了時に、pfrio_nadd は、事実上作成されたテーブルの数を
             含んでいます。

             struct pfr_table {
                     char            pfrt_anchor[MAXPATHLEN];
                     char            pfrt_name[PF_TABLE_NAME_SIZE];
                     u_int32_t       pfrt_flags;
                     u_int8_t        pfrt_fback;
             };

     DIOCRDELTABLES struct pfioc_table *io
             1 つ以上のテーブルを削除します。登録時に、pfrio_buffer は、少なく
             とも pfrio_size 要素を含む struct pfr_table の配列を指さなければ
             なりません。pfrio_esize は、struct pfr_table のサイズでなければな
             りません。終了時に、pfrio_ndel は、事実上削除されたテーブルの数を
             含んでいます。

     DIOCRGETTABLES struct pfioc_table *io
             すべてのテーブルのリストを取得します。登録時に、
             pfrio_buffer[pfrio_size] は、pfr_table 構造体のための有効な書き込
             み可能なバッファを含んでいます。終了時に、pfrio_size は、バッファ
             の中に書き込まれたテーブルの数を含んでいます。バッファが小さ過ぎ
             るなら、カーネルは、何も格納しませんが、エラーを除いて、単に必要
             なバッファサイズを返します。

     DIOCRGETTSTATS struct pfioc_table *io
             この呼び出しは、DIOCRGETTABLES に似ていますが、pfr_tstats 構造体
             の配列を取得するために使用されます。

             struct pfr_tstats {
                     struct pfr_table pfrts_t;
                     u_int64_t        pfrts_packets
                                          [PFR_DIR_MAX][PFR_OP_TABLE_MAX];
                     u_int64_t        pfrts_bytes
                                          [PFR_DIR_MAX][PFR_OP_TABLE_MAX];
                     u_int64_t        pfrts_match;
                     u_int64_t        pfrts_nomatch;
                     long             pfrts_tzero;
                     int              pfrts_cnt;
                     int              pfrts_refcnt[PFR_REFCNT_MAX];
             };
             #define pfrts_name       pfrts_t.pfrt_name
             #define pfrts_flags      pfrts_t.pfrt_flags

     DIOCRCLRTSTATS struct pfioc_table *io
             1 つ以上のテーブルの統計値をクリアします。登録時に、pfrio_buffer
             は、少なくとも pfrio_size 要素を含む struct pfr_table の配列を指
             さなければなりません。pfrio_esize は、struct pfr_table のサイズで
             なければなりません。終了時に、pfrio_nzero は、事実上クリアされた
             テーブルの数を含んでいます。

     DIOCRCLRADDRS struct pfioc_table *io
             テーブル中のすべてのアドレスをクリアします。登録時に、pfrio_table
             は、クリアされるテーブルを含んでいます。終了時に、pfrio_ndel は、
             削除されたアドレスの数を含んでいます。

     DIOCRADDADDRS struct pfioc_table *io
             テーブルに 1 つ以上のアドレスを追加します。登録時に、pfrio_table
             は、テーブル ID を含み、pfrio_buffer は、テーブルに追加するために
             少なくとも pfrio_size 要素を含む struct pfr_addr の配列を指さなけ
             ればなりません。pfrio_esize は、struct pfr_addr のサイズでなけれ
             ばなりません。終了時に、pfrio_nadd は、事実上追加されたアドレスの
             数を含んでいます。

             struct pfr_addr {
                     union {
                             struct in_addr   _pfra_ip4addr;
                             struct in6_addr  _pfra_ip6addr;
                     }                pfra_u;
                     u_int8_t         pfra_af;
                     u_int8_t         pfra_net;
                     u_int8_t         pfra_not;
                     u_int8_t         pfra_fback;
             };
             #define pfra_ip4addr    pfra_u._pfra_ip4addr
             #define pfra_ip6addr    pfra_u._pfra_ip6addr

     DIOCRDELADDRS struct pfioc_table *io
             テーブルから 1 つ以上のアドレスを削除します。登録時に、
             pfrio_table は、テーブル ID を含み、pfrio_buffer は、テーブルから
             削除するために少なくとも pfrio_size 要素を含む struct pfr_addr の
             配列を指さなければなりません。pfrio_esize は、struct pfr_addr の
             サイズでなければなりません。終了時に、pfrio_ndel は、事実上削除さ
             れたアドレスの数を含んでいます。

     DIOCRSETADDRS struct pfioc_table *io
             新しいアドレスリストによってテーブルの内容を置き換えます。これ
             は、すべての構造メンバを使用する、最も複雑なコマンドです。

             登録時に、pfrio_table は、テーブル ID を含み、pfrio_buffer は、
             テーブルの新しい内容となる少なくとも pfrio_size 要素を含む struct
             pfr_addr の配列を指さなければなりません。pfrio_esize は、struct
             pfr_addr のサイズでなければなりません。さらに、pfrio_size2 が 0
             でなければ、pfrio_buffer[pfrio_size..pfrio_size2] は、カーネル
             が、置き換え操作の間に削除されたアドレスをコピーすることができよ
             うに、書き込み可能なバッファでなければなりません。終了時に、
             pfrio_ndel, pfrio_naddpfrio_nchange は、カーネルによって削除
             され、追加され、変更されたアドレスの数を含んでいます。pfrio_size2
             がエントリに設定されたなら、pfrio_size2 は、まさに DIOCRGETADDRS
             のように使用されるバッファのサイズを指します。

     DIOCRGETADDRS struct pfioc_table *io
             テーブルのすべてのアドレスを取得します。登録時に、pfrio_table
             は、テーブル ID を含み、pfrio_buffer[pfrio_size] は、pfr_addr 構
             造体のための有効な書き込み可能なバッファを含んでいます。終了時
             に、pfrio_size は、バッファ中に書き込まれたアドレスの数を含んでい
             ます。バッファが小さ過ぎたなら、カーネルは、何も格納しませんが、
             エラーリターンを除いて、単に必要なバッファサイズを返します。

     DIOCRGETASTATS struct pfioc_table *io
             この呼び出しは、DIOCRGETADDRS に似ていますが、pfr_astats 構造体の
             配列を返します。

             struct pfr_astats {
                     struct pfr_addr  pfras_a;
                     u_int64_t        pfras_packets
                                          [PFR_DIR_MAX][PFR_OP_ADDR_MAX];
                     u_int64_t        pfras_bytes
                                          [PFR_DIR_MAX][PFR_OP_ADDR_MAX];
                     long             pfras_tzero;
             };

     DIOCRCLRASTATS struct pfioc_table *io
             1 つ以上のアドレスの統計値をクリアします。登録時に、pfrio_table
             は、テーブル ID を含み、pfrio_buffer は、テーブルからクリアされる
             ために少なくとも pfrio_size 要素を含む struct pfr_addr の配列を指
             さなければなりません。pfrio_esize は、struct pfr_addr のサイズで
             なければなりません。終了時に、pfrio_nzero は、事実上クリアされた
             アドレスの数を含んでいます。

     DIOCRTSTADDRS struct pfioc_table *io
             与えられたアドレスがテーブルに一致するか、テストします。登録時
             に、pfrio_table は、テーブル ID を含み、pfrio_buffer は、それぞれ
             がテーブルでマッチがないかテストされる、少なくとも pfrio_size 要
             素を含む struct pfr_addr の配列を指さなければなりません。
             pfrio_esize は、struct pfr_addr のサイズでなければなりません。終
             了時に、カーネルは、適切に pfra_fback メンバを設定することによっ
             て pfr_addr 配列を更新します。

     DIOCRSETTFLAGS struct pfioc_table *io
             テーブルの PFR_TFLAG_CONST または PFR_TFLAG_PERSIST フラグを変更
             します。登録時に、pfrio_buffer は、少なくとも pfrio_size 要素を含
             む struct pfr_table の配列を指さなければなりません。pfrio_esize
             は、struct pfr_table のサイズでなければなりません。pfrio_setflag
             は、追加するフラグを含まなければなりません、一方 pfrio_clrflag
             は、削除されるフラグを含まなければなりません。終了時に、
             pfrio_nchangepfrio_ndel は、カーネルによって変更されるか、ま
             たは削除されたテーブルの数を含んでいます。はい、参照されないテー
             ブルの PFR_TFLAG_PERSIST フラグを取り除かれるなら、テーブルは、削
             除することができます。

     DIOCRINADEFINE struct pfioc_table *io
             アクティブでない集合 (セット) でテーブルを定義します。登録時に、
             pfrio_table は、テーブル ID を含み、pfrio_buffer[pfrio_size] は、
             テーブルに置く pfr_addr 構造体の配列を含んでいます。また、有効な
             チケットは、pfrio_ticket に供給しなければなりません。終了時に、
             pfrio_nadd は、既にテーブルがアクティブでないリストで定義されてい
             るなら、0 を含み、新しいテーブルが作成してあるなら 1 を含んでいま
             す。pfrio_naddr は、事実上テーブルに置かれるアドレスの数を含んで
             います。

     DIOCXBEGIN struct pfioc_trans *io

             struct pfioc_trans {
                     int              size;  /* 要素の数 */
                     int              esize; /* 各要素のバイト単位のサイズ */
                     struct pfioc_trans_e {
                             int             rs_num;
                             char            anchor[MAXPATHLEN];
                             u_int32_t       ticket;
                     }               *array;
             };

             pfioc_trans_e 配列で指定されたすべてのアクティブでない ruleset を
             クリアします。各 ruleset に関しては、DIOCXCOMMIT と DIOCXROLLBACK
             呼び出しと同様に、その後の "add rule" ioctl のためにチケットが返
             されます。

             rs_num によって識別されるルールセットのタイプは、次に含まれます:

                PF_RULESET_SCRUB   scrub (延期する) (パケット正規化) 規則。
                PF_RULESET_FILTER  フィルタ規則。
                PF_RULESET_NAT     NAT (Network Address Translation) 規則。
                PF_RULESET_BINAT   双方向の NAT 規則。
                PF_RULESET_RDR     リダイレクト規則。
                PF_RULESET_ALTQ    ALTQ 制御規則。
                PF_RULESET_TABLE   アドレステーブル。

     DIOCXCOMMIT struct pfioc_trans *io
             アクティブでない ruleset のベクトルをアクティブな ruleset に不可
             分に (atomically) 切り換えます。この呼び出しは、すべてのルール
             セットが失敗するか、または完全に成功するかのいずれかである、標準
             の二相コミットとして実装されます。この ioctl は、別のプロセスが同
             じルールセットのいくつかを同時に更新するなら、EBUSY を返します。

     DIOCXROLLBACK struct pfioc_trans *io
             最後の DIOCXBEGIN 以後にアクティブでない ruleset で起こるすべての
             変更を元に戻すことによって、カーネルをクリーンアップします。
             DIOCXROLLBACK は、静かに、チケットが無効である ruleset を無視しま
             す。

     DIOCSETHOSTID u_int32_t *hostid
             どのホストが状態テーブルエントリを作成したか識別するために
             pfsync(4) によって使用される、ホスト ID を設定します。

     DIOCOSFPFLUSH
             パッシブ OS 指紋テーブルをフラッシュします。

     DIOCOSFPADD struct pf_osfp_ioctl *io

             struct pf_osfp_ioctl {
                     struct pf_osfp_entry {
                             SLIST_ENTRY(pf_osfp_entry) fp_entry;
                             pf_osfp_t               fp_os;
                             char                    fp_class_nm[PF_OSFP_LEN];
                             char                    fp_version_nm[PF_OSFP_LEN];
                             char                    fp_subtype_nm[PF_OSFP_LEN];
                     }                       fp_os;
                     pf_tcpopts_t            fp_tcpopts;
                     u_int16_t               fp_wsize;
                     u_int16_t               fp_psize;
                     u_int16_t               fp_mss;
                     u_int16_t               fp_flags;
                     u_int8_t                fp_optcnt;
                     u_int8_t                fp_wscale;
                     u_int8_t                fp_ttl;
                     int                     fp_getnum;
             };

             テーブルにパッシブ OS 指紋を追加します。fp_os.fp_os にパックされ
             た指紋を、fp_os.fp_class_nm にクラス (Linux、Windows など) の名前
             を、fp_os.fp_version_nm にバージョン (NT、95、98) の名前を、そし
             て fp_os.fp_subtype_nm にサブタイブまたはパッチレベルの名前を設定
             します。メンバ fp_mss, fp_wsize, fp_psize, fp_ttl, fp_optcntfp_wscale は、それぞれ TCP MSS、TCP ウィンドウサイズ、IP の長さ、
             IP TTL、TCP オプションの数と TCP SYN パケットの TCP ウィンドウの
             スケーリング定数が設定されます。

             fp_flags メンバは、PF_OSFP_* を定義している <net/pfvar.h> インク
             ルードファイルに従って満たされます。fp_tcpopts メンバは、パックさ
             れた TCP オプションを含みます。各オプションは、パックされた値の
             PF_OSFP_TCPOPT_BITS ビットを使用します。オプションは、
             PF_OSFP_TCPOPT_NOP, PF_OSFP_TCPOPT_SACK, PF_OSFP_TCPOPT_WSCALE,
             PF_OSFP_TCPOPT_MSS または PF_OSFP_TCPOPT_TS のいずれかを含みま
             す。

             fp_getnum メンバは、この ioctl では使用されません。

             構造体の使用していない領域は、適格な操作 memset で 0 にしなければ
             なりません。memset(3) を使用して書き込まれる前にすべての構造体を
             0 にして、カーネルに送ります。

     DIOCOSFPGET struct pf_osfp_ioctl *io
             カーネルの指紋リストからパッシブ OS 指紋番号 fp_getnum を取得しま
             す。構造体のメンバの残りは、書き込まれた状態で戻ります。ioctl が
             EBUSY を返すまで、fp_getnum 番号を増加することを繰り返すことに
             よって、全体のリストを取得できます。

     DIOCGETSRCNODES struct pfioc_src_nodes *psn

             struct pfioc_src_nodes {
                     int     psn_len;
                     union {
                             caddr_t         psu_buf;
                             struct pf_src_node      *psu_src_nodes;
                     } psn_u;
             #define psn_buf         psn_u.psu_buf
             #define psn_src_nodes   psn_u.psu_src_nodes
             };

             sticky address と source 追跡によってソースノード保管リストを取得
             します。ioctl は、0 に設定された psn_len で一度呼び出されなければ
             なりません。ioctl がエラーなしで返るなら、psn_len は、テーブルに
             保持されているすべての pf_src_node 構造体を保持するために要求され
             るバッファのサイズに設定されます。次に、このサイズのバッファが割
             り付けられるべきで、このバッファへのポインタは、psn_buf に置かれ
             ます。そして、実際のソースノードデータでこのバッファを満たすため
             に再び ioctl を呼び出さなければなりません。その呼び出しの後に、
             psn_len は、実際に使用されたバッファの長さに設定されます。

     DIOCCLRSRCNODES
             ソース追跡ノードのツリーをクリアします。

     DIOCIGETIFACES struct pfioc_iface *io
             pf に知られているインタフェースとインタフェースドライバのリストを
             取得します。インタフェースを操作するすべての ioctl は、以下に記述
             された同じ構造を使用します:

             struct pfioc_iface {
                     char                     pfiio_name[IFNAMSIZ];
                     void                    *pfiio_buffer;
                     int                      pfiio_esize;
                     int                      pfiio_size;
                     int                      pfiio_nzero;
                     int                      pfiio_flags;
             };

             空でなければ、pfiio_name は、特定のインタフェースまたはドライバの
             検索を制限するために使用することができます。
             pfiio_buffer[pfiio_size] は、データを返すためのユーザによって供給
             されたバッファです。登録時に、pfiio_size は、バッファに適合するこ
             とができる pfi_kif エントリの数を含みます。カーネルは、返さなけれ
             ばならないエントリの実際の数でこの値を置き換えます。pfiio_esize
             は、sizeof(struct pfi_kif) に設定されるべきです。

             以下に記述された pfi_kif 構造体にデータは、返されます:

             struct pfi_kif {
                     RB_ENTRY(pfi_kif)                pfik_tree;
                     char                             pfik_name[IFNAMSIZ];
                     u_int64_t                        pfik_packets[2][2][2];
                     u_int64_t                        pfik_bytes[2][2][2];
                     u_int32_t                        pfik_tzero;
                     int                              pfik_flags;
                     struct pf_state_tree_lan_ext     pfik_lan_ext;
                     struct pf_state_tree_ext_gwy     pfik_ext_gwy;
                     TAILQ_ENTRY(pfi_kif)             pfik_w_states;
                     void                            *pfik_ah_cookie;
                     struct ifnet                    *pfik_ifp;
                     struct ifg_group                *pfik_group;
                     int                              pfik_states;
                     int                              pfik_rules;
                     TAILQ_HEAD(, pfi_dynaddr)        pfik_dynaddrs;
             };

     DIOCSETIFFLAG struct pfioc_iface *io
             pf の内部のインタフェース記述のユーザ設定可能なフラグ (以下に説明
             される) を設定します。フィルタリングプロセスは、DIOCIGETIFACES に
             対するものと同じです。

             #define PFI_IFLAG_SKIP  0x0100  /* インタフェースのスキップフィルタリング */

     DIOCCLRIFFLAG struct pfioc_iface *io
             上記の DIOCSETIFFLAG として動作しますが、フラグをクリアします。

     DIOCKILLSRCNODES struct pfioc_iface *io
             明示的にソースの追跡ノードを削除します。

関連ファイル
     /dev/pf  パケットフィルタリングデバイス

使用例
     次の例は、NAT 接続の内部のホスト/ポートを見つけためにどのように
     DIOCNATLOOK コマンドを使用するかを示しています。

     #include <sys/types.h>
     #include <sys/socket.h>
     #include <sys/ioctl.h>
     #include <sys/fcntl.h>
     #include <net/if.h>
     #include <netinet/in.h>
     #include <net/pfvar.h>
     #include <err.h>
     #include <stdio.h>
     #include <stdlib.h>

     u_int32_t
     read_address(const char *s)
     {
             int a, b, c, d;

             sscanf(s, "%i.%i.%i.%i", &a, &b, &c, &d);
             return htonl(a << 24 | b << 16 | c << 8 | d);
     }

     void
     print_address(u_int32_t a)
     {
             a = ntohl(a);
             printf("%d.%d.%d.%d", a >> 24 & 255, a >> 16 & 255,
                 a >> 8 & 255, a & 255);
     }

     int
     main(int argc, char *argv[])
     {
             struct pfioc_natlook nl;
             int dev;

             if (argc != 5) {
                     printf("%s <gwy addr> <gwy port> <ext addr> <ext port>\n",
                         argv[0]);
                     return 1;
             }

             dev = open("/dev/pf", O_RDWR);
             if (dev == -1)
                     err(1, "open(\"/dev/pf\") failed");

             memset(&nl, 0, sizeof(struct pfioc_natlook));
             nl.saddr.v4.s_addr      = read_address(argv[1]);
             nl.sport                = htons(atoi(argv[2]));
             nl.daddr.v4.s_addr      = read_address(argv[3]);
             nl.dport                = htons(atoi(argv[4]));
             nl.af                   = AF_INET;
             nl.proto                = IPPROTO_TCP;
             nl.direction            = PF_IN;

             if (ioctl(dev, DIOCNATLOOK, &nl))
                     err(1, "DIOCNATLOOK");

             printf("internal host ");
             print_address(nl.rsaddr.v4.s_addr);
             printf(":%u\n", ntohs(nl.rsport));
             return 0;
     }

関連項目
     ioctl(2), altq(4), if_bridge(4), pflog(4), pfsync(4), pfctl(8), altq(9)

歴史
     pf パケットフィルタリングメカニズムは、OpenBSD 3.0 ではじめて登場し、次
     に、FreeBSD 5.2 で登場しました。

     この実装は、OpenBSD 4.5 に由来します。それは、マルチスレッド化された
     FreeBSD カーネルで実行することができ、複数の CPU で性能を計ることができる
     ように大幅に修正されました。

FreeBSD 12.2                    August 5, 2018                    FreeBSD 12.2

Table of Contents

FreeBSD マニュアル検索