Configurare il Firewall

Questo documento tratta la configurazione del firewall per BigBlueButton 2.2.

È necessario configurare il firewall prima di installare BigBlueButton ; in caso contrario, potresti ricevere errori durante l'installazione e non sarai in grado di testare BigBlueButton al termine dell'installazione.

Se sei uno sviluppatore che configura BigBlueButton su una VM locale per il test, puoi saltare questa sezione.

Panoramica

La configurazione di rete più semplice per l'installazione di BigBlueButton è su un server che ha un unico indirizzo IP esterno e il server è su Internet pubblico (e quindi direttamente accessibile dai tuoi utenti). Il firewall di accesso basato su porta viene implementato utilizzando UFW . Ecco un esempio di tale configurazione con il server BigBlueButton con un indirizzo IP (fittizio) 203.0.113.1 con nome host bigbluebutton.example.com.

Installare

In questa semplice configurazione di rete, BigBlueButton dovrebbe funzionare immediatamente dopo l'installazione. Questo perché gli script di pacchettizzazione configurano automaticamente BigBlueButton utilizzando il primo indirizzo IP non di loopback, mentre l'accesso alle porte sensibili è bloccato.
Una variazione di questa configurazione si verifica quando il server dispone di più interfacce di rete, ma l'IP esterno è ancora la prima interfaccia di rete (come eth0) rilevata dagli script di installazione.

Installare

Se il tuo server eth0 punta all'indirizzo IP esterno su Internet e non è presente un firewall esterno, gli script di packaging dovrebbero rilevare questo indirizzo IP esterno e configurare BigBlueButton di conseguenza. Non è necessario apportare nessuna delle modifiche seguenti.

Non preoccuparti se l'indirizzo IP del tuo server cambia, BigBlueButton viene fornito con un'utilità di configurazione chiamata bbb-conf che ti consente di modificare tutti i file di configurazione di BigBlueButton per utilizzare qualsiasi indirizzo IP o nome host.

Se è presente una NAT (Network Address Translation) IPv4 tra gli utenti e il server BigBlueButton, sarà necessario prima configurare il firewall per inoltrare connessioni TCP/UDP specifiche da client esterni al server BigBlueButton interno; in caso contrario, gli utenti non potranno accedere a BigBlueButton.

Il diagramma seguente mostra una configurazione tipica con un firewall esterno (la configurazione, ovviamente, avrà un indirizzo IP e nomi host diversi).

Installare

In questo esempio, tutti gli utenti devono connettersi al server BigBlueButton tramite l'URL (Uniform Resource Locator) https://bigbluebutton.example.com/. Questo nome host si risolve nell'indirizzo IP 203.0.113.1 che è il firewall. Il firewall deve inoltrare connessioni specifiche (descritte di seguito) al server BigBlueButton in esecuzione all'indirizzo IP 10.0.2.12.

Configura il tuo firewall

Quando BigBlueButton è protetto da un firewall, è necessario configurare il firewall per inoltrare le seguenti connessioni in entrata a BigBlueButton:

  • Porta TCP / IP 22 (per SSH)
  • Porte TCP / IP 80/443 (per HTTP / HTTPS)
  • Porte UDP nell'intervallo 16384-32768 (per flussi RTP FreeSWITCH / HTML5)

EC2

Se utilizzi EC2, dovresti anche assegnare al tuo server un indirizzo IP elastico per evitare che riceva un nuovo indirizzo IP al riavvio.

Azure

In Microsot Azure, quando crei un'istanza devi aggiungere le seguenti regole di porta in ingresso per abilitare le connessioni in entrata sulle porte 80, 443 e l'intervallo di porte UDP 16384-32768:

Azure Cloud

Google Compute Engine

In Google Compute Engine, quando crei un'istanza devi abilitare il traffico sulle porte 80 e 443.

Google Compute Engine 80-443

Dopo aver creato l'istanza, è necessario aggiungere una regola firewall per consentire il traffico UDP in ingresso nell'intervallo di porte 16384-32768.

Firewall di Google Compute Engine

Testare il firewall

Dopo aver apportato le modifiche alle impostazioni del firewall, prima di procedere all'installazione, prenditi un momento e verifica di aver configurato il firewall per inoltrare correttamente le connessioni di cui sopra (questo ti farà risparmiare tempo in seguito in caso di problemi).

