Skip to content

ルールファイル文法

MIYAGI Hikaru edited this page Sep 23, 2018 · 3 revisions

privacy-exposerの起動オプションに与えるルールファイルの文法について記述します。

コメント

;はコメントの開始です。

行の構造

各行は振り分けルールで始まり、プロクシが任意個続くという構造になっています。振り分けルールは1行目から順番に走査され、最初にマッチしたものに対してプロクシが使われます。プロクシは0個であることもあり、その時はデーモンが直接リクエスト先へ接続します。

振り分けルール [プロクシ]...

振り分けルール

振り分けルールは以下の種類があります。host、domainは2つの引数のいずれか1つを省略できます。

host         [ホスト名]          [#ポートリスト]
domain       [ドメイン名]        [#ポートリスト]
net4         IPv4アドレス[/CIDR] [#ポートリスト] [except IPv4アドレス[/CIDR]]
net6         IPv6アドレス[/CIDR] [#ポートリスト] [except IPv6アドレス[/CIDR]]
net4-resolve IPv4アドレス[/CIDR] [#ポートリスト] [except IPv4アドレス[/CIDR]]
net6-resolve IPv6アドレス[/CIDR] [#ポートリスト] [except IPv6アドレス[/CIDR]]
fnmatch      パターン            [#ポートリスト]
all

host

ホスト名が完全一致した時にマッチします。ホスト名.で始まっていた場合、ホスト名の頂点を含まないそれ以下の任意のサブドメインにマッチします。

domain

ドメイン名とその任意のサブドメインにマッチします。ドメイン名.で始まっていた場合はその頂点のドメインは含まれません。動作的にはhostのそれと一緒です。

net4、net6

IPv4、IPv6のネットワーク範囲に対してマッチします。名前解決後のアドレスに対しては検査されないので、その用途にはnet4-resolve、net6-resolveを使う必要があります。CIDRが省略された場合はIPアドレスに完全一致する場合にマッチします。exceptがあるルールは、検査対象がnet4/6のネットワークとexceptのネットワークの両方に含まれる場合は「マッチせずに」次のルールへ移ります。

net4 192.168.0.0/16                        deny
net6 fc00::/7       except fd00:12:34::/48 deny

net4-resolve、net6-resolve

IPv4、IPv6のネットワーク範囲に対してマッチします。名前解決後のアドレスも検査しますが、その時は名前でマッチした行より前までに対して検査が行われます。また、名前解決前のルールが別のプロクシを使用するものであった場合、名前解決後のアドレスは検査されません。

以下のルールに於いて、もし fake-localhost.example が ::1 を返した時、一旦(2)によって通過された接続が(1)によって拒否されることになります。しかし(1)がコメントになっていた場合、(2)以降はnet?-resolveによる検査がなされないので、(3)によるルールは適用されず、(2)による接続が通過することになります。

net6-resolve  ::1/128                 deny ; (1)
host          fake-localhost.example       ; (2)
net6-resolve  ::1/128                 deny ; (3)

fnmatch

fnmatch(3)によるマッチを試みます。シェル引数のワイルドカードのような展開をホスト名に対して行います。詳しくはfnmatch(3)のマニュアルを参照してください。

fnmatch ad.*  deny
fnmatch ads.* deny

all

全ての宛先・ポートにマッチします。

ポートリスト

マッチさせる接続先ポートを指定します。大まかな文法は以下の通りです。ポートリストが空であった場合は0-65535が指定されたことと同じになります。

  • ポートリスト := [ポート範囲][,ポート範囲]...
  • ポート範囲 := [ポート][-ポート]|ポート-
host example.com #80,443
host example.com #6000-6063
host example.com #          ; #0-65535 と同じ
host #80,443                ; ホスト名が省略された場合はすべてのホスト名とマッチ。且つポートが80,443のときマッチ。
host #                      ; すべてのホスト・すべてのポートとマッチ。実質 all と同じ

プロクシ

プロクシは以下の種類があります。

socks5       ホスト名 ポート
socks4a      ホスト名 ポート
http-connect ホスト名 ポート
unix-socks5  パス
deny

socks5、socks4a、http-connect

それぞれその名前の通りのプロトコルで、指定したホスト名・ポート名へリクエストをします。これらは別のプロクシの後に続けて指定することが出来、プロクシの連鎖をさせることが出来ます。例えば、1段目にTorを使用し、Torを出た2段目で別のプロクシを使うといったことが可能です。

all socks5 localhost 9050 http-connect 192.0.2.100 8080

unix-socks5

UNIXドメインソケットに対してsocks5のリクエストをします。TorのSocksPortディレクティブはUNIXメインソケットに関する設定があり、それに対応するものとなります。unix-socks5プロクシの最初にのみ指定できます。

all unix-socks5 /var/lib/tor/socks.sock
all unix-socks5 /var/lib/tor/socks.sock http-connect 192.0.2.101 3128

deny

中継やプロクシへの接続をせず、接続元にエラーを返します。プロクシの最初にのみ指定できます。

domain google-analytics.com deny

固定ルール

privacy-exposerではあらゆるルール指定に先立ち、以下のルールが先頭に設定されているように振る舞います。

net6-resolve fe80::/10        deny ; リンクローカルアドレス
net6-resolve 2001:db8::/32    deny ; 文書例示用
net6-resolve 100::/64         deny ; 破棄
net6-resolve ::/96 except ::1 deny ; IPv4互換アドレス
net4-resolve 0.0.0.0/8        deny ; this network
net4-resolve 169.254.0.0/16   deny ; リンクローカルアドレス
net4-resolve 192.0.2.0/24     deny ; 文書例示用
net4-resolve 198.51.100/24    deny ; 文書例示用
net4-resolve 203.0.113.0/24   deny ; 文書例示用
net4-resolve 240.0.0.0/4      deny ; 予約