-
Notifications
You must be signed in to change notification settings - Fork 1
ルールファイル文法
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
のそれと一緒です。
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
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(3)によるマッチを試みます。シェル引数のワイルドカードのような展開をホスト名に対して行います。詳しくはfnmatch(3)のマニュアルを参照してください。
fnmatch ad.* deny
fnmatch ads.* deny
全ての宛先・ポートにマッチします。
マッチさせる接続先ポートを指定します。大まかな文法は以下の通りです。ポートリストが空であった場合は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
それぞれその名前の通りのプロトコルで、指定したホスト名・ポート名へリクエストをします。これらは別のプロクシの後に続けて指定することが出来、プロクシの連鎖をさせることが出来ます。例えば、1段目にTorを使用し、Torを出た2段目で別のプロクシを使うといったことが可能です。
all socks5 localhost 9050 http-connect 192.0.2.100 8080
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
中継やプロクシへの接続をせず、接続元にエラーを返します。プロクシ
の最初にのみ指定できます。
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 ; 予約