Per testare le connessioni su varie porte necessarie a BigBlueButton, utilizzerai uno strumento chiamato netcat per ascoltare le connessioni. Utilizzerai netcat sul server BigBlueButton e su un server esterno (al di fuori del firewall) per generare connessioni. Se il test delle connessioni fallisce, il firewall sta inoltrando i pacchetti.

Innanzitutto, installa netcat su BigBlueButton utilizzando il seguente comando:

$ sudo apt-get install netcat

Quindi, interrompi BigBlueButton con il comando sudo bbb-conf --stop. Questo libera le porte che vogliamo testare. Ora possiamo eseguire netcat per l'ascolto sulle porte e provare a connetterci da un computer esterno. Come root, esegui il seguente comando:

$ netcat -l 443

netcat ora riporterà al terminale qualsiasi testo ricevuto sulla porta 443 (è possibile abbandonare il comando in seguito utilizzando Ctrl-c).

Successivamente, su un secondo computer esterno al firewall, ovvero deve passare attraverso il firewall per accedere al server BigBlueButton, eseguire l'installazione netcat. Sostituisci EXTERNAL_HOST_NAME con il nome host del tuo firewall, esegui il seguente comando

$ netcat EXTERNAL_HOST_NAME 443

e digita la parola "test" e premi INVIO.

Se il firewall inoltra le connessioni in entrata sulla porta 443 al server BigBlueButton interno, dovresti vedere la parola 'test' apparire dopo il comando  netcat -l 443, come in

$ netcat -l 443
test

Se la parola test non compare, ricontrolla la configurazione del firewall per assicurarti che le connessioni di inoltro sulla porta 443 e poi riprova. Si desidera visualizzare la parola test prima di procedere all'installazione di BigBlueButton.

Ripeti questi test con la porta 80.

Questo copre le porte TCP / IP. Successivamente, dobbiamo verificare che vengano inoltrate anche le connessioni UDP nell'intervallo 16384-32768. Sul tuo server BigBlueButton, esegui il seguente netcatcomando per ascoltare i dati in arrivo tramite UDP sulla porta 17000 (qui, stiamo scegliendo una porta nell'intervallo 16384-32768).

$ netcat -u -l 17000

Di nuovo, su un computer al di fuori del firewall, sostituisci EXTERNAL_HOST_NAMEcon il nome host del tuo firewall ed esegui il comando

$ netcat -u EXTERNAL_HOST_NAME 17000

Digita "test2" nel terminale e premi INVIO. Dovresti vedere la parola "test2" apparire sul terminale del server BigBlueButton, come in

$ netcat -u -l 17000
test2

Come prima, se il test precedente fallisce, ricontrolla le impostazioni del firewall per assicurarti che guidi correttamente i pacchetti UDP nell'intervallo 16384-32768 e prova di nuovo.

Quando BigBlueButton è in esecuzione su un server, vari componenti di BigBlueButton devono stabilire connessioni a se stesso utilizzando il nome host esterno. I programmi in esecuzione nel server BigBlueButton che tentano di connettersi al nome host esterno dovrebbero raggiungere lo stesso BigBlueButton.

Per consentire al server BigBlueButton di connettersi a se stesso utilizzando il nome host esterno, modificare il file /etc/hostse aggiungere la riga

EXTERNAL_IP_ADDRESS EXTERNAL_HOST_NAME

dove EXTERNAL_IP_ADDRESScon l'IP esterno del tuo firewall e EXTERNAL_HOST_NAMEcon il nome host esterno del tuo firewall. Ad esempio, utilizzando la configurazione nel diagramma sopra, l'aggiunta a /etc/hostssarebbe

172.34.56.78 bigbluebutton.example.com

A questo punto, procedi con l' installazione di BigBlueButton e, al termine dell'installazione, configura BigBlueButton per utilizzare il tuo firewall seguendo i passaggi della sezione successiva.

Configura BigBlueButton per funzionare con il tuo firewall

Prima di eseguire questi passaggi è necessario aver eseguito XXX nella guida all'installazione.

Aggiornamento di Kurento

Passaggi aggiuntivi quando il server è dietro NAT

Il client HTML5 utilizza il server multimediale kurento per inviare/ricevere flussi video WebRTC. Se stai installando su un server BigBlueButton dietro un firewall che utilizza la traduzione degli indirizzi di rete (NAT), devi dare a kurento l'accesso a un server STUN esterno (che prevede il Session Traversal di UDP tramite NAT). Un server STUN aiuterà Kurento a determinare il suo indirizzo esterno quando è dietro NAT.

