Segmentation Fault

2018年にも、Gitterや非常に人気のあるSlackのような最新の機能が豊富なインスタントメッセージングアプリケーションが普及していますが、ircは多くの開発者にとって好ましい通信方法です。 それはシンプルで、安定しており、ユビキタスであり、最も重要なのは、完全に分散化されています。 しかし、IRCは90年代初頭から始まっているので、古いプロトコルです(IRCプロトコルRFCは1993年に公開されました)。 そのため、IRCには限界があります。

私にとって最も注目すべきことの一つは、メッセージアーカイブの欠如です。 IRCクライアントから送受信されたすべてのメッセージは、マシンに保存されず、参加したばかりのチャネルで過去の会話の再生も取得されません。 IRCチャットルームにログインするたびに、あなたは白紙の状態を与えられています。 IRCが帯域外通信チャネルとして使用されることが非常に多いため、これは不便です。 人々は他のインスタントメッセージングアプリケーションと同じくらい頻繁にIRCを監視する傾向がないので、チャネルに参加し、質問を残してから、誰かが返信するのを数時間待ちます。

幸いにも、おそらく驚くことではないが、これはかなりの時間のために解決された問題であった。 最も簡単で簡単な方法は、24/7にある私たちの制御下にあるサーバーからIRCサーバーへの永続的な接続を確立し、IRCを確認するたびにSSH/tmuxセッションを確立す 完了したら、GNU screenのC-a dまたはtmuxのC-b dでセッションをデタッチするだけです。 これは、私たちが離れていた間にチャネルで送信されたすべてのメッセージが欠落しているという問題を解決しますが、それはあ あなたはこれよりもはるかに多くを提供する解決策を探しているなら、それは警備員を見てみましょうする時間です。

用心棒サーバーとは何ですか?

バウンサーサーバーは、IRCにアクセスするためのプロキシとして使用するサーバーです。 用心棒は私達のIRCの細部を取り、私達に代わってIRCサーバーへの関係を確立し、定義済みチャネルのリストを結合する。

その後、ircサーバーに直接接続するのではなく、IRCクライアントからこのバウンサーサーバーに接続し、この時点から、バウンサーによってターゲットサーバーにメッセージが”バウンスオン”されます。

バウンサーは、以下を含むいくつかの利点を提供します:

  • 永続サーバーおよびチャネルセッション
  • アーカイブ用のテキストファイルへのチャネル会話のロギング
  • Bouncerユーザー認証
  • NickServまたはSASLを介した自動IRCサーバー認証
  • IRCユーザーステータスを自動化する(&離れたメッセージなどを残す)。)
  • とはるかに!

AWSでのバウンサーサーバーの設定

安価なAWS EC2インスタンスで、最も人気のあるバウンサーサーバーアプリケーションであるZNCを使用して、独自のバウンサーサーバーをセットアップします。

以下を除くすべてのデフォルト設定で、新しいUbuntu Server16.04t2.nanoEC2インスタンスを起動します:

  • ユーザーデータ:bouncerソフトウェア(ZNC)をインストールし、プロセスのユーザーとファイルを保存するためのディレクトリ、および起動時に起動するためのsystemdユニッ
#!/bin/bashapt-get update && apt-get dist-upgrade -y && \apt-get install -y znc znc-dev znc-perl znc-python znc-tcl && \useradd -M -s /bin/false znc && usermod -L znc && \mkdir /opt/znc && \cat > /etc/systemd/system/znc.service <<- EOFDescription=ZNC IRC BouncerExecStart=/usr/bin/znc -d /opt/zncExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=alwaysType=forkingUser=zncWantedBy=multi-user.targetAlias=znc.serviceEOF

