How to secure a self-hosted Jitsi Meet server

Short answer

A fresh docker-jitsi-meet server lets anyone create rooms, so the first step is ENABLE_AUTH=1 with guests allowed to join. Generate service passwords with gen-passwords.sh (the old default passw0rd was CVE-2020-11878), keep the Jicofo, videobridge and Jigasi admin ports private, open only 80/tcp, 443/tcp and 10000/udp, turn on Prosody rate limits, and stay on a current stable release so published advisories are fixed.

This is a checklist for administrators of their own Jitsi server. It covers the settings that matter most, in order, with the Docker setting first and the Debian package equivalent where it differs. It is not a full security audit of your environment.

Applies to: docker-jitsi-meet stable-11248 (the latest release as of 2026-10-11) and Debian/Ubuntu packages of the same release.

The checklist

# Control Default in docker-jitsi-meet What to do
1 Current release Whatever you installed Stay on a recent stable release
2 Service passwords Empty, services refuse to start Run ./gen-passwords.sh once
3 Who can create rooms Anyone (ENABLE_AUTH=0) ENABLE_AUTH=1, plus ENABLE_GUESTS=1 if guests may join
4 Admin interfaces Jicofo and videobridge REST on 127.0.0.1 only Keep them private; leave Jigasi REST off
5 Open ports 80/443 web, 10000/udp media Firewall everything else
6 Login and join rate limits Off PROSODY_ENABLE_RATE_LIMITS=1
7 HTTPS HSTS on Valid certificate, keep HSTS on
8 Meeting protection Lobby available, off until a moderator turns it on Lobby or passwords for sensitive meetings

1. Stay on a current release

Every Jitsi security advisory so far was fixed in a later release. These are the published GitHub advisories for the Jitsi projects, checked on 2026-10-11:

Advisory What Fixed in
CVE-2025-64754 Microsoft OAuth sign-in window could be hijacked jitsi-meet 2.0.10532
Fail-open E2EE decryption and misleading E2EE cues End-to-end encryption weaknesses jitsi-meet 2.0.7830
Poll vote manipulation Participants could tamper with poll votes See advisory
CVE-2022-0217 Prosody flaw, only with WebSocket XMPP enabled docker-jitsi-meet stable-6726-2
Log4j in the videobridge and Jigasi Only when callstats was enabled See advisories
CVE-2021-39215 JWT token forgery through symmetric algorithms jitsi-meet 2.0.5963
CVE-2021-39205 Cross-site scripting through prototype pollution See advisory
CVE-2020-11878 Default service passwords in Docker docker-jitsi-meet stable-4384-1

Check what you run with docker compose images (Docker) or dpkg -l | grep jitsi (packages), and upgrade with the matching release files: upgrading docker-jitsi-meet. Releases since stable-11146 also run every container as an unprivileged user with a read-only filesystem, which limits what a compromised container can do; see the rootless upgrade.

2. Use strong service passwords

Jicofo, the videobridge, Jigasi and Jibri log in to Prosody with internal accounts. Before April 2020, docker-jitsi-meet shipped them with the default password passw0rd, so anyone could log in as a system account. That is CVE-2020-11878, rated 9.8 critical, fixed in stable-4384-1.

Current releases ship no passwords at all. A service whose password is empty stops with a line like:

Text
FATAL ERROR: Jicofo auth password must be set

Generate strong random passwords once, in the docker-jitsi-meet folder, before the first start:

Terminal
./gen-passwords.sh

It writes openssl rand -hex 16 values into .env and keeps a backup in .env.bak. Do not reuse these passwords anywhere else, and keep .env out of version control.

3. Decide who can create meetings

By default anyone who reaches your server can create a room. To allow only signed-in users to start meetings while guests can still join them, set in .env:

Config
ENABLE_AUTH=1
ENABLE_GUESTS=1
AUTH_TYPE=internal

AUTH_TYPE can also be jwt or ldap. Step-by-step setups:

Recreate the stack after changing .env with docker compose up -d. On Debian packages, follow the same guides; they cover the package configuration.

4. Keep admin interfaces private

docker-jitsi-meet publishes the Jicofo REST port (8888) and the videobridge colibri port (8080) only on 127.0.0.1, so they are reachable from the server itself but not from the internet. Keep it that way: do not change those port mappings to 0.0.0.0, and if you need them for monitoring, reach them over a private network or a tunnel. Our monitoring guide explains what they expose.

