PeerGuardian Linux

提供: ArchWiki
ナビゲーションに移動 検索に移動

PeerGuardian Linux (pgl) はプライバシー指向のファイアウォールアプリケーションです。巨大なブロックリスト (数千数億の IP 範囲) で指定されたホストからの接続をブロックします。pgl は Linux カーネルの netfilter フレームワークと iptables をベースとしています。

同じような効果を実現するネイティブで効率的な方法として pg2ipset ツールと ipset-update スクリプトを ipset カーネルモジュールを組み合わせて使う方法もあります。

インストール

2つの AUR パッケージから選択してください: pgl-cliAUR にはデーモンと CLI ツールしか含まれておらず、pglAUR には (Qt で書かれた) GUI が付属しています。

設定

  • /etc/pgl/blocklists.list にはブロックリストを取得するための URL のリストが記述されています。
  • /etc/pgl/pglcmd.conf はデフォルトでは空になっており、/usr/lib/pgl/pglcmd.defaults のデフォルト設定を上書きするためのファイルです。
  • /etc/pgl/allow.p2p ではフィルタリングしない IP の範囲を指定します。

/etc/pgl/blocklists.list のデフォルトのリストでは問題がないと思われる IP アドレスも大量にブロックされます。リストを絞ることが推奨されています。情報は I-Blocklist にあります。

また、以下を /etc/pgl/pglcmd.conf に追加して HTTP 接続のフィルタリングを無効化することが推奨されます:

/etc/pgl/pglcmd.conf
WHITE_TCP_OUT="http https"

プログラムによってはインターネットに接続できなくなることがあります。例えば、インスタンスメッセージとして MSN を使っている場合、ポート 1863 をホワイトリストに追加する必要があります:

/etc/pgl/pglcmd.conf
WHITE_TCP_OUT="http https msnp"

逆に、全てのポートをホワイトリストに追加して、ブロックしたいプログラムのポートだけを除外することもできます。以下の例ではブロックリストを使ってポート 53 (DNS) と 80 (HTTP) からの通信だけを止めています:

/etc/pgl/pglcmd.conf
WHITE_TCP_IN="0:79 81:65535"
WHITE_UDP_IN="0:52 54:65535"

サーバー

systemd はシステムの初期化を行いますが、pgl が起動する前に、サーバーが無防備になる瞬間が存在する可能性があります。完全な防護を行うためには、オリジナルのサーバーと同じ名前のサービスファイル (/etc/systemd/system/httpd.service) を作成して以下を記述します:

/etc/systemd/system/httpd.service
.include /usr/lib/systemd/system/httpd.service

[Unit]
Wants=pgl.service
After=pgl.service

LAN

デフォルトでは、pgl はローカルの IPv4 アドレスの通信をブロックします。ブロックしないようにするには、/etc/pgl/pglcmd.conf を編集して WHITE_IP_* を設定して除外を追加してください:

/etc/pgl/pglcmd.conf
WHITE_IP_OUT="192.168.0.0/24"
/etc/pgl/pglcmd.conf
WHITE_IP_IN="192.168.0.0/24"

詳しくは、/usr/lib/pgl/pglcmd.defaults# Whitelist IPs # セクションを参照。

起動

デーモンとリストの設定が完了したら、pgl サービスを起動してください。pgl が正しく動作しているか確認するには、次のコマンドを実行:

# pglcmd test

起動時に pgl が自動的に実行されるようにするには、pgl サービスを有効化してください。

コンテナから pgl を実行

Linux Containers の中で pgl を実行するにはパッケージに含まれている lxc@.service を修正して pgl が必要とするモジュールをロードする必要があります:

/etc/systemd/system/lxc@.service
[Unit]
Description=%i LXC
After=network.target

[Service]
Type=forking
ExecStartPre=/usr/bin/modprobe -a xt_NFQUEUE xt_mark xt_iprange
ExecStart=/usr/bin/lxc-start -d -n %i
ExecStop=/usr/bin/lxc-stop -n %i
Delegate=true

[Install]
WantedBy=multi-user.target