systemdユニットファイルは/etc/systemd/systemに直接配置されているため、起動時に自動的に実行されます。 有効にする必要はありません。

  • : インスタンスがインターネットゲートウェイが接続されたパブリックサブネットで起動されるようにして、インターネットから容易にアクセ
  • EBSボリューム:ZNC(Bouncer)パスワード、IRCサーバーパスワード、IRC会話ログは平文ファイルに保存されるため、ボリュームを暗号化することを強くお勧めします。
  • 次のポートが開いているように、それに接続する新しいセキュリティグループを作成します。
    • SSH:インスタンスを設定できます
    • TCPポート7078(実際には予約されてい: ZNCリスニングポート

が新しいElastic IPアドレスを生成し、それをインスタンスに関連付けたい場合は、その”Name”タグを意味のあるものに設定します。

ZNC

SSHを新しく作成したEC2インスタンスにインストールし、zncの初回セットアッププロセスを実行します。 以下のようにオプションを選択します。

$ znc --makeconf Checking for list of available modules... -- Global settings -- Listen on port (1025 to 65534): 7078 Listen using SSL (yes/no) : yes Verifying the listener... Unable to locate pem file: , creating it Writing Pem file ... Enabled global modules -- Admin user settings -- Username (alphanumeric): admin Enter password: Confirm password: Nick : Alternate nick : Ident : Real name (optional): Bind host (optional): Enabled user modules Set up a network? (yes/no) : no Writing config ... To connect to this ZNC you need to connect to it as your IRC server using the port that you supplied. You have to supply your login info as the IRC server password like this: user/network:pass. Try something like this in your IRC client... /server <znc_server_ip> +7078 admin:<pass> To manage settings, users and networks, point your web browser to https://<znc_server_ip>:7078/ Launch ZNC now? (yes/no) : no

これにより、設定ファイルが生成され、sshしたユーザーのホームディレクトリに保存されます(Amazonが提供するデフォルトのUbuntuサーバー AMIを使用している場合はubuntu)。 新しく作成された設定ファイルをこのディレクトリから/opt/zncに移動し、zncユーザー所有者権限を付与しましょう。

$ sudo mv ~/.znc/* /opt/znc$ rmdir ~/.znc$ sudo chown -R znc:znc /opt/znc

これでZNCを起動できます

$ sudo systemctl start znc

ZNCが正常に開始されたことを確認する

$ systemctl status znc● znc.service - ZNC IRC Bouncer Loaded: loaded (/etc/systemd/system/znc.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-07-29 13:02:07 UTC; 21min ago Process: 1181 ExecStart=/usr/bin/znc -d /opt/znc (code=exited, status=0/SUCCESS) Main PID: 1245 (znc) Tasks: 1 Memory: 10.8M CPU: 54ms CGroup: /system.slice/znc.service └─1245 /usr/bin/znc -d /opt/znc

ZNCの設定

最初の設定段階が完了しました。 次に、サインインするユーザーと、そのユーザーに関連付けるIRCネットワークを追加する必要があります。

残りの設定をバウンサーに適用するには、リッスンするように構成したポート(私の場合はポート7078)で利用できるweb構成フロントエンドに接続します。 そのため、ブラウザに次のURLを入力します。https://<bouncer_ip_address>:7078。 “Missing HTTPS certificate”エラーなどが発生した場合は、これを無視してブラウザに続行するように指示することができます。 入力したパスワードを使用して、前に作成した管理者ユーザーとしてログインします。

ZNC web frontend

ログインしたら、右側の”グローバル設定”メニューエントリをクリックして、バウンサーの全体的な構成を見ることができます。

zncは、デーモンの実行中にロードまたはアンロードできるモジュール(共有オブジェクト)のコレクションを/usr/lib/zncにインストールします。 下にスクロールすると、バウンサーの操作に影響を与えるグローバルモジュールのリストが表示されます。 私の場合、私のバウンサーが私がメンバーであるチャネルで送信されたすべてのメッセージをテキストファイルに保存したいので、私は”ログ”を有効にし

ZNCグローバルモジュール

右メニューの”ユーザーの管理”をクリックして、ユーザー設定パネルを表示します。 ユーザー名、パスワード(このパスワードはZNCで自分自身を認証するためにのみ使用され、IRCサーバーでは使用されません)、IRCの詳細、およびこのユーザーのために特にロード

ZNCユーザーの詳細

次に、このユーザーのIRCネットワークを追加できるように、下部にある”保存して続行”をクリックします。

ユーザーへのネットワークの追加

このユーザーが関連付けられるIRCネットワークの詳細を入力し、必要に応じてこのネットワークに接続するときに自動的にロードするモジュールを有効にします。 IRCサーバーでこのメソッドを使用して認証したい場合は、そのようなモジュールの1つがsaslになる可能性があります。 私はこのネットワーク上でこのモジュールを有効にします。

“このIRCネットワークのサーバー”テキストボックスに、接続するIRCサーバーの情報を次の形式で入力します

<server> <port> <irc_password>

SSL接続を示すために、ポートにプラス記号を追加します。 <irc_password>は、/NickServコマンドを介してIRCサーバーに登録するために使用したパスワードで、上記の警備員自身に認証するために設定したパスワードとは完全に別のものです。

たとえば、以前に登録されたアカウントでSSL経由でFreenode IRCネットワークに接続するには、このテキストボックスの内容は次のようになります

irc.freenode.net +6697 myNickServPassword123

それ以外の場合、それは単に可能性があります

irc.freenode.net 6667

IRCネットワークの設定

IRCパスワードがサーバーに平文で保存されていることがわかります。 私はあなたのEBSボリュームを暗号化し、自然に、あなたのバウンサーサーバーにアクセスすることができます誰に非常に緊密な制御を持っているVPSのセッ Ipの非常に小さなサブセットからの着信接続のみを許可するように、VPSセキュリティグループをロックダウンすることを推奨します。

もう一度”保存して続行”をクリックします。 あなたは今、必要に応じて、あなたが警備員にあなたをログインしたいチャンネルのリストを追加することができますが、それはまた、あなたがそれに接続するときにあなたが自分自身に参加したものを覚えています。

ZNCの完全に機能するインストールをホストするAWS VPS(Virtual Private Server)ができました。 するべき最後の事は警備員で私達のIRCの顧客を指すことである。

用心棒に接続する

私は用心棒に接続するためにirssiを使用するつもりです。 ここに私がそれを働かせるために従ったステップがあります。 あなたの走行距離は、HexChatやmIRCのような別のクライアント上で異なる場合がありますが、詳細自体はほとんど同じままにする必要があります。

用心棒への接続に使用するニックネームを指定してirssiを起動します

$ irssi -n <username>

freenodebncという新しいネットワークを作成し、バウンサーの詳細を追加します。 私はSSL経由でFreenode IRCサーバーに接続しているので、安全な接続のために公開されているポート6697を使用し、-sslフラグを渡しています。 username/freenodeは、ZNCユーザー設定パネルで作成したユーザー名とネットワークの組み合わせです。 passwordは、IRCサーバーではなく、ZNCで認証するために使用するパスワードです。

/network add freenodebnc/server add -net freenodebnc -auto -ssl <bouncer_ip> 6697 username/freenode:password

次のコマンドを実行して、これらの変更をirssi設定ファイルに保存し、バウンサーに接続します。

/save/connect freenodebnc

SASLモジュールをロードした場合(/msg *status ListModulesを実行してロードされているかどうかを確認できます)、この時点で設定する必要があります。 そのため、バウンサーに接続したら、IRCクライアントで次のコマンドを実行します。

/query *saslmechanism external plainset <NickServName> <password>

ここで、NickServNameはIRCサーバーに登録されたユーザー名であり、passwordは前述のサーバーへの認証に使用するパスワードです。

再構成されたSASLモジュールを使用してIRCネットワークに再接続します。

/msg *status jump

警備員が接続を確立するまでにはしばらく時間がかかります(特にSSL経由で接続し、SASLなどの認証メカニズムを使用している場合)が、この後、ircサーバーと 幸せなチャット!