Troverai un elenco di server STUN disponibili pubblicamente nella documentazione di kurento .
Per configurare Kurento in modo che utilizzi un server STUN dall'elenco precedente, è necessario modificare, /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini decommentare e assegnare valori per stunServerAddresse stunServerPort. Ecco la configurazione predefinita.

# cat /etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini
; Only IP address are supported, not domain names for addresses
; You have to find a valid stun server. You can check if it works
; usin this tool:
;   http://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
; stunServerAddress=<serverAddress>
; stunServerPort=<serverPort>

; turnURL gives the necessary info to configure TURN for WebRTC.
;    'address' must be an IP (not a domain).
;    'transport' is optional (UDP by default).
; turnURL=user:password@address:port(?transport=[udp|tcp|tls])

;pemCertificate is deprecated. Please use pemCertificateRSA instead
;pemCertificate=<path>
;pemCertificateRSA=<path>
;pemCertificateECDSA=<path>

Ad esempio, per utilizzare il server STUN all'indirizzo 172.217.212.127 (l'indirizzo IP per stun.l.google.com) con la porta 19302, modificare le righe con stunServerAddresse stunServerPortcome segue:

stunServerAddress=172.217.212.127
stunServerPort=19302

Per verificare che il server STUN sia accessibile e funzionante, utilizzare il stunclient dal stuntman-clientpacchetto.

# sudo apt-get install stuntman-client
# stun 172.217.212.127:19302
STUN client version 0.97
Primary: Open
Return value is 0x000001

Aggiorna FreeSWITCH

Rivediamo la configurazione tipica per BigBlueButton dietro un firewall (il tuo avrebbe ovviamente un indirizzo IP diverso).

Installare

Affinché l'audio WebRTC funzioni, FreeSWITCH deve ascoltare le connessioni sull'indirizzo IP esterno del firewall. Se non hai modificato il firewall per inoltrare le porte al tuo server BigBlueButton, vedi configurare un firewall .

Con il firewall configurato per inoltrare le connessioni in entrata al server BigBlueButton, il passaggio successivo consiste nel configurare FreeSWITCH per il collegamento all'indirizzo IP esterno del firewall.

Modificare i seguenti file e sostituire EXTERNAL_IP_ADDRESS per l'indirizzo IP esterno (non il nome host esterno).

Modifica /opt/freeswitch/conf/vars.xml e cambia

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=stun:stun.freeswitch.org"/>

Per

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=EXTERNAL_IP_ADDRESS"/>

Modificare

<X-PRE-PROCESS cmd="set" data="external_sip_ip=stun:stun.freeswitch.org"/>

Per

<X-PRE-PROCESS cmd="set" data="external_sip_ip=EXTERNAL_IP_ADDRESS"/>

Quindi, modifica /opt/freeswitch/conf/sip_profiles/external.xml e cambia

    <param name="ext-rtp-ip" value="$${local_ip_v4}"/>
    <param name="ext-sip-ip" value="$${local_ip_v4}"/>

per

    <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
    <param name="ext-sip-ip" value="$${external_sip_ip}"/>

Quindi, modifica /usr/share/red5/webapps/sip/WEB-INF/bigbluebutton-sip.propertiese assicurati che i valori di bbb.sip.app.ipe freeswitch.ipabbiano l'indirizzo IP interno.

bbb.sip.app.ip=<internal_ip>
bbb.sip.app.port=5070

freeswitch.ip=<internal_ip>
freeswitch.port=5060

Modifica /etc/bigbluebutton/nginx/sip.nginx per connettersi all'indirizzo IP esterno.

Se hai configurato SSL, utilizza la porta 7443:

location /ws {
        proxy_pass https://EXTERNAL_IP_ADDRESS:7443;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 6h;
        proxy_send_timeout 6h;
        client_body_timeout 6h;
        send_timeout 6h;
}

Se non stai usando SSL, usa la porta 5066:

location /ws {
        proxy_pass http://EXTERNAL_IP_ADDRESS:5066;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 6h;
        proxy_send_timeout 6h;
        client_body_timeout 6h;
        send_timeout 6h;
}

Se hai installato il client HTML5, potresti dover apportare alcune ulteriori modifiche. Se enableListenOnly è impostato su true in /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml, come in

$ grep enableListenOnly /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
    enableListenOnly: true

