Changed ejabberd to new config file syntax and added information about more interesti...
authorMax Maass <max@velcommuta.de>
Wed, 7 Jan 2015 17:16:19 +0000 (18:16 +0100)
committerMax Maass <max@velcommuta.de>
Wed, 7 Jan 2015 17:16:19 +0000 (18:16 +0100)
src/acknowledgements.tex
src/configuration/IM/ejabberd/ejabberd.cfg [deleted file]
src/configuration/IM/ejabberd/ejabberd.yml [new file with mode: 0644]
src/practical_settings/im.tex

index 38bc7be..d7a80ed 100644 (file)
@@ -17,6 +17,7 @@ Huebl, Axel \\
 Kovacic, Daniel \\
 Lenzhofer, Stefan \\
 LorĂ¼nser, Thomas \\
+Maass, Max \\
 Mehlmauer, Christian \\
 Millauer, Tobias \\
 Mirbach, Andreas \\
diff --git a/src/configuration/IM/ejabberd/ejabberd.cfg b/src/configuration/IM/ejabberd/ejabberd.cfg
deleted file mode 100644 (file)
index 6d204c3..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-%%%
-%%%               ejabberd configuration file
-%%%
-%%%'
-
-%%% The parameters used in this configuration file are explained in more detail
-%%% in the ejabberd Installation and Operation Guide.
-%%% Please consult the Guide in case of doubts, it is included with
-%%% your copy of ejabberd, and is also available online at
-%%% http://www.process-one.net/en/ejabberd/docs/
-
-%%% This configuration file contains Erlang terms.
-%%% In case you want to understand the syntax, here are the concepts:
-%%%
-%%%  - The character to comment a line is %
-%%%
-%%%  - Each term ends in a dot, for example:
-%%%      override_global.
-%%%
-%%%  - A tuple has a fixed definition, its elements are
-%%%    enclosed in {}, and separated with commas:
-%%%      {loglevel, 4}.
-%%%
-%%%  - A list can have as many elements as you want,
-%%%    and is enclosed in [], for example:
-%%%      [http_poll, web_admin, tls]
-%%%
-%%%  - A keyword of ejabberd is a word in lowercase.
-%%%    Strings are enclosed in "" and can contain spaces, dots, ...
-%%%      {language, "en"}.
-%%%      {ldap_rootdn, "dc=example,dc=com"}.
-%%%
-%%%  - This term includes a tuple, a keyword, a list, and two strings:
-%%%      {hosts, ["jabber.example.net", "im.example.com"]}.
-%%%
-
-
-%%%.   =======================
-%%%'   OVERRIDE STORED OPTIONS
-
-%%
-%% Override the old values stored in the database.
-%%
-
-%%
-%% Override global options (shared by all ejabberd nodes in a cluster).
-%%
-%%override_global.
-
-%%
-%% Override local options (specific for this particular ejabberd node).
-%%
-%%override_local.
-
-%%
-%% Remove the Access Control Lists before new ones are added.
-%%
-%%override_acls.
-
-
-%%%.   =========
-%%%'   DEBUGGING
-
-%%
-%% loglevel: Verbosity of log files generated by ejabberd.
-%% 0: No ejabberd log at all (not recommended)
-%% 1: Critical
-%% 2: Error
-%% 3: Warning
-%% 4: Info
-%% 5: Debug
-%%
-{loglevel, 4}.
-
-%%
-%% watchdog_admins: Only useful for developers: if an ejabberd process
-%% consumes a lot of memory, send live notifications to these XMPP
-%% accounts.
-%%
-%%{watchdog_admins, ["bob@example.com"]}.
-
-
-%%%.   ================
-%%%'   SERVED HOSTNAMES
-
-%%
-%% hosts: Domains served by ejabberd.
-%% You can define one or several, for example:
-%% {hosts, ["example.net", "example.com", "example.org"]}.
-%%
-{hosts, ["localhost"]}.
-
-%%
-%% route_subdomains: Delegate subdomains to other XMPP servers.
-%% For example, if this ejabberd serves example.org and you want
-%% to allow communication with an XMPP server called im.example.org.
-%%
-%%{route_subdomains, s2s}.
-
-
-%%%.   ===============
-%%%'   LISTENING PORTS
-
-%%
-%% listen: The ports ejabberd will listen on, which service each is handled
-%% by and what options to start it with.
-%%
-{listen,
- [
-
-  {5222, ejabberd_c2s, [
-
-                       %%
-                       %% If TLS is compiled in and you installed a SSL
-                       %% certificate, specify the full path to the
-                       %% file and uncomment this line:
-                       %%
-                       %%{certfile, "/path/to/ssl.pem"}, starttls,
-
-                       {access, c2s},
-                       {shaper, c2s_shaper},
-                       {max_stanza_size, 65536},
-                       starttls,
-                       starttls_required, 
-                       {certfile, "/etc/ejabberd/ejabberd.pem"}
-               ]},
-
-  %%
-  %% To enable the old SSL connection method on port 5223:
-  %%
-  %%{5223, ejabberd_c2s, [
-  %%                   {access, c2s},
-  %%                   {shaper, c2s_shaper},
-  %%                   {certfile, "/path/to/ssl.pem"}, tls,
-  %%                   {max_stanza_size, 65536}
-  %%                  ]},
-
-  {5269, ejabberd_s2s_in, [
-                          {shaper, s2s_shaper},
-                          {max_stanza_size, 131072}
-                         ]},
-
-  %%
-  %% ejabberd_service: Interact with external components (transports, ...)
-  %%
-  %%{8888, ejabberd_service, [
-  %%                       {access, all},
-  %%                       {shaper_rule, fast},
-  %%                       {ip, {127, 0, 0, 1}},
-  %%                       {hosts, ["icq.example.org", "sms.example.org"],
-  %%                        [{password, "secret"}]
-  %%                       }
-  %%                      ]},
-
-  %%
-  %% ejabberd_stun: Handles STUN Binding requests
-  %%
-  %%{{3478, udp}, ejabberd_stun, []},
-
-  {5280, ejabberd_http, [
-                        %%{request_handlers,
-                        %% [
-                        %%  {["pub", "archive"], mod_http_fileserver}
-                        %% ]},
-                        captcha,
-                        http_bind,
-                        http_poll,
-                        %%register,
-                        web_admin
-                       ]}
-
- ]}.
-
-%%
-%% s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
-%% Allowed values are: false optional required required_trusted
-%% You must specify a certificate file.
-%%
-{s2s_use_starttls, required_trusted}.
-
-%%
-%% s2s_certfile: Specify a certificate file.
-%%
-{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
-
-%%
-%% domain_certfile: Specify a different certificate for each served hostname.
-%%
-%%{domain_certfile, "example.org", "/path/to/example_org.pem"}.
-%%{domain_certfile, "example.com", "/path/to/example_com.pem"}.
-
-%%
-%% S2S whitelist or blacklist
-%%
-%% Default s2s policy for undefined hosts.
-%%
-%%{s2s_default_policy, allow}.
-
-%%
-%% Allow or deny communication with specific servers.
-%%
-%%{{s2s_host, "goodhost.org"}, allow}.
-%%{{s2s_host, "badhost.org"}, deny}.
-
-%%
-%% Outgoing S2S options
-%%
-%% Preferred address families (which to try first) and connect timeout
-%% in milliseconds.
-%%
-%%{outgoing_s2s_options, [ipv4, ipv6], 10000}.
-
-
-%%%.   ==============
-%%%'   AUTHENTICATION
-
-%%
-%% auth_method: Method used to authenticate the users.
-%% The default method is the internal.
-%% If you want to use a different method,
-%% comment this line and enable the correct ones.
-%%
-{auth_method, internal}.
-%%
-%% Store the plain passwords or hashed for SCRAM:
-%%{auth_password_format, plain}.
-%%{auth_password_format, scram}.
-%%
-%% Define the FQDN if ejabberd doesn't detect it:
-%%{fqdn, "server3.example.com"}.
-
-%%
-%% Authentication using external script
-%% Make sure the script is executable by ejabberd.
-%%
-%%{auth_method, external}.
-%%{extauth_program, "/path/to/authentication/script"}.
-
-%%
-%% Authentication using ODBC
-%% Remember to setup a database in the next section.
-%%
-%%{auth_method, odbc}.
-
-%%
-%% Authentication using PAM
-%%
-%%{auth_method, pam}.
-%%{pam_service, "pamservicename"}.
-
-%%
-%% Authentication using LDAP
-%%
-%%{auth_method, ldap}.
-%%
-%% List of LDAP servers:
-%%{ldap_servers, ["localhost"]}.
-%%
-%% Encryption of connection to LDAP servers:
-%%{ldap_encrypt, none}.
-%%{ldap_encrypt, tls}.
-%%
-%% Port to connect to on LDAP servers:
-%%{ldap_port, 389}.
-%%{ldap_port, 636}.
-%%
-%% LDAP manager:
-%%{ldap_rootdn, "dc=example,dc=com"}.
-%%
-%% Password of LDAP manager:
-%%{ldap_password, "******"}.
-%%
-%% Search base of LDAP directory:
-%%{ldap_base, "dc=example,dc=com"}.
-%%
-%% LDAP attribute that holds user ID:
-%%{ldap_uids, [{"mail", "%u@mail.example.org"}]}.
-%%
-%% LDAP filter:
-%%{ldap_filter, "(objectClass=shadowAccount)"}.
-
-%%
-%% Anonymous login support:
-%%   auth_method: anonymous
-%%   anonymous_protocol: sasl_anon | login_anon | both
-%%   allow_multiple_connections: true | false
-%%
-%%{host_config, "public.example.org", [{auth_method, anonymous},
-%%                                     {allow_multiple_connections, false},
-%%                                     {anonymous_protocol, sasl_anon}]}.
-%%
-%% To use both anonymous and internal authentication:
-%%
-%%{host_config, "public.example.org", [{auth_method, [internal, anonymous]}]}.
-
-
-%%%.   ==============
-%%%'   DATABASE SETUP
-
-%% ejabberd by default uses the internal Mnesia database,
-%% so you do not necessarily need this section.
-%% This section provides configuration examples in case
-%% you want to use other database backends.
-%% Please consult the ejabberd Guide for details on database creation.
-
-%%
-%% MySQL server:
-%%
-%%{odbc_server, {mysql, "server", "database", "username", "password"}}.
-%%
-%% If you want to specify the port:
-%%{odbc_server, {mysql, "server", 1234, "database", "username", "password"}}.
-
-%%
-%% PostgreSQL server:
-%%
-%%{odbc_server, {pgsql, "server", "database", "username", "password"}}.
-%%
-%% If you want to specify the port:
-%%{odbc_server, {pgsql, "server", 1234, "database", "username", "password"}}.
-%%
-%% If you use PostgreSQL, have a large database, and need a
-%% faster but inexact replacement for "select count(*) from users"
-%%
-%%{pgsql_users_number_estimate, true}.
-
-%%
-%% ODBC compatible or MSSQL server:
-%%
-%%{odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}.
-
-%%
-%% Number of connections to open to the database for each virtual host
-%%
-%%{odbc_pool_size, 10}.
-
-%%
-%% Interval to make a dummy SQL request to keep the connections to the
-%% database alive. Specify in seconds: for example 28800 means 8 hours
-%%
-%%{odbc_keepalive_interval, undefined}.
-
-
-%%%.   ===============
-%%%'   TRAFFIC SHAPERS
-
-%%
-%% The "normal" shaper limits traffic speed to 1000 B/s
-%%
-{shaper, normal, {maxrate, 1000}}.
-
-%%
-%% The "fast" shaper limits traffic speed to 50000 B/s
-%%
-{shaper, fast, {maxrate, 50000}}.
-
-%%
-%% This option specifies the maximum number of elements in the queue
-%% of the FSM. Refer to the documentation for details.
-%%
-{max_fsm_queue, 1000}.
-
-
-%%%.   ====================
-%%%'   ACCESS CONTROL LISTS
-
-%%
-%% The 'admin' ACL grants administrative privileges to XMPP accounts.
-%% You can put here as many accounts as you want.
-%%
-%%{acl, admin, {user, "aleksey", "localhost"}}.
-%%{acl, admin, {user, "ermine", "example.org"}}.
-
-%%
-%% Blocked users
-%%
-%%{acl, blocked, {user, "baduser", "example.org"}}.
-%%{acl, blocked, {user, "test"}}.
-
-%%
-%% Local users: don't modify this line.
-%%
-{acl, local, {user_regexp, ""}}.
-
-%%
-%% More examples of ACLs
-%%
-%%{acl, jabberorg, {server, "jabber.org"}}.
-%%{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
-%%{acl, test, {user_regexp, "^test"}}.
-%%{acl, test, {user_glob, "test*"}}.
-
-%%
-%% Define specific ACLs in a virtual host.
-%%
-%%{host_config, "localhost",
-%% [
-%%  {acl, admin, {user, "bob-local", "localhost"}}
-%% ]
-%%}.
-
-
-%%%.   ============
-%%%'   ACCESS RULES
-
-%% Maximum number of simultaneous sessions allowed for a single user:
-{access, max_user_sessions, [{10, all}]}.
-
-%% Maximum number of offline messages that users can have:
-{access, max_user_offline_messages, [{5000, admin}, {100, all}]}.
-
-%% This rule allows access only for local users:
-{access, local, [{allow, local}]}.
-
-%% Only non-blocked users can use c2s connections:
-{access, c2s, [{deny, blocked},
-              {allow, all}]}.
-
-%% For C2S connections, all users except admins use the "normal" shaper
-{access, c2s_shaper, [{none, admin},
-                     {normal, all}]}.
-
-%% All S2S connections use the "fast" shaper
-{access, s2s_shaper, [{fast, all}]}.
-
-%% Only admins can send announcement messages:
-{access, announce, [{allow, admin}]}.
-
-%% Only admins can use the configuration interface:
-{access, configure, [{allow, admin}]}.
-
-%% Admins of this server are also admins of the MUC service:
-{access, muc_admin, [{allow, admin}]}.
-
-%% Only accounts of the local ejabberd server can create rooms:
-{access, muc_create, [{allow, local}]}.
-
-%% All users are allowed to use the MUC service:
-{access, muc, [{allow, all}]}.
-
-%% Only accounts on the local ejabberd server can create Pubsub nodes:
-{access, pubsub_createnode, [{allow, local}]}.
-
-%% In-band registration allows registration of any possible username.
-%% To disable in-band registration, replace 'allow' with 'deny'.
-{access, register, [{allow, all}]}.
-
-%% By default the frequency of account registrations from the same IP
-%% is limited to 1 account every 10 minutes. To disable, specify: infinity
-%%{registration_timeout, 600}.
-
-%%
-%% Define specific Access Rules in a virtual host.
-%%
-%%{host_config, "localhost",
-%% [
-%%  {access, c2s, [{allow, admin}, {deny, all}]},
-%%  {access, register, [{deny, all}]}
-%% ]
-%%}.
-
-
-%%%.   ================
-%%%'   DEFAULT LANGUAGE
-
-%%
-%% language: Default language used for server messages.
-%%
-{language, "en"}.
-
-%%
-%% Set a different default language in a virtual host.
-%%
-%%{host_config, "localhost",
-%% [{language, "ru"}]
-%%}.
-
-
-%%%.   =======
-%%%'   CAPTCHA
-
-%%
-%% Full path to a script that generates the image.
-%%
-%%{captcha_cmd, "/lib/ejabberd/priv/bin/captcha.sh"}.
-
-%%
-%% Host for the URL and port where ejabberd listens for CAPTCHA requests.
-%%
-%%{captcha_host, "example.org:5280"}.
-
-%%
-%% Limit CAPTCHA calls per minute for JID/IP to avoid DoS.
-%%
-%%{captcha_limit, 5}.
-
-%%%.   =======
-%%%'   MODULES
-
-%%
-%% Modules enabled in all ejabberd virtual hosts.
-%%
-{modules,
- [
-  {mod_adhoc,    []},
-  {mod_announce, [{access, announce}]}, % recommends mod_adhoc
-  {mod_blocking,[]}, % requires mod_privacy
-  {mod_caps,     []},
-  {mod_configure,[]}, % requires mod_adhoc
-  {mod_disco,    []},
-  %%{mod_echo,   [{host, "echo.localhost"}]},
-  {mod_irc,      []},
-  {mod_http_bind, []},
-  %%{mod_http_fileserver, [
-  %%                       {docroot, "/var/www"},
-  %%                       {accesslog, "/var/log/ejabberd/access.log"}
-  %%                      ]},
-  {mod_last,     []},
-  {mod_muc,      [
-                 %%{host, "conference.@HOST@"},
-                 {access, muc},
-                 {access_create, muc_create},
-                 {access_persistent, muc_create},
-                 {access_admin, muc_admin}
-                ]},
-  %%{mod_muc_log,[]},
-  {mod_offline,  [{access_max_user_messages, max_user_offline_messages}]},
-  {mod_ping,     []},
-  %%{mod_pres_counter,[{count, 5}, {interval, 60}]},
-  {mod_privacy,  []},
-  {mod_private,  []},
-  %%{mod_proxy65,[]},
-  {mod_pubsub,   [
-                 {access_createnode, pubsub_createnode},
-                 {ignore_pep_from_offline, true}, % reduces resource comsumption, but XEP incompliant
-                 %%{ignore_pep_from_offline, false},  % XEP compliant, but increases resource comsumption
-                 {last_item_cache, false},
-                 {plugins, ["flat", "hometree", "pep"]}  % pep requires mod_caps
-                ]},
-  {mod_register, [
-                 %%
-                 %% Protect In-Band account registrations with CAPTCHA.
-                 %%
-                 %%{captcha_protected, true},
-
-                 %%
-                 %% Set the minimum informational entropy for passwords.
-                 %%
-                 %%{password_strength, 32},
-
-                 %%
-                 %% After successful registration, the user receives
-                 %% a message with this subject and body.
-                 %%
-                 {welcome_message, {"Welcome!",
-                                    "Hi.\nWelcome to this XMPP server."}},
-
-                 %%
-                 %% When a user registers, send a notification to
-                 %% these XMPP accounts.
-                 %%
-                 %%{registration_watchers, ["admin1@example.org"]},
-
-                 %%
-                 %% Only clients in the server machine can register accounts
-                 %%
-                 {ip_access, [{allow, "127.0.0.0/8"},
-                              {deny, "0.0.0.0/0"}]},
-
-                 %%
-                 %% Local c2s or remote s2s users cannot register accounts
-                 %%
-                 %%{access_from, deny},
-
-                 {access, register}
-                ]},
-  %%{mod_register_web, [
-                 %%
-                 %% When a user registers, send a notification to
-                 %% these XMPP accounts.
-                 %%
-                 %%{registration_watchers, ["admin1@example.org"]}
-  %%            ]},
-  {mod_roster,   []},
-  %%{mod_service_log,[]},
-  {mod_shared_roster,[]},
-  {mod_stats,    []},
-  {mod_time,     []},
-  {mod_vcard,    []},
-  {mod_version,  []}
- ]}.
-
-%%
-%% Enable modules with custom options in a specific virtual host
-%%
-%%{host_config, "localhost",
-%% [{{add, modules},
-%%   [
-%%    {mod_echo, [{host, "mirror.localhost"}]}
-%%   ]
-%%  }
-%% ]}.
-
-
-%%%.
-%%%'
-
-%%% $Id$
-
-%%% Local Variables:
-%%% mode: erlang
-%%% End:
-%%% vim: set filetype=erlang tabstop=8 foldmarker=%%%',%%%. foldmethod=marker:
diff --git a/src/configuration/IM/ejabberd/ejabberd.yml b/src/configuration/IM/ejabberd/ejabberd.yml
new file mode 100644 (file)
index 0000000..c0cb77b
--- /dev/null
@@ -0,0 +1,688 @@
+###
+###               ejabberd configuration file
+###
+###
+
+### The parameters used in this configuration file are explained in more detail
+### in the ejabberd Installation and Operation Guide.
+### Please consult the Guide in case of doubts, it is included with
+### your copy of ejabberd, and is also available online at
+### http://www.process-one.net/en/ejabberd/docs/
+
+### The configuration file is written in YAML.
+### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
+### However, ejabberd treats different literals as different types:
+###
+### - unquoted or single-quoted strings. They are called "atoms".
+###   Example: dog, 'Jupiter', '3.14159', YELLOW
+###
+### - numeric literals. Example: 3, -45.0, .0
+###
+### - quoted or folded strings.
+###   Examples of quoted string: "Lizzard", "orange".
+###   Example of folded string:
+###   > Art thou not Romeo,
+###     and a Montague?
+
+###   =======
+###   LOGGING
+
+##
+## loglevel: Verbosity of log files generated by ejabberd.
+## 0: No ejabberd log at all (not recommended)
+## 1: Critical
+## 2: Error
+## 3: Warning
+## 4: Info
+## 5: Debug
+##
+loglevel: 3
+
+##
+## rotation: Describe how to rotate logs. Either size and/or date can trigger
+## log rotation. Setting count to N keeps N rotated logs. Setting count to 0
+## does not disable rotation, it instead rotates the file and keeps no previous
+## versions around. Setting size to X rotate log when it reaches X bytes.
+## To disable rotation set the size to 0 and the date to ""
+## Date syntax is taken from the syntax newsyslog uses in newsyslog.conf.
+## Some examples:
+##  $D0     rotate every night at midnight
+##  $D23    rotate every day at 23:00 hr
+##  $W0D23  rotate every week on Sunday at 23:00 hr
+##  $W5D16  rotate every week on Friday at 16:00 hr
+##  $M1D0   rotate on the first day of every month at midnight
+##  $M5D6   rotate on every 5th day of the month at 6:00 hr
+##
+log_rotate_size: 10485760
+log_rotate_date: ""
+log_rotate_count: 1
+
+##
+## overload protection: If you want to limit the number of messages per second
+## allowed from error_logger, which is a good idea if you want to avoid a flood
+## of messages when system is overloaded, you can set a limit.
+## 100 is ejabberd's default.
+log_rate_limit: 100
+
+##
+## watchdog_admins: Only useful for developers: if an ejabberd process
+## consumes a lot of memory, send live notifications to these XMPP
+## accounts.
+##
+## watchdog_admins:
+##   - "bob@example.com"
+
+
+###   ================
+###   SERVED HOSTNAMES
+
+##
+## hosts: Domains served by ejabberd.
+## You can define one or several, for example:
+## hosts: 
+##   - "example.net"
+##   - "example.com"
+##   - "example.org"
+##
+hosts:
+  - "localhost"
+
+##
+## route_subdomains: Delegate subdomains to other XMPP servers.
+## For example, if this ejabberd serves example.org and you want
+## to allow communication with an XMPP server called im.example.org.
+##
+## route_subdomains: s2s
+
+###   ===============
+###   LISTENING PORTS
+
+##
+## listen: The ports ejabberd will listen on, which service each is handled
+## by and what options to start it with.
+##
+listen: 
+  - 
+    port: 5222
+    module: ejabberd_c2s
+    ##
+    ## If TLS is compiled in and you installed a SSL
+    ## certificate, specify the full path to the
+    ## file and uncomment these lines:
+    ##
+    certfile: "/path/to/ssl.pem"
+    starttls: true
+    ##
+    ## To enforce TLS encryption for client connections,
+    ## use this instead of the "starttls" option:
+    ##
+    starttls_required: true
+    ##
+    ## Custom OpenSSL options
+    ##
+    protocol_options:
+      # Disable SSLv3 because it is insecure
+      - "no_sslv3"
+      # Disable TLSv1 to prevent downgrade attacks
+      - "no_tlsv1"
+      # Jabber clients tend to have bad cipher orders, see
+      # https://blog.thijsalkema.de/me/blog//blog/2013/09/02/the-state-of-tls-on-xmpp-3/
+      # In order to force them to use the best available setting, which is not
+      # always at the top of their list, we enforce the server cipher order
+      # using the setting "cipher_server_preference"
+      # The cipher order is defined using the "ciphers" option (see below)
+      - "cipher_server_preference"
+    max_stanza_size: 65536
+    shaper: c2s_shaper
+    access: c2s
+    # Set the cipher order of the server, in OpenSSL syntax
+    ciphers: "HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL:!MD5:!RC4"
+    # TODO Is this cipher order fine?
+  - 
+    port: 5269
+    module: ejabberd_s2s_in
+  ##
+  ## ejabberd_service: Interact with external components (transports, ...)
+  ##
+  ## - 
+  ##   port: 8888
+  ##   module: ejabberd_service
+  ##   access: all
+  ##   shaper_rule: fast
+  ##   ip: "127.0.0.1"
+  ##   hosts:
+  ##     "icq.example.org":
+  ##       password: "secret"
+  ##     "sms.example.org":
+  ##       password: "secret"
+
+  ##
+  ## ejabberd_stun: Handles STUN Binding requests
+  ##
+  ## - 
+  ##   port: 3478
+  ##   transport: udp
+  ##   module: ejabberd_stun
+
+  ##
+  ## To handle XML-RPC requests that provide admin credentials:
+  ##
+  ## - 
+  ##   port: 4560
+  ##   module: ejabberd_xmlrpc
+  - 
+    port: 5280
+    module: ejabberd_http
+    ## request_handlers:
+    ##   "/pub/archive": mod_http_fileserver
+    web_admin: true
+    http_poll: true
+    http_bind: true
+    ## register: true
+    captcha: true
+    # Enable SSL for web admin
+    certfile: "/path/to/ssl.pem"
+    tls: true
+
+##
+## s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
+## Allowed values are: false optional required required_trusted
+## You must specify a certificate file.
+##
+s2s_use_starttls: required_trusted
+# This forbids S2S-connections to servers with selfsigned certs. If you need
+# that capability, change this setting to "required" to require encryption,
+# but not authentication
+
+##
+## s2s_certfile: Specify a certificate file.
+##
+s2s_certfile: "/path/to/ssl.pem"
+
+## Custom OpenSSL options
+##
+s2s_protocol_options:
+  - "no_sslv3"
+  - "no_tlsv1"
+  - "cipher_server_preference"
+  # Again, prefer our known good cipher ordering to the potentially bad one
+  # of the other server
+
+s2s_ciphers: "HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL:!MD5:!RC4"
+# TODO Is this cipher order fine?
+
+
+##
+## domain_certfile: Specify a different certificate for each served hostname.
+##
+## host_config:
+##   "example.org":
+##     domain_certfile: "/path/to/example_org.pem"
+##   "example.com":
+##     domain_certfile: "/path/to/example_com.pem"
+
+##
+## S2S whitelist or blacklist
+##
+## Default s2s policy for undefined hosts.
+##
+## s2s_access: s2s
+
+##
+## Outgoing S2S options
+##
+## Preferred address families (which to try first) and connect timeout
+## in milliseconds.
+##
+## outgoing_s2s_families:
+##   - ipv4
+##   - ipv6
+## outgoing_s2s_timeout: 10000
+
+###   ==============
+###   AUTHENTICATION
+
+##
+## auth_method: Method used to authenticate the users.
+## The default method is the internal.
+## If you want to use a different method,
+## comment this line and enable the correct ones.
+##
+auth_method: internal
+
+##
+## Store the plain passwords or hashed for SCRAM:
+## auth_password_format: plain
+auth_password_format: scram
+# Do not store passwords in plain text.
+
+##
+## Define the FQDN if ejabberd doesn't detect it:
+## fqdn: "server3.example.com"
+
+##
+## Authentication using external script
+## Make sure the script is executable by ejabberd.
+##
+## auth_method: external
+## extauth_program: "/path/to/authentication/script"
+
+##
+## Authentication using ODBC
+## Remember to setup a database in the next section.
+##
+## auth_method: odbc
+
+##
+## Authentication using PAM
+##
+## auth_method: pam
+## pam_service: "pamservicename"
+
+##
+## Authentication using LDAP
+##
+## auth_method: ldap
+##
+## List of LDAP servers:
+## ldap_servers:
+##   - "localhost"
+##
+## Encryption of connection to LDAP servers:
+## ldap_encrypt: none
+## ldap_encrypt: tls
+##
+## Port to connect to on LDAP servers:
+## ldap_port: 389
+## ldap_port: 636
+##
+## LDAP manager:
+## ldap_rootdn: "dc=example,dc=com"
+##
+## Password of LDAP manager:
+## ldap_password: "******"
+##
+## Search base of LDAP directory:
+## ldap_base: "dc=example,dc=com"
+##
+## LDAP attribute that holds user ID:
+## ldap_uids:
+##   - "mail": "%u@mail.example.org"
+##
+## LDAP filter:
+## ldap_filter: "(objectClass=shadowAccount)"
+
+##
+## Anonymous login support:
+##   auth_method: anonymous
+##   anonymous_protocol: sasl_anon | login_anon | both
+##   allow_multiple_connections: true | false
+##
+## host_config:
+##   "public.example.org":
+##     auth_method: anonymous
+##     allow_multiple_connections: false
+##     anonymous_protocol: sasl_anon
+##
+## To use both anonymous and internal authentication:
+##
+## host_config:
+##   "public.example.org":
+##     auth_method:
+##       - internal
+##       - anonymous
+
+###   ==============
+###   DATABASE SETUP
+
+## ejabberd by default uses the internal Mnesia database,
+## so you do not necessarily need this section.
+## This section provides configuration examples in case
+## you want to use other database backends.
+## Please consult the ejabberd Guide for details on database creation.
+
+##
+## MySQL server:
+##
+## odbc_type: mysql
+## odbc_server: "server"
+## odbc_database: "database"
+## odbc_username: "username"
+## odbc_password: "password"
+##
+## If you want to specify the port:
+## odbc_port: 1234
+
+##
+## PostgreSQL server:
+##
+## odbc_type: pgsql
+## odbc_server: "server"
+## odbc_database: "database"
+## odbc_username: "username"
+## odbc_password: "password"
+##
+## If you want to specify the port:
+## odbc_port: 1234
+##
+## If you use PostgreSQL, have a large database, and need a
+## faster but inexact replacement for "select count(*) from users"
+##
+## pgsql_users_number_estimate: true
+
+##
+## ODBC compatible or MSSQL server:
+##
+## odbc_type: odbc
+## odbc_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
+
+##
+## Number of connections to open to the database for each virtual host
+##
+## odbc_pool_size: 10
+
+##
+## Interval to make a dummy SQL request to keep the connections to the
+## database alive. Specify in seconds: for example 28800 means 8 hours
+##
+## odbc_keepalive_interval: undefined
+
+###   ===============
+###   TRAFFIC SHAPERS
+
+shaper:
+  ##
+  ## The "normal" shaper limits traffic speed to 1000 B/s
+  ##
+  normal: 1000
+
+  ##
+  ## The "fast" shaper limits traffic speed to 50000 B/s
+  ##
+  fast: 50000
+
+##
+## This option specifies the maximum number of elements in the queue
+## of the FSM. Refer to the documentation for details.
+##
+max_fsm_queue: 1000
+
+###.   ====================
+###'   ACCESS CONTROL LISTS
+acl:
+  ##
+  ## The 'admin' ACL grants administrative privileges to XMPP accounts.
+  ## You can put here as many accounts as you want.
+  ##
+  ## admin:
+  ##   user:
+  ##     - "aleksey": "localhost"
+  ##     - "ermine": "example.org"
+  ##
+  ## Blocked users
+  ##
+  ## blocked:
+  ##   user:
+  ##     - "baduser": "example.org"
+  ##     - "test"
+
+  ## Local users: don't modify this.
+  ##
+  local: 
+    user_regexp: ""
+
+  ##
+  ## More examples of ACLs
+  ##
+  ## jabberorg:
+  ##   server:
+  ##     - "jabber.org"
+  ## aleksey:
+  ##   user:
+  ##     - "aleksey": "jabber.ru"
+  ## test:
+  ##   user_regexp: "^test"
+  ##   user_glob: "test*"
+
+  ##
+  ## Loopback network
+  ##
+  loopback:
+    ip:
+      - "127.0.0.0/8"
+
+  ##
+  ## Bad XMPP servers
+  ##
+  ## bad_servers:
+  ##   server:
+  ##     - "xmpp.zombie.org"
+  ##     - "xmpp.spam.com"
+
+##
+## Define specific ACLs in a virtual host.
+##
+## host_config:
+##   "localhost":
+##     acl:
+##       admin:
+##         user:
+##           - "bob-local": "localhost"
+
+###   ============
+###   ACCESS RULES
+access:
+  ## Maximum number of simultaneous sessions allowed for a single user:
+  max_user_sessions: 
+    all: 10
+  ## Maximum number of offline messages that users can have:
+  max_user_offline_messages: 
+    admin: 5000
+    all: 100
+  ## This rule allows access only for local users:
+  local: 
+    local: allow
+  ## Only non-blocked users can use c2s connections:
+  c2s: 
+    blocked: deny
+    all: allow
+  ## For C2S connections, all users except admins use the "normal" shaper
+  c2s_shaper: 
+    admin: none
+    all: normal
+  ## All S2S connections use the "fast" shaper
+  s2s_shaper: 
+    all: fast
+  ## Only admins can send announcement messages:
+  announce: 
+    admin: allow
+  ## Only admins can use the configuration interface:
+  configure: 
+    admin: allow
+  ## Admins of this server are also admins of the MUC service:
+  muc_admin: 
+    admin: allow
+  ## Only accounts of the local ejabberd server can create rooms:
+  muc_create: 
+    local: allow
+  ## All users are allowed to use the MUC service:
+  muc: 
+    all: allow
+  ## Only accounts on the local ejabberd server can create Pubsub nodes:
+  pubsub_createnode: 
+    local: allow
+  ## In-band registration allows registration of any possible username.
+  ## To disable in-band registration, replace 'allow' with 'deny'.
+  register: 
+    all: allow
+  # TODO: If you are running a private server, change this to "deny"
+  # You will still be able to manually register new users
+
+  ## Only allow to register from localhost
+  trusted_network: 
+    loopback: allow
+  ## Do not establish S2S connections with bad servers
+  ## s2s: 
+  ##   bad_servers: deny
+  ##   all: allow
+
+## By default the frequency of account registrations from the same IP
+## is limited to 1 account every 10 minutes. To disable, specify: infinity
+## registration_timeout: 600
+
+##
+## Define specific Access Rules in a virtual host.
+##
+## host_config:
+##   "localhost":
+##     access:
+##       c2s:
+##         admin: allow
+##         all: deny
+##       register:
+##         all: deny
+
+###   ================
+###   DEFAULT LANGUAGE
+
+##
+## language: Default language used for server messages.
+##
+language: "en"
+
+##
+## Set a different default language in a virtual host.
+##
+## host_config:
+##   "localhost":
+##     language: "ru"
+
+###   =======
+###   CAPTCHA
+
+##
+## Full path to a script that generates the image.
+##
+## captcha_cmd: "/lib/ejabberd/priv/bin/captcha.sh"
+
+##
+## Host for the URL and port where ejabberd listens for CAPTCHA requests.
+##
+## captcha_host: "example.org:5280"
+
+##
+## Limit CAPTCHA calls per minute for JID/IP to avoid DoS.
+##
+## captcha_limit: 5
+
+###   =======
+###   MODULES
+
+##
+## Modules enabled in all ejabberd virtual hosts.
+##
+modules: 
+  mod_adhoc: {}
+  mod_announce: # recommends mod_adhoc
+    access: announce
+  mod_blocking: {} # requires mod_privacy
+  mod_caps: {}
+  mod_carboncopy: {}
+  mod_client_state:
+    drop_chat_states: true
+    queue_presence: false
+  mod_configure: {} # requires mod_adhoc
+  mod_disco: {}
+  ## mod_echo: {}
+  mod_irc: {}
+  mod_http_bind: {}
+  ## mod_http_fileserver:
+  ##   docroot: "/var/www"
+  ##   accesslog: "/var/log/ejabberd/access.log"
+  mod_last: {}
+  mod_muc: 
+    ## host: "conference.@HOST@"
+    access: muc
+    access_create: muc_create
+    access_persistent: muc_create
+    access_admin: muc_admin
+  ## mod_muc_log: {}
+  mod_offline: 
+    access_max_user_messages: max_user_offline_messages
+  mod_ping: {}
+  ## mod_pres_counter:
+  ##   count: 5
+  ##   interval: 60
+  mod_privacy: {}
+  mod_private: {}
+  ## mod_proxy65: {}
+  mod_pubsub: 
+    access_createnode: pubsub_createnode
+    ## reduces resource comsumption, but XEP incompliant
+    ignore_pep_from_offline: true
+    ## XEP compliant, but increases resource comsumption
+    ## ignore_pep_from_offline: false
+    last_item_cache: false
+    plugins: 
+      - "flat"
+      - "hometree"
+      - "pep" # pep requires mod_caps
+  mod_register: 
+    ##
+    ## Protect In-Band account registrations with CAPTCHA.
+    ##
+    ## captcha_protected: true
+
+    ##
+    ## Set the minimum informational entropy for passwords.
+    ##
+    ## password_strength: 32
+
+    ##
+    ## After successful registration, the user receives
+    ## a message with this subject and body.
+    ##
+    welcome_message: 
+      subject: "Welcome!"
+      body: |-
+        Hi.
+        Welcome to this XMPP server.
+
+    ##
+    ## When a user registers, send a notification to
+    ## these XMPP accounts.
+    ##
+    ## registration_watchers:
+    ##   - "admin1@example.org"
+
+    ##
+    ## Only clients in the server machine can register accounts
+    ##
+    ip_access: trusted_network
+
+    ##
+    ## Local c2s or remote s2s users cannot register accounts
+    ##
+    ## access_from: deny
+
+    access: register
+  mod_roster: {}
+  mod_shared_roster: {}
+  mod_stats: {}
+  mod_time: {}
+  mod_vcard: {}
+  mod_version: {}
+
+##
+## Enable modules with custom options in a specific virtual host
+##
+## host_config:
+##   "localhost":
+##     modules:
+##       mod_echo:
+##         host: "mirror.localhost"
+
+### Local Variables:
+### mode: yaml
+### End:
+### vim: set filetype=yaml tabstop=8
index 0436d8c..543b30c 100644 (file)
@@ -31,30 +31,46 @@ The following configuration is suggested to disable SSLv2 and SSLv3 and require
 
 \subsubsection{Tested with Versions}
 \begin{itemize*}
-  \item Debian Wheezy 2.1.10-4+deb7u1
+  \item 13.6 - 14.12
 \end{itemize*}
 
 \subsubsection{Settings}
 ejabberd is one of the popular Jabber servers. In order to be compliant
 with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
 
-\configfile{ejabberd.cfg}{108-109,111-111,120-126,172-172,179-179,184-184}{%
+\configfile{ejabberd.yml}{104-107,113-113,114-114,119-119,123-123,125-125,127-127,135-137,141-143,192-192,200-200,204-206}{%
   TLS setup for ejabberd}
 % 
 \subsubsection{Additional settings}
-Older versions of ejabberd ($ < $ 2.0.0) need to be patched\footnote{\url{http://hyperstruct.net/2007/06/20/installing-the-startcom-ssl-certificate-in-ejabberd/}} to be able to parse all of the certificates in the CA chain.
+It is possible to explicitly specify a cipher string for TLS connections.
+\configfile{ejabberd.yml}{104-107,113-114,119-119,123-123,125-125,127-127,134-137,139-139,141-143,192-192,200-200,204-207,211-211}{Specifying a cipher order and enforcing it}
 
-Newer versions of ejabberd now support specifying the cipher string in the config file. See the commit message: \url{https://github.com/processone/ejabberd/commit/1dd94ac0d06822daa8c394ea2da20d91c8209124}. However, this change did not yet make it into the stable release at the time of this writing. 
+Note that we are setting the SSL option cipher\_server\_preference. This enforces our cipher order when negotiating which ciphers are used, as the cipher order of some clients chooses weak ciphers over stronger ciphers.\footnote{\url{https://blog.thijsalkema.de/me/blog//blog/2013/09/02/the-state-of-tls-on-xmpp-3/}}
 
+Other options you may want to take a look at are:
+\begin{itemize}
+\item The log level logs all login, including username and IP address, by default. Change the \texttt{loglevel} setting to avoid this:\\
+\configfile{ejabberd.yml}{31-39}{Changing the logging behaviour}
+\item By default, ejabberd provides an administration website (look for the ejabberd\_http module). Consider disabling it or adding TLS protection:\\
+\configfile{ejabberd.yml}{174-175,178-180,182-182,184-185}{Adding TLS to the web interface}
+\item By default, registration is open to everyone. Look for the \texttt{register} setting:\\
+\configfile{ejabberd.yml}{474-474,514-517}{Changing registration settings}
+\item By default, passwords are stored in plain text. Change this to hashed using the setting:\\
+\configfile{ejabberd.yml}{251-251,255-256}{Changing password storage to hashed}
+
+Alternatively, you can use a database backend to store authentication data, the details of which are out of the scope of this document.
+\end{itemize}
 
 \subsubsection{References}
 
-\todo{ADD references!!}
+\begin{itemize}
+\item \href{http://www.process-one.net/en/ejabberd/docs/}{The ejabberd documentation}
+\end{itemize}
 
 
 \subsubsection{How to test}
 \begin{itemize*}
-  \item \url{https://xmpp.net} is a practical website to test Jabber server configurations.
+  \item \url{https://xmpp.net} is a useful website to test Jabber server configurations.
 \end{itemize*}