I am attempting to make a minimal ejabberd server. Well at least at first since I don't know about resources on a small VPS running FreeBSD 10.2. My intent is to have no browser based configuration. (One less thing attract hackers.) I will create user names and passwords with ejabberdctl. No link to other servers. This should all be obvious in my .yml file. (Nothing worse that a poorly configured server messing up a network.)
Anyway, here are all the pertinent details.
# pkg version | grep ejabberd ejabberd-16.03 =
yml file follows the break
# cat ejabberd.log 2016-04-19 01:04:37.606 [info] <0.7.0> Application lager started on node ejabberd@localhost 2016-04-19 01:04:37.616 [info] <0.7.0> Application crypto started on node ejabberd@localhost 2016-04-19 01:04:37.632 [info] <0.7.0> Application sasl started on node ejabberd@localhost 2016-04-19 01:04:37.647 [info] <0.7.0> Application asn1 started on node ejabberd@localhost 2016-04-19 01:04:37.648 [info] <0.7.0> Application public_key started on node ejabberd@localhost 2016-04-19 01:04:37.667 [info] <0.7.0> Application ssl started on node ejabberd@localhost 2016-04-19 01:04:37.676 [info] <0.7.0> Application fast_yaml started on node ejabberd@localhost 2016-04-19 01:04:37.695 [info] <0.7.0> Application fast_tls started on node ejabberd@localhost 2016-04-19 01:04:37.705 [info] <0.7.0> Application fast_xml started on node ejabberd@localhost 2016-04-19 01:04:37.712 [info] <0.7.0> Application stringprep started on node ejabberd@localhost 2016-04-19 01:04:37.727 [info] <0.7.0> Application cache_tab started on node ejabberd@localhost 2016-04-19 01:04:37.925 [info] <0.7.0> Application mnesia started on node ejabberd@localhost 2016-04-19 01:04:39.163 [info] <0.7.0> Application inets started on node ejabberd@localhost 2016-04-19 01:04:39.192 [error] <0.37.0> CRASH REPORT Process <0.37.0> with 0 neighbours exited with reason: no case clause matching <<>> in ejabberd_config:get_config_option_key/2 line 405 in application_master:init/4 line 134 2016-04-19 01:04:39.193 [info] <0.7.0> Application ejabberd exited with reason: no case clause matching <<>> in ejabberd_config:get_config_option_key/2 line 405
### 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: 5
## ## 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: 0 log_rotate_date: "$D0" 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"
###. =============== ###' NODE PARAMETERS
## ## net_ticktime: Specifies net_kernel tick time in seconds. This options must have ## identical value on all nodes, and in most cases shouldn't be changed at all from ## default value. ## ## net_ticktime: 60
###. ================ ###' SERVED HOSTNAMES
## ## hosts: Domains served by ejabberd. ## You can define one or several, for example: ## hosts: ## - "example.net" ## - "example.com" ## - "example.org" ## hosts: ["ME"]
## ## 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: "MY.crt" starttls: true ## ## To enforce TLS encryption for client connections, ## use this instead of the "starttls" option: ## ## starttls_required: true ## ## Custom OpenSSL options ## ##protocol_options: - max_stanza_size: 65536 - shaper: c2s_shaper - access: c2s - ## 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"
## ## 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
## ## 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: "MYFQDN"
## ## 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
## 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
## ## 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: ""
## ## 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 ## 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
## ## 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
## ## Enable modules with custom options in a specific virtual host ## ## host_config: ## "localhost": ## modules: ## mod_echo: ## host: "mirror.localhost"
## ## Enable modules management via ejabberdctl for installation and ## uninstallation of public/private contributed modules ## (enabled by default) ##
allow_contrib_modules: true
###. ###' ### Local Variables: ### mode: yaml ### End: ### vim: set filetype=yaml tabstop=8 foldmarker=###',###. foldmethod=marker: #