quindi Kurento fornisce un flusso audio di solo ascolto per gli utenti del client HTML5. In questo caso, modifica /usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml cambia il valore in modoche l' ip corrisponda all'indirizzo IP esterno del server e il valore di sip_ip in modo che corrisponda all'indirizzo IP interno del server (dove FreeSWITCH è in ascolto sulla porta 5066). Ad esempio, se l'indirizzo IP esterno del server è 203.0.113.1e l'indirizzo IP interno è, 172.30.1.145 modificare default.yml e modificare i valori per ip e sip_ip come segue:

freeswitch:
    ip: 203.0.113.1
    sip_ip: 172.30.1.145
    port: 5066

Successivamente, modifica il valore di sip + ip. Devi anche configurare Kurento per utilizzare un server STUN .

Dopo aver apportato le modifiche precedenti, riavvia BigBlueButton.

$ bbb-conf --restart

Per testare, avvia FireFox e prova a connetterti al tuo server BigBlueButton e unisciti all'audio. Se vedi le parole "[WebRTC Audio]" nell'angolo inferiore destro, ha funzionato.

Se non ha funzionato, ci sono due probabili messaggi di errore quando provi a connetterti con l'audio.

Rilevato il seguente problema WebRTC: Errore 1002: Impossibile stabilire una connessione WebSocket. Vuoi provare invece Flash?

Errore È stato rilevato il seguente problema WebRTC Causa probabile
1002: impossibile stabilire una connessione WebSocket Nota 1
1007: negoziazione ICE non riuscita Nota 2

Per l'errore 1002, controlla che l'indirizzo IP proxy_passin /etc/bigbluebutton/nginx/sip.nginx punta all'indirizzo IP esterno del firewall. Successivamente, controlla che FreeSWITCH sia stato avviato senza errori

