Openfire
関連記事
Wikipedia より:
- Openfire (旧名 Wildfire, Jive Messenger) は Java で書かれた XMPP サーバーを使用するインスタントメッセージ (IM) とグループチャットサーバーである。ライセンスは Apache License 2.0。
目次
LAN 内のローカル PC にインストール
インストール
Openfire サーバーを動作させる PC が安全であること、ファイアウォールが使われていることを確認してください。インストールするとすぐに、ポート 9090 と 9091 から誰でも管理者インターフェイスにアクセスできるようになります。
PC にローカルサーバーを立てるだけであれば、Openfire の統合データベースで大抵の場合は間に合います。トラフィック量が予測できない場合や PC のメモリが足りない場合、MySQL データベースを使うことができます (#リモートでデータベースを作成を参照)。
openfire をインストールして openfire.service
を起動してください。
セットアップを完了するにはウェブブラウザで 127.0.0.1:9090
を開いて、admin
としてログインしてから設定を確認してください。
リモートサーバーからの接続を許可する
ダイナミック DNS サービスを使ってください。
リモートサーバーにインストール
リモートでデータベースを作成
Openfire は独自のフラットファイルデータベース (mysql コマンドのリストからなり、メモリ上で実行される) を作ることができますが、java プログラムは unix ソケットをサポートしていないため、あくまで代替として考えるべきです。TCP/IP が無効になっているかどうか確認:
$ grep -n skip-networking /etc/mysql/my.cnf
50:skip-networking
オプションをコメントアウトしたり bind-address = 127.0.0.1
を使うことでループバック TCP/IP を許可したり #unix ソケットのサポートを追加することが可能です。
MySQL サーバーをインストールしたら以下のように Openfire 用のデータベースを作成する必要があります:
mysql
> CREATE DATABASE openfire_db; > CREATE USER 'openfire_usr'@'localhost'; > GRANT ALL PRIVILEGES ON openfire_db.* TO 'openfire_usr'@'localhost' IDENTIFIED BY 'password'; > quit;
リモートで Openfire をインストール・起動
openfire パッケージをインストールしてください。
Openfire 管理者インターフェイスはデフォルトでサーバーのポート 9090
と 9091
を使います。<inteface>127.0.0.1</inteface>"
を使うことでポートがファイアウォールで塞がれていない場合に一時的にサーバーをセキュアにすることが可能です。
/etc/openfire/openfire.xml
<adminConsole> <!-- Disable either port by setting the value to -1 --> <port>9090</port> <securePort>9091</securePort> <inteface>127.0.0.1</inteface> </adminConsole>
リモートサーバーで openfire.service
を起動してください。curl を使ってローカルから管理者インターフェイスにアクセスできることをテスト:
$ curl -v 127.0.0.1:9090 && echo Yay, it works!
設定 (PC から)
まだクライアントからサーバーにアクセスすることはできません:
$ curl -v example.com:9090 && echo Oh no, it works!
PC からサーバーに SSH トンネルを起動してください:
$ ssh -L -N 9090:localhost:9090 yourserver.example.com -p22
これでリモートのウェブインターフェイスに接続できるようになります。ウェブブラウザを使って 127.0.0.1:9090
にアクセスしてセットアップを行ってください。
セットアップ用データベース:
jdbc:mysql://localhost:3306/openfire_db?rewriteBatchedStatements=true
先に作成したものと同じユーザー名・パスワードを使ってください。
セットアップが完了したら、ユーザー名 admin
でログインしてください (ただの "admin" です。ウェブフォームで提案される "the email address for admin" ではありません)。
デフォルト設定の変更
Openfire はデフォルトですぐに使えるように設定されます。サーバーを全世界に公開する前に、以下の設定を確認してください。
- Server > Server Settings > Registration & Login:
- アプリケーション経由で誰でも自動的に新しいユーザーアカウントを作成可能
- アカウント不要の匿名ログインを許可
- Server > Server Settings > Offline Messages:
- ユーザーごとに 100kb までのデータを保存可能
- Server > Server Settings > File Transfer Settings:
- Openfire をファイル転送プロキシとして使用
設定後のリモートサーバー
ポートのリストは管理者インターフェイスのインデックスページにあります。または netstat -tulpen | grep java
で確認できます。有効にしたコンポーネントが UDP (jingle メディアプロキシなど) を必要とせず管理者ウェブインターフェイスを使わない場合、Openfire を動作させるには以下の iptables ルールで十分です:
$ openfire_ports=(5222:5223 7070 7443 5269 5275:5276 5262:5263 7777 5229); $ for port in $openfire_ports; do echo iptables -A INPUT -p tcp --dport $port -j ACCEPT; done;
iptables -A INPUT -p tcp --dport 5222:5223 -j ACCEPT iptables -A INPUT -p tcp --dport 7070 -j ACCEPT iptables -A INPUT -p tcp --dport 7443 -j ACCEPT iptables -A INPUT -p tcp --dport 5269 -j ACCEPT iptables -A INPUT -p tcp --dport 5275:5276 -j ACCEPT iptables -A INPUT -p tcp --dport 5262:5263 -j ACCEPT iptables -A INPUT -p tcp --dport 7777 -j ACCEPT iptables -A INPUT -p tcp --dport 5229 -j ACCEPT
ヒントとテクニック
unix ソケットのサポートを追加
Java アプリケーションで unix ソケットを使ってデータベースに接続するには socketFactory を実装した jdbc ドライバーが必要です。MariaDB Connector/J はバージョン 1.4 からソケット経由の認証に対応しており、mariadb-jdbcAUR でインストールすることができます。unix ソケットを使うには jnaAUR (Java Native Access) も必要です。両方をインストールしてください。
/etc/systemd/system/openfire.service.d/override.conf
[Service] #override ExecStart ExecStart= # added the 2 AUR packages to class path ExecStart=/usr/bin/java -server -DopenfireHome=/usr/share/openfire -Dopenfire.lib.dir=/usr/lib/openfire -cp "/usr/lib/openfire/startup.jar:/usr/share/java/mariadb-jdbc/mariadb-java-client.jar:/usr/share/java/jna.jar" -jar /usr/lib/openfire/startup.jar
以下のようにすることで動作します:
# ln /usr/share/java/mariadb-jdbc/mariadb-java-client.jar /usr/lib/openfire/ # ln /usr/share/java/jna.jar /usr/lib/openfire/
既に同一のデータベースに TCP/IP を使って接続するようにセットアップ済みの場合、xml 設定を変更して新しいドライバーに切り替えてください:
/etc/openfire/openfire.xml
<driver>org.mariadb.jdbc.Driver</driver> <serverURL>jdbc:mariadb://localhost:3306/openfire_db?localSocket=/run/mysqld/mysqld.sock&writeBatchedStatements=true</serverURL>
セットアップインターフェイスを使用する場合、"MySQL" を選択してドライバーとサーバーの URL の値を "JDBC Driver Class" と "Database URL" フィールドに入力してください。
その後 openfire.service
を再起動してください。
マルチドメインの使用
Openfire は prosody のようにマルチドメイン・バーチャルホストはサポートしていませんが、マルチドメインの認証を行う LDAP サーバーを使うことが可能です。
他のドメインからユーザーは通常通りログインできるようになりますが、以下のような副作用があります:
- 未記載のユーザー
- ユーザーを手動で作成する必要あり
- 他のドメインのユーザーもデフォルトドメインのメンバーとして表示されます
- 他のドメインのユーザーが同じユーザー名で衝突する可能性があります
- SSL 証明書のエラー (ドメインごとに別々の証明書を使うことはできません)