Cryptocat custom server 설치 방법

Cryptocat custom server 설정법을 작성 합니다.

설치환경은 Ubuntu 14.04 LTS 입니다.
우선 필요한 패키지를 설치합니다.

apt-get install ejabberd nginx git

설치가 끝나면 아래 명령어로 ejabberd 설정파일을 수정합니다.

vi /etc/ejabberd/ejabberd.cfg

설정파일 내용을 아래와 같이 바꾸도록 합니다.

%% Hostname
{hosts, ["jjoon.net"]}.

%% Logging
{loglevel, 0}.

%%% ===============
%%% LISTENING PORTS

{listen, [
    {5222, ejabberd_c2s, [
        {access, c2s},
        {shaper, c2s_shaper},
        {max_stanza_size, infinite},
        starttls_required,
        {certfile, "/etc/ejabberd/ejabberd.pem"},
        {ciphers, "HIGH:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1:!aNULL"}
    ]},
    {5280, ejabberd_http, [
        http_bind, http_poll
    ]}
 ]}.

%%
%% s2s_certfile: Specify a certificate file.
%%
{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.

%%% ==============
%%% AUTHENTICATION

{auth_method, [internal, anonymous]}.
{auth_password_format, scram}.

%%% ===============
%%% TRAFFIC SHAPERS

{shaper, normal, {maxrate, 500000000}}.
{shaper, fast, {maxrate, 500000000}}.

%%% ====================
%%% ACCESS CONTROL LISTS

{acl, local, {user_regexp, ""}}.

%%% ============
%%% ACCESS RULES

{access, max_user_sessions, [{10, all}]}.
{access, max_user_offline_messages, [{5000, admin}, {100, all}]}.
{access, c2s, [{deny, blocked}, {allow, all}]}.
{access, c2s_shaper, [{none, admin}, {normal, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, announce, [{allow, admin}]}.
{access, configure, [{allow, admin}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc, [{allow, all}]}.
{access, register, [{allow, all}]}.
{registration_timeout, infinity}.

{language, "en"}.

%%% =======
%%% MODULES

{modules, [
    {mod_ping, []},
    {mod_http_bind, []},
    {mod_admin_extra, []},
    {mod_muc, [
        {host, "conference.@HOST@"},
        {access, muc},
        {history_size, 0},
        {access_create, muc},
        {access_persistent, muc_admin},
        {access_admin, muc_admin},
        {max_users, 9999},
        {default_room_options, [
            {allow_change_subj, false},
            {allow_private_messages, true},
            {allow_query_users, true},
            {allow_user_invites, false},
            {anonymous, true},
            {logging, false},
            {members_by_default, false},
            {members_only, false},
            {moderated, false},
            {password_protected, false},
            {persistent, false},
            {public, false},
            {public_list, false}
        ]}
    ]},
    {mod_register, [
        {welcome_message, {"Welcome!"}},
        {access, register}
    ]}
 ]}.

위 코드에서 jjoon.net 부분은 원하시는 이름으로 수정하시면 됩니다.
다만 보유하고 계신 도메인으로 꼭! 설정할 필요는 없습니다.
naver.com 과 같이 임의로 설정하셔도 무방합니다.

그리고 주기적으로 사용하지 않는 ejabberd 계정을 삭제하기 위해 crontab에 아래와 같이 추가합니다.

crontab -e
1 1 * * * ejabberdctl delete-old-users 1

이제 SSL키를 만들도록 하겠습니다.

cd /etc/ssl/certs
openssl req -nodes -x509 -newkey rsa:4096 -keyout key.pem -out cert.crt -days 356

이제 nginx 설정파일을 수정하도록 하겠습니다.

vi /etc/nginx/nginx.conf

해당 설정파일의 내용을 아래 내용으로 변경합니다.

worker_processes auto;
worker_rlimit_nofile 100000;
pid /var/run/nginx.pid;

events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}

http {
    include /etc/nginx/mime.types;
    sendfile on;
    tcp_nodelay on;
    tcp_nopush on;
    server_tokens off;
    access_log off;
    keepalive_timeout 20;
    client_header_timeout 20;
    client_body_timeout 20;
    reset_timedout_connection on;
    send_timeout 20;
    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    server {
        listen 80;
        listen [::]:80 default ipv6only=on;

        add_header Strict-Transport-Security max-age=31536000;
        add_header X-Frame-Options SAMEORIGIN;

        location / {
            root /var/www;
            index index.html index.htm;
        }

        location /http-bind {
            proxy_buffering off;
            proxy_pass http://127.0.0.1:5280/http-bind;
        }
    }

    # HTTPS server
    server {
        listen 443 ssl spdy;

        add_header Strict-Transport-Security max-age=31536000;
        add_header X-Frame-Options SAMEORIGIN;

        ssl on;
        ssl_certificate  /etc/ssl/certs/cert.crt;
        ssl_certificate_key  /etc/ssl/certs/key.pem;

        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DES-CBC3-SHA;
        ssl_prefer_server_ciphers on;

        location / {
            root /var/www;
            index index.html index.htm;
        }

        location /http-bind {
            proxy_buffering off;
            proxy_pass http://127.0.0.1:5280/http-bind;
        }
    }
}

끝으로 Cryptocat 코드 파일을 받도록 하겠습니다.

cd /tmp
git clone https://github.com/cryptocat/cryptocat.git
cp -r cryptocat/src/core /var/www/

이제 설정이 완료 되었고 데몬을 재시작 후 접속을 해보도록 하겠습니다.

/etc/init.d/nginx restart
/etc/init.d/ejabberd restart

웹브라우져 Add-on을 이용해 접속하셔도 되고, 설치한 웹서버에 접속하여 접속하셔도 됩니다.
단, 설치한 웹서버에 접속할 경우 꼭! https로 접속 하셔야 합니다.

이제 아래 화면과 같이 입력후 접속하시면 끝!

환경이 CentOS(아래 예시는 64bit)일 경우 아래 패키지를 설치하면 된다.

  1. nginx 설치법

    wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
    rpm -Uvh nginx-release-centos-6-0.el6.ngx.noarch.rpm
    yum install nginx
  2. ejabberd 설치법
    ejabberd 설치를 위해서는 erlang-esasl 와 libgsasl 패키지가 추가로 설치가 필요하다.

    yum install libgsasl
    wget ftp://ftp.icm.edu.pl/vol/rzm5/linux-ibiblio/distributions/smeserver/releases/8.1/smecontribs/x86_64/RPMS/erlang-esasl-0.1-5.el5.x86_64.rpm
    rpm -ivh erlang-esasl-0.1-5.el5.x86_64.rpm
    wget ftp://iglo.tilab.tuwien.ac.at/pub/repositories/el6/x86_64/epel/ejabberd-2.1.11-6.el6.x86_64.rpm
    rpm -ivh ejabberd-2.1.11-6.el6.x86_64.rpm

[참고]
https://github.com/cryptocat/cryptocat/wiki/Server-Deployment-Instructions
https://raymii.org/s/tutorials/Self_Hosted_CryptoCat_-_Secure_Self_Hosted_Multiuser_Webchat.html
http://raspberrypi.tomasgreno.cz/cryptocat-messaging-service.html

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다