Skip to content

Instantly share code, notes, and snippets.

@SamWhited
Last active November 17, 2022 12:44
Show Gist options
  • Select an option

  • Save SamWhited/69b25f8948ad7abec4ea to your computer and use it in GitHub Desktop.

Select an option

Save SamWhited/69b25f8948ad7abec4ea to your computer and use it in GitHub Desktop.

Revisions

  1. SamWhited revised this gist Dec 24, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ejabberd.yml
    Original file line number Diff line number Diff line change
    @@ -47,7 +47,7 @@ log_rate_limit: 100
    ## accounts.
    ##
    watchdog_admins:
    - "sam@samwhited.com"
    - "todo@todo.com"


    ### ================
  2. SamWhited created this gist Dec 24, 2014.
    567 changes: 567 additions & 0 deletions ejabberd.yml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,567 @@
    ### =======
    ### 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: 4

    ##
    ## 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
    ##

    ## Or just use logrotate...

    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:
    - "[email protected]"


    ### ================
    ### SERVED HOSTNAMES

    ##
    ## hosts: Domains served by ejabberd.
    ## You can define one or several, for example:
    ##
    hosts:
    - "todo.com"
    - "todo.net"

    ##
    ## 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
    ## Don't use stream compression and tls compression
    zlib: false
    ##
    ## If TLS is compiled in and you installed a SSL
    ## certificate, specify the full path to the
    ## file and uncomment these lines:
    ##
    certfile: "TODO"
    ## starttls: true
    ##
    ## To enforce TLS encryption for client connections,
    ## use this instead of the "starttls" option:
    ##
    starttls_required: true
    ##
    ## Custom OpenSSL options
    ## All my clients support TLSv1.2, so just turn everything else off...
    ##
    protocol_options:
    - "no_sslv2"
    - "no_sslv3"
    - "no_tlsv1"
    - "no_tlsv1_1"
    ## Specify a small number of PFS ciphers only.
    ciphers: "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA"
    max_stanza_size: 65536
    shaper: c2s_shaper
    access: c2s
    -
    port: 5269
    module: ejabberd_s2s_in
    tls_compression: true
    ##
    ## ejabberd_stun: Handles STUN Binding requests
    ##
    -
    port: 5349
    module: ejabberd_stun
    tls: true
    certfile: "TODO"
    use_turn: true
    turn_ip: "TODO (actual server IP)"
    auth_realm: "todo.com"

    ##
    ## To handle XML-RPC requests that provide admin credentials:
    ##
    ## -
    ## port: 4560
    ## module: ejabberd_xmlrpc
    -
    ## TODO: Bind to localhost, then put this behind a TLS reverse proxy (read, "Nginx")
    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

    ##
    ## domain_certfile: Specify a different certificate for each served hostname.
    ##
    host_config:
    "todo.com":
    domain_certfile: "TODO"
    "todo.net":
    domain_certfile: "TODO"

    ##
    ## Outgoing S2S options
    ##
    outgoing_s2s_families:
    - ipv6
    - ipv4
    outgoing_s2s_timeout: 10000

    ##
    ## s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
    ## Allowed values are: false optional required required_trusted
    ##
    s2s_use_starttls: required

    ##
    ## s2s_certfile: Specify a certificate file.
    ##
    s2s_certfile: "TODO"

    ##
    ## Set the ciphers which can be used for s2s connections.
    ##
    s2s_ciphers: "HIGH:!3DES:!aNULL:!SSLv2:@STRENGTH"

    ## Custom OpenSSL options
    s2s_protocol_options:
    - "no_sslv2"
    - "no_sslv3"

    ### ==============
    ### AUTHENTICATION

    ##
    ## auth_method: Method used to authenticate the users.
    ## The default method is the internal.
    auth_method: internal

    ##
    ## Store the plain passwords ("plain") or hashed for SCRAM ("scram"):
    auth_password_format: scram

    ##
    ## Define the FQDN if ejabberd doesn't detect it:
    fqdn: "TODO"

    ##
    ## 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": "%[email protected]"
    ##
    ## 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"
    ##odbc_type: sqlite
    ##odbc_server: "DNS=ejabberd;"


    ## {database_type, "sqlite"},
    ## {default_auto_save, true},
    ## {enforce_default_auto_save, true},
    ## {save_default, false},
    ## {odbc_server, "DSN=ejabberd;"},
    ## {odbc_keepalive_interval, 3600}

    ##
    ## 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:
    - "TODO USER": "TODO DOMAIN"
    ##
    ## Blocked users
    ##
    ## blocked:
    ## user:
    ## - "baduser": "example.org"
    ## - "test"

    ## Local users: don't modify this.
    ##
    local:
    user_regexp: ""

    ##
    ## Loopback network
    ##
    loopback:
    ip:
    - "127.0.0.0/8"

    ##
    ## Bad XMPP servers
    ## TODO: Remove gmail if you want to be able to connect with it... it was spamming me after I disabled unencrypted S2S connections.
    ##
    bad_servers:
    server:
    - "gmail.com"

    ### ============
    ### 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: deny
    ## Only allow to register from localhost
    trusted_network:
    loopback: allow

    ##
    ## Define specific Access Rules in a virtual host.
    ## TODO: If you want to configure a specific host
    host_config:
    "todo.net":
    access:
    s2s:
    all: deny
    register:
    all: deny

    ### ================
    ### DEFAULT LANGUAGE

    ##
    ## language: Default language used for server messages.
    ##
    language: "en"


    ### =======
    ### 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: true
    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
    store_empty_body: false
    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 the XMPP server hosted by TODO.
    ##
    ## When a user registers, send a notification to
    ## these XMPP accounts.
    ##
    registration_watchers:
    - "TODO"

    ##
    ## 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:
    versioning: true
    store_current_id: true
    mod_shared_roster: {}
    mod_stats: {}
    mod_time: {}
    mod_vcard: {}
    mod_version: {}

    ### Local Variables:
    ### mode: yaml
    ### End:
    ### vim: set filetype=yaml tabstop=8