Leave the Jigasi REST API off (JIGASI_ENABLE_REST unset) unless you need it. A security researcher reported to 8x8 that an exposed, unauthenticated Jigasi REST API can be used to place outbound SIP calls (toll fraud); the report was closed as informative and a hardening pull request was not merged (docker-jitsi-meet PR #2320). If you do enable it, never publish its port.

5. Open only the ports Jitsi needs

Port Why
443/tcp The web app and its WebSocket connections
80/tcp Let’s Encrypt certificates and the redirect to HTTPS
10000/udp Audio and video to the videobridge
Your TURN ports Only if you run a TURN server

Block everything else in your firewall and in your cloud provider’s security group. Prosody’s XMPP ports are not published by docker-jitsi-meet and do not need to be reachable from outside.

6. Turn on Prosody rate limits

docker-jitsi-meet can limit how fast a single IP address may log in and join, which slows down room-flooding and password guessing. It is off by default. In .env:

Config
PROSODY_ENABLE_RATE_LIMITS=1

That loads Prosody’s rate_limit and muc_rate_limit modules with these defaults, each adjustable:

Setting Default Meaning
PROSODY_RATE_LIMIT_LOGIN_RATE 3 Join or login events per second allowed per IP
PROSODY_RATE_LIMIT_SESSION_RATE 200 Bytes per second for an IP that went over the limit
PROSODY_RATE_LIMIT_TIMEOUT 60 Seconds until the limit for an IP is lifted
PROSODY_RATE_LIMIT_ALLOW_RANGES 10.0.0.0/8 Address ranges that are never limited

Test with a few real users afterwards: if many people join from one office address at once, they share one IP.

7. Serve only HTTPS

Use a valid certificate (Let’s Encrypt setup). Browsers block cameras, microphones and screen sharing on insecure pages anyway. docker-jitsi-meet sends a Strict-Transport-Security header by default (ENABLE_HSTS=1); leave it on.

8. Protect individual meetings

These are tools for organizers and moderators, on any server:

  • Lobby: participants wait until a moderator admits them. The feature is available in docker-jitsi-meet by default (ENABLE_LOBBY); a moderator turns it on for a meeting.
  • Meeting password: set by a moderator for one meeting. Jitsi notes that it is reset once the last person leaves, so set it again for the next meeting.
  • Room names: use long, unusual names; short common names are easy to guess.
  • Participant limit: MAX_PARTICIPANTS in .env caps how many people can join one room.
  • End-to-end encryption (E2EE): media is always encrypted on the network with DTLS-SRTP, but the videobridge decrypts it in memory to route it. With E2EE turned on in a meeting, the bridge cannot read audio, video and screen sharing. According to Jitsi, E2EE does not cover chat or polls, and it only works when every participant uses a client that supports it.

More on what participants see: login, moderator and password prompts.

Verify

On the server:

Terminal
docker compose ps --format '{{.Name}}\t{{.Ports}}'

Only the web ports and 10000/udp should be bound to 0.0.0.0; Jicofo’s 8888 and the videobridge’s 8080 should show 127.0.0.1. Then, from another machine:

Terminal
curl -sI https://meet.example.com | grep -i strict-transport-security

It should print a Strict-Transport-Security line with max-age=63072000. Finally, open a new room name in a private browser window: with ENABLE_AUTH=1 you are asked to log in or wait for a moderator instead of starting the meeting.

Common mistakes

  • Changing .env without recreating containers. Run docker compose up -d after every change.
  • Reusing one password for every service or committing .env to a repository.
  • Opening 8080 or 8888 “temporarily” for monitoring and forgetting to close them.
  • Treating a meeting password as permanent. It resets when the room empties.
  • Skipping upgrades for months. Most items in the advisory table were fixed in ordinary releases.

What we have not confirmed yet

  • We took the defaults and settings from the stable-11248 source; we have not yet run every check above on a test server, including the rate limit behaviour with many users behind one IP.
  • Fixed versions marked “See advisory” are listed on the advisory page itself; we did not repeat them here.
  • This checklist does not cover your operating system, cloud account, backups or monitoring for intrusion.

Sources

Need a hand?

Want a second pair of eyes on your server? Contact our engineers for a hardening review, or see our support plans.

Frequently asked questions

Who can create meetings on a new Jitsi server?

Anyone who can reach it. docker-jitsi-meet ships with ENABLE_AUTH=0, so every visitor can open a new room. Set ENABLE_AUTH=1, choose an AUTH_TYPE, and set ENABLE_GUESTS=1 if guests should still be able to join meetings that a signed-in user started.

What was the Jitsi default password vulnerability?

CVE-2020-11878: docker-jitsi-meet releases before stable-4384-1 (April 2020) shipped default passwords such as passw0rd for internal service accounts, rated 9.8 critical. Current releases ship no default passwords and the services refuse to start without them; gen-passwords.sh writes strong random ones.

Is Jitsi Meet end-to-end encrypted?

Media is always encrypted on the network with DTLS-SRTP, but the videobridge decrypts it in memory to route it. Optional end-to-end encryption covers audio, video and screen sharing, not chat or polls, and only works on clients that support it.

Which ports should be open on a Jitsi server?

443/tcp for the web app, 80/tcp if Let's Encrypt needs it, and 10000/udp for media. Add your TURN server's ports if you run one. The Jicofo and videobridge REST ports are published only on 127.0.0.1 by default and should stay that way.

How do I know about new Jitsi security issues?

Jitsi publishes advisories on GitHub for each project, such as jitsi-meet and docker-jitsi-meet. Watch the docker-jitsi-meet releases and those advisory pages, and upgrade with matching release files.

Stuck, or would rather not do this by hand?

Deploy it in one click

A private Jitsi server in your own AWS account with SSL, your domain and optional recording, transcription and JWT. Free 15 minute trial.

Start free trial

Talk to a Jitsi engineer

Setup, fixes, branding, recording, scaling. Tell us what is happening and we reply with a plan and a quote.

Get expert help

Related

Recently updated