Dante でアクセスを制限した SOCKS5 サーバーを作る
Dante 1.4.4でリスナー、許可するクライアント1台、宛先1つを設定し、二段階のルールを区別します。
Danteはアクセスを二段階で確認します。clientルールが接続元を受け入れ、SOCKSルールが要求された宛先とコマンドを許可します。このDante 1.4.4の例では、クライアント1台から管理下の宛先1つのポート443へのアクセスを許可します。
サービスの実行ユーザーとアドレス
インストールで用意されていなければ、専用の低権限アカウントを作ります。
sudo useradd --system --no-create-home --shell /usr/sbin/nologin danteproxy
以下は高位ポートを使い、接続元を許可リストで制限する設定なので、二つの実行ユーザーに同じアカウントを使えます。パスワード認証や特権を要する機能では、これらの設定を見直す必要があります。使用前にドキュメント用アドレスをすべて置き換えてください。
logoutput: stderr
internal: 192.0.2.10 port = 1080
external: 192.0.2.10
clientmethod: none
socksmethod: none
user.privileged: danteproxy
user.unprivileged: danteproxy
client pass {
from: 198.51.100.27/32 to: 192.0.2.10/32 port = 1080
log: connect error
}
socks pass {
from: 198.51.100.27/32 to: 203.0.113.20/32 port = 443
command: connect
log: connect error
}
internal はクライアント向けリスナー、external は外向きアドレスを選びます。インターフェースが一つのサーバーでは、両方に同じ割り当て済みアドレスを使えます。適切な場合はインターフェース名も使えますが、どのアドレスに展開されるかを確認してください。
このポリシーで許可されること
最初のルールは指定した接続元をリスナーに受け入れます。二つ目は指定した宛先へのCONNECTだけを許可します。一致しない要求はBINDとUDP ASSOCIATEを含めてブロックされたままです。
method設定はユーザー名認証を提供しません。アクセス制御は限定した接続元ルールとネットワーク境界に依存します。この構成は、その接続元が正規クライアントを識別できる場所にだけ適しています。
sockd -V -f /path/to/sockd.conf
ディストリビューションによっては実行ファイル名が danted です。サービスを起動する前に、インストール済みのコマンドで設定を確認します。ファイアウォールにも対応する接続元制限を適用し、許可した宛先と、拒否されるべき管理下の宛先の両方を試してください。