Openfire

提供: ArchWiki
2017年10月12日 (木) 23:15時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「Tips and tricks」を「ヒントとテクニック」に置換)
ナビゲーションに移動 検索に移動

関連記事

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 管理者インターフェイスはデフォルトでサーバーのポート 90909091 を使います。<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 証明書のエラー (ドメインごとに別々の証明書を使うことはできません)