-

StunnelでIRCサーバをSSL化

社内と外でIRCしたいかもしれない理由があって、IRCサーバを立ててSSLでつなげるようにしてみたログ。
サーバはDebian

Stunnelは任意のTCP接続をSSLの上にのっけることができるプログラム。これをIRCサーバで使ってみる。

ircdを動かす

 # apt-get install ircd-ircu

とりあえずはこれだけで、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

この状態でIRCクライアントから、Port 6668にSSLでつなげればOK。

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での、接続元ごとの設定ができなくなってしまう。