# systemctl status freeswitch
● freeswitch.service - freeswitch
   Loaded: loaded (/lib/systemd/system/freeswitch.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-03-03 23:13:07 UTC; 48min ago
  Process: 19349 ExecStart=/opt/freeswitch/bin/freeswitch -u freeswitch -g daemon -ncwait $DAEMON_OPTS (code=exited, status=0/SUCCESS)
 Main PID: 19361 (freeswitch)
    Tasks: 36
   Memory: 41.4M
      CPU: 20.744s
   CGroup: /system.slice/freeswitch.service
           └─19361 /opt/freeswitch/bin/freeswitch -u freeswitch -g daemon -ncwait -nonat

Mar 03 23:13:05 t4 systemd[1]: Starting freeswitch...
Mar 03 23:13:05 t4 freeswitch[19349]: 19361 Backgrounding.
Mar 03 23:13:07 t4 freeswitch[19349]: FreeSWITCH[19349] Waiting for background process pid:19361 to be ready.....
Mar 03 23:13:07 t4 freeswitch[19349]: FreeSWITCH[19349] System Ready pid:19361
Mar 03 23:13:07 t4 systemd[1]: Started freeswitch.

Dovresti vedere active (running). Se FreeSWITCH non è in esecuzione, puoi controllare il suo registro di output per indizi sul motivo per cui non è in esecuzione journalctl -u freeswitch.service. Se continui a visualizzare l'errore 1002, controlla le interruzioni diagnostiche di seguito, in Configura una scheda NIC fittizia .

Per l'errore 1007, significa che la connessione al socket web è riuscita (FreeSWITCH è in esecuzione e ha ricevuto la richiesta dal browser per impostare un percorso multimediale), ma nessuna delle combinazioni IP / Porta restituite da FreeSWITCH ha consentito al browser di connettersi e avviare la trasmissione media. Per diagnosticare questo errore, apri about:webrtcin FireFox e fai clic su "mostra dettagli" per la connessione più recente. Guarda sotto la colonna Candidato remoto e controlla se vedi l'indirizzo IP interno del server BigBlueButton. In tal caso, probabilmente hai una configurazione errata nelle impostazioni di FreeSWITCH. Ricontrolla gli esempi mostrati sopra.

Se viene visualizzato l'indirizzo IP corretto, probabilmente hai un problema in cui il tuo firewall non consente il passaggio di pacchetti UDP in entrambe le direzioni sulle porte richieste. Controlla la documentazione del tuo firewall per aiuto o chiedi alla mailing list della comunità BigBlueButton.

Configurare un NIC fittizio (se necessario)

Se riscontri l'errore 1002 quando provi a connetterti all'audio WebRTC, è possibile che il tuo firewall non supporti "hairpin NAT", il che significa che quando il server BigBlueButton si connette all'indirizzo IP del firewall, il firewall non sta inviando la connessione indietro .

Puoi verificare se il NAT hairpin funziona utilizzando il seguente comando sul tuo server BigBlueButton. Sostituisci EXTERNAL-IP-ADDRESS con l'indirizzo IP esterno del tuo firewall.

$ curl --trace-ascii - -k https://EXTERNAL-IP-ADDRESS:443/bigbluebutton/api

Ecco l'output di esempio di un test di successo.

~# curl --trace-ascii - -k https://203.0.113.1:443/bigbluebutton/api
== Info:   Trying 203.0.113.1...
== Info: Connected to 203.0.113.1 (203.0.113.1) port 443 (#0)
== Info: found 173 certificates in /etc/ssl/certs/ca-certificates.crt
== Info: found 692 certificates in /etc/ssl/certs
== Info: ALPN, offering http/1.1
== Info: SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
== Info:         server certificate verification SKIPPED
== Info:         server certificate status verification SKIPPED
== Info:         common name: HOSTNAME (does not match '203.0.113.1')
== Info:         server certificate expiration date OK
== Info:         server certificate activation date OK
== Info:         certificate public key: RSA
== Info:         certificate version: #3
== Info:         subject: CN=bbb02.monasticeducation.net
== Info:         start date: Fri, 24 Feb 2017 06:20:00 GMT
== Info:         expire date: Thu, 25 May 2017 06:20:00 GMT
== Info:         issuer: C=US,O=Let's Encrypt,CN=Let's Encrypt Authority X3
== Info:         compression: NULL
== Info: ALPN, server accepted to use http/1.1
=> Send header, 93 bytes (0x5d)
0000: GET /bigbluebutton/api HTTP/1.1
0021: Host: 203.0.113.1
0035: User-Agent: curl/7.47.0
004e: Accept: */*
005b:
<= Recv header, 17 bytes (0x11)
...
<response><returncode>SUCCESS</returncode><version>1.0</version></response>== Info: Connection #0 to host 203.0.113.1 left intact

Dovresti vedere il <response>...</response> alla fine.

Se non lo vedi, segui i passaggi seguenti sul tuo server BigBlueButton per configurare una NIC fittizia con lo stesso indirizzo IP del firewall. Ecco un diagramma di esempio di come funziona.

Installare

In questo diagramma, abbiamo impostato una NIC fittizia per 203.0.113.1, che consentirà a FreeSWITCH di riconnettersi a se stesso. In questo modo, quando FreeSWICH riceve una connessione interna da altre parti di BigBlueButton, penserà che si trova sull'interfaccia esterna. Ciò farà sì che utilizzi l'indirizzo IP corretto nella risposta.

Per configurare una NIC fittizia, sul tuo BigBlueButton inserisci il seguente comando e sostituiscilo EXTERNAL_IP_ADDRESS con l'indirizzo IP esterno del tuo firewall.

$ sudo ip addr add EXTERNAL\_IP\_ADDRESS/32 dev lo

Quindi, controlla che la NIC fittizia sia stata creata utilizzando il comando ip addr.

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet EXTERNAL_IP_ADDRESS/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Dovresti vedere EXTERNAL_IP_ADDRESS per il tuo firewall elencato sopra.

Successivamente, modifica /opt/freeswitch/conf/sip_profiles/external.xml e assicurati che il valore per wss-bindingutilizzi l'indirizzo IP esterno

<param name="wss-binding"  value="EXTERNAL_IP_ADDRESS:7443"/>

A questo punto, riavvia il tuo server BigBlueButton con bbb-conf --restart, quindi prova a connetterti di nuovo al supporto WebRTC.

Infine, per garantire che questa scheda NIC fittizia venga creata automaticamente al riavvio, modificare /etc/network/interfaces e aggiungere quanto segue

# The loopback network interface
auto lo
iface lo inet loopback
        post-up ip addr add EXTERNAL_IP_ADDRESS/32 dev lo
        pre-down ip addr del EXTERNAL_IP_ADDRESS/32 dev lo

Quanto sopra consentirà agli utenti esterni al firewall di accedere al tuo server BigBlueButton.

Per gli utenti stessi che si trovano dietro un firewall, ti consigliamo di configurare un server TURN (sezione successiva).