StunnelでIRCサーバをSSL化
社内と外でIRCしたいかもしれない理由があって、IRCサーバを立ててSSLでつなげるようにしてみたログ。
サーバはDebian。
Stunnelは任意のTCP接続をSSLの上にのっけることができるプログラム。これをIRCサーバで使ってみる。
Stunnelをインストール
# apt-get install stunnel4
※ stunnel4ではなくstunnelというパッケージがあるが、バージョン3系で古い。設定方法も違うようなので、stunnel4を入れるようにする。
SSL証明書を用意
既存の証明書(HTTPS用)を流用して、そこから秘密鍵とサーバー証明書をつなげたファイルを作る。中身は、↓のようになる。秘密鍵はパスワードで暗号化されていないことが必要。
-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
一から作る場合は /usr/share/doc/stunnel4/README.Debian に openssl を使う方法が書いてある。
証明書を適当な場所に置く。 -> /etc/stunnel/stunnel.pem に。秘密鍵を含むのでパーミッションを600にする。
とりあえずフォアグラウンド実行で接続テスト
% sudo stunnel -D 7 -f -p /etc/stunnel/stunnel.pem -d 6668 -r 6667
※ /usr/bin/stunnel と /usr/bin/stunnel4 がある。stunnelのほうは stunnel 3.x のコマンドラインsyntaxで使えるwrapper
Stunnelをitetdから起動させる
デーモンでも起動できるが、inetdからにしたほうがアクセス制限ができるのと、いつも必要なわけではないのでそうすることにしました。
stunnel4コマンドを使うことにして、コマンドラインに直接設定を書くのではなく、4.x式に設定ファイルに書く。
/etc/stunnel/stunnel.conf:
cert = /etc/stunnel/stunnel.pem sslVersion = all ; <- SSLv3のままではIRCクライアントのColloquyからつなげなかった ... connect = 6667 ; [pop3s], [imaps], [ssmtp] は削除orコメントアウト。inetdで使うときはセクションは書いてはいけない。
/etc/inetd.conf:
6668 stream tcp nowait root /usr/sbin/tcpd /usr/bin/stunnel4 /etc/stunnel/stunnel.conf
/etc/hosts.allow:
stunnel4: <許可したいところ>
問題
ircdからはすべてlocalhostからの接続に見えるので、I:Lineでの、接続元ごとの設定ができなくなってしまう。