Det här sätter du upp
FreePBX är en telefonväxel för kontoret eller hemmet. Du skapar anknytningar, röstbrevlådor, köer och samtalsvägar i webbläsaren, och FreePBX skriver konfigurationen åt Asterisk, programmet som kopplar samtalen. Bordstelefoner och telefonappar ansluter över SIP.
FreePBX skiljer sig från apparna i våra andra guider. Sangomas installationsprogram tar över hela servern och installerar egen webbserver, databas och brandvägg, och det körs som root. Det stöder bara Debian 12, så FreePBX behöver en egen server, nyinstallerad med Debian 12.
Varje steg nedan har körts på en nyinstallerad VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 12:
- FreePBX 17.0.33 med Asterisk 22.11.0 installerades på omkring 30 minuter, och administratörskontot skapades i webbläsaren.
- Webbgränssnittet fick ett certifikat från Let's Encrypt via FreePBX egen Certificate Management.
- Två anknytningar registrerade sig från SIP-klienter på ett annat nät, och ett samtal mellan dem bar ljud åt båda hållen via servern, utan förlorade paket.
- Med brandväggen påslagen svarade SSH och webbgränssnittet bara den betrodda adressen, och alla andra fick timeout. En SIP-klient från en adress som inte var betrodd kunde ändå registrera sig och ringa, tack vare Responsive Firewall.
- SIP-skannrar dök upp inom två timmar och provade konton som
100och10000. Asterisk nekade varje försök. - En säkerhetskopia tog omkring en minut. När en anknytning hade tagits bort tog en återställning tillbaka den, och telefonen registrerade sig igen med sitt gamla lösenord.
- Allt startade igen av sig självt efter en omstart av servern.
Servern använde mellan 1,1 och 1,5 GB minne, det mesta i MariaDB, Apache och FreePBX tjänster i Node.js.
Innan du börjar
Du behöver:
- en nyinstallerad server hos Melonslab med Debian 12 och inget annat installerat. FreePBX 17 stöder bara Debian 12, och installationsprogrammet avbryter på Debian 13. Du väljer Debian 12 när du beställer servern, eller när du installerar om den i kundportalen;
- ett namn för den, till exempel
pbx.example.com, med en A-post och en AAAA-post som pekar på servern; - den publika IPv4-adress som du sköter servern från, till exempel kontorets adress. Brandväggen i steg 4 släpper bara in den adressen till SSH och webbgränssnittet.
curl -4 ifconfig.mepå din egen dator visar den.
Sätt upp SSH-nycklar och automatiska säkerhetsuppdateringar som i steg 1 till 3 i säkerhetsguiden, och hoppa över dess steg 4: FreePBX har en egen brandvägg, som själv sköter iptables.
Exemplen använder pbx.example.com, 203.0.113.10 för servern och 198.51.100.7 för din egen adress. Byt ut dem genomgående.
1. Förbered servern
FreePBX använder serverns namn för sitt certifikat. Som root:
hostnamectl set-hostname pbx.example.com
sed -i "s/^127\.0\.1\.1.*/127.0.1.1 pbx.example.com pbx/" /etc/hosts
timedatectl set-timezone Europe/Stockholm
apt update
apt full-upgrade -y
Om uppgraderingen installerade en ny kärna startar du om servern innan du går vidare, med systemctl reboot.
2. Installera FreePBX
Det här är Sangomas eget installationsprogram, som det beskrivs i dess README:
wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
bash /tmp/sng_freepbx_debian_install.sh
Det tog omkring 30 minuter på vår testserver och avslutas med Finished FreePBX 17 installation process och ett meddelande om att maskinen inte är aktiverad. Loggen finns i /var/log/pbx/.
Installationsprogrammet låser också FreePBX egna paket, så att apt upgrade låter dem vara, och spärrar paket från Debian 13, så att servern inte kan uppgraderas till en Debian-version som FreePBX inte stöder.
När det är klart är ingenting skyddat ännu: brandväggen är avstängd, och den som först öppnar webbgränssnittet skapar administratörskontot. Gör steg 3 direkt.
3. Skapa administratörskontot
Öppna http://203.0.113.10/admin och fyll i Initial Setup:
- Username, Password och Confirm Password för administratörskontot.
- Notifications Email address, dit FreePBX skickar meddelanden om uppdateringar och säkerhet.
- System Identifier, ett namn för servern, till exempel
pbx.example.com. - Under System Updates är Automatic Module Updates satt till Enabled från början. Behåll det, och välj dag och tid under Check for Updates every.
Välj Setup System, sedan FreePBX Administration, och logga in.
FreePBX visar nu en rad fönster:
- Would you like to activate your new system now? Välj Skip. Aktiveringen är frivillig, och steg 8 förklarar vad den innebär.
- Reklam för Sangomas egna produkter: PBXact Cloud, Sipstation, Soft clients, Sangoma Phones och Reseller Program. Välj Skip i vart och ett.
- Please Select the default locales of the PBX. För svenska röstmeddelanden väljer du Swedish under Sound Prompts Language och sedan Submit.
Nästa fönster är Sangoma Smart Firewall is now enabled! Stanna där, och gör steg 4 över SSH innan du väljer Continue.
4. Slå på brandväggen utan att låsa ute dig själv
Guiden frågar om den ska lita på datorn du använder. I vårt test låste ett Yes ute oss: från det ögonblicket nekade SSH och webbgränssnittet varje ny anslutning, tills brandväggen stängdes av från konsolen. Steget laddar FreePBX regler, som stoppar allt som inte är tillåtet, innan din adress läggs till, och ingenting lägger till den förrän brandväggstjänsten startar.
Lita därför på din adress och starta brandväggen själv, med ett enda kommando över SSH:
fwconsole firewall trust 198.51.100.7 && fwconsole firewall start
SSH-sessionen förblir öppen. fwconsole firewall list trusted visar adressen. Ladda sedan om sidan i webbläsaren och gå igenom guiden. Den frågar inte längre om att lita på din dator:
- Continue och sedan Next.
- Enable Responsive Firewall? Välj Yes. Telefoner och appar från vilken adress som helst kan då registrera sig, och var och en släpps in när den har loggat in.
- Automatically configure Asterisk IP Settings? Välj Yes. FreePBX ställer in serverns publika adress och lokala nät för SIP.
- SIPStation Free Trial: välj Not Now.
Brandväggen fungerar nu så här:
- Din betrodda adress når allt: SSH, webbgränssnittet på port 80 och 443, och resten.
- Alla andra når bara SIP på UDP-port 5060 och ljud (RTP) på UDP-portarna 10000 till 20000. Anslutningar till SSH och webbgränssnittet får timeout.
- En telefon som har registrerat sig släpps också in till User Control Panel (UCP), där användarna lyssnar på röstmeddelanden. Adresser som skickar för många förfrågningar blockeras.
Samma regler gäller för IPv6. Bara IPv4-adressen du litade på är betrodd, så reglerna blockerar även SSH och webbgränssnittet över IPv6. Vi kontrollerade IPv6-reglerna och HTTPS över IPv6 från själva servern, inte från ett annat IPv6-nät. Asterisk lyssnar på SIP bara över IPv4, så telefonerna ansluter över IPv4.
Om din egen adress ändras, till exempel hemma, blir du utelåst från SSH och webbgränssnittet. Logga in på konsolen i kundportalen och lita på den nya adressen, som ovan.
Efter en omstart av servern väntar brandväggen tills servern har varit igång i 5 minuter innan den laddar sina regler. Fram till dess släpper den igenom allt.
Intrusion detection är fail2ban, som installationsprogrammet har satt upp. Det spärrar en adress i 30 minuter efter 5 misslyckade inloggningar via SIP eller webben inom 10 minuter, eller 3 misslyckade via SSH. Inställningarna finns på Connectivity, Firewall, under Intrusion Detection.
5. Skaffa ett certifikat
Brandväggen släpper själv in Let's Encrypt på port 80. Öppna Admin och sedan Certificate Management i FreePBX:
- Välj New Certificate och sedan Generate Let's Encrypt Certificate.
- Certificate Host Name visar redan
pbx.example.com. Ange din e-postadress under Owners Email, välj Sweden som Country och ditt län som State. - Välj Generate Certificate. Sidan visar LetsEncrypt Generation Success!.
Gör det till standardcertifikat, så att resten av FreePBX också använder det:
fwconsole certificates --default=pbx.example.com
Webbservern använder fortfarande sitt eget certifikat. Gratisversionen av System Admin, där FreePBX ställer in webbserverns certifikat, fungerar bara på aktiverade servrar, så peka webbservern mot certifikatet själv:
sed -i -e "s|^\(\s*SSLCertificateFile\s\+\).*|\1/etc/asterisk/keys/pbx.example.com-fullchain.crt|" \
-e "s|^\(\s*SSLCertificateKeyFile\s\+\).*|\1/etc/asterisk/keys/pbx.example.com.key|" \
/etc/apache2/sites-available/default-ssl.conf
echo "30 0 * * * root systemctl reload apache2" > /etc/cron.d/reload-apache-cert
apachectl configtest && systemctl reload apache2
FreePBX kontrollerar sina certifikat varje natt klockan 00.16 och förnyar dem när det behövs. Filen i /etc/cron.d laddar om webbservern varje natt efter det, så att den läser in ett förnyat certifikat. Vi såg certifikatet utfärdas, men väntade inte på en förnyelse.
Öppna från och med nu https://pbx.example.com/admin. FreePBX svarar också fortfarande på vanlig HTTP, utan att skicka dig vidare till HTTPS, så använd adressen med https://.
Ställ också in FreePBX egen tidszon, under Settings, Advanced Settings, PHP Timezone, eller med:
fwconsole setting PHPTIMEZONE Europe/Stockholm
Den är UTC från början. En återställning (steg 9) sätter serverns tidszon från den här inställningen, så utan den går servern över till UTC efter en återställning.
6. Lägg till anknytningar
Öppna Connectivity och sedan Extensions. Välj Add Extension och sedan Add New SIP chan_pjsip Extension:
- User Extension: numret, till exempel
101. - Display Name: personens namn.
- Secret: FreePBX fyller i ett långt slumpat lösenord. Spara det, det är vad telefonen loggar in med.
Välj Submit och sedan den röda knappen Apply Config högst upp. FreePBX skriver den nya konfigurationen åt Asterisk först när du tillämpar den. Upprepa för varje anknytning, till exempel 102.
Ange följande i telefonen eller appen:
| Inställning | Värde |
|---|---|
| Server, domän eller registrar | pbx.example.com |
| Användarnamn | anknytningen, till exempel 101 |
| Lösenord | Secret |
| Transport | UDP, port 5060 |
Ring 102 från 101 för att prova. Vi testade med baresip, en SIP-klient för kommandoraden, på en dator bakom NAT på ett annat nät. Båda anknytningarna registrerade sig, och samtalet bar ljud åt båda hållen via servern.
7. Se vad brandväggen gör
På Connectivity, Firewall visar fliken Status Registered Endpoints, adresserna som Responsive Firewall har släppt in, och Blocked Hosts. Från kommandoraden:
fwconsole firewall f2bstatus
fail2ban-client status asterisk-iptables
Misslyckade SIP-inloggningar loggas i /var/log/asterisk/fail2ban. På vår testserver kom de första skannrarna inom två timmar och provade vanliga anknytningsnummer. Eftersom varje anknytning har ett långt slumpat lösenord misslyckas deras försök.
8. Kommersiella moduler och vad FreePBX skickar till Sangoma
FreePBX är öppen källkod, men installationsprogrammet installerar också Sangomas kommersiella moduler: 35 av de 114 modulerna på vår testserver, till exempel System Admin, Endpoint Manager och SIPStation. Deras kod är krypterad med ionCube, så du kan inte läsa vad de gör. Brandväggen kräver den kommersiella modulen System Admin, och därför behåller den här guiden dem. Installationsprogrammets flagga --opensourceonly tar bort dem, och brandväggen med dem.
Aktiveringen registrerar servern hos Sangoma och behövs för att köpa kommersiella moduler eller support. Den frågar efter en e-postadress och ett lösenord för ett konto i Sangomas portal, ett namn och, om du vill, telefonnummer, postadress och företagsnamn. Allt i den här guiden fungerar utan den.
Även utan aktivering kontaktar FreePBX Sangoma:
- Varje gång den letar efter moduluppdateringar skickar den ett installations-id, ett hashat maskin-id, versionerna av FreePBX, Asterisk och PHP, listan över installerade moduler och antalet användare.
- Administrationssidorna laddar Google Analytics och skickar versionerna av FreePBX, Asterisk och PHP medan du klickar runt. På en aktiverad server skickar de också dess deployment-id. Stäng av det:
fwconsole setting BROWSER_STATS 0
Därefter skickades inga fler händelser, men sidorna laddar fortfarande Googles skript från www.googletagmanager.com. Översiktssidan hämtar också nyheter från freepbx.org och asterisk.org.
Modulen VoIPInnovations är till för en amerikansk trunkleverantör. När vi återställde en säkerhetskopia (steg 9) lade den till sju adresser, "VoipInnovations Cloud Network", i brandväggens zon Internal, som når SSH och webbgränssnittet. Om du inte använder VoIPInnovations tar du bort modulen:
fwconsole ma remove voipinnovations
En återställning efter det lade inte till dem igen. fwconsole firewall list internal visar vad som finns i zonen.
9. Säkerhetskopiera
Öppna Admin och sedan Backup & Restore, och välj Add Backup:
- Ange ett Backup Name, till exempel
nightly. - Välj Local backup storage under Storage Location.
- Under Schedule and Maintenance sätter du Enabled till Yes och Every till Day, med en tid som 03.00.
- Välj Save. Uppspelningsknappen bredvid säkerhetskopian kör den direkt.
Säkerhetskopian tog omkring en minut och var 71 MB, mest data för Endpoint Manager och väntmusik. Den sparas i /var/spool/asterisk/backup. Den innehåller allt, även anknytningarnas lösenord och certifikatets privata nyckel, och FreePBX gör den läsbar för alla användare på servern. Stäng katalogen:
chmod 700 /var/spool/asterisk/backup
En säkerhetskopia som stannar på servern hjälper inte om servern går förlorad, så kopiera filerna till en annan maskin, till exempel med scp, och förvara dem säkert.
För att återställa öppnar du fliken Restore, väljer uppspelningsknappen bredvid säkerhetskopian under Restore from local cache och Ok. En säkerhetskopia från en annan server kan laddas upp där först. Återställningen tog omkring 5 minuter på vår testserver.
10. Uppdateringar
Med Automatic Module Updates påslaget från steg 3 uppdaterar FreePBX sina egna moduler varje vecka. För att uppdatera nu:
fwconsole ma upgradeall
De automatiska säkerhetsuppdateringarna från säkerhetsguiden installerar Debians egna uppdateringar. Asterisk och FreePBX egna paket kommer från Sangomas paketförråd, som de automatiska säkerhetsuppdateringarna inte använder, och installationsprogrammet låser FreePBX och Node.js, så de ändras bara när du uppdaterar dem själv. Uppgradera inte servern till Debian 13 innan Sangoma stöder det.
Felsökning
Du når inte SSH eller webbgränssnittet efter att ha slagit på brandväggen. Din adress är inte betrodd, eller så har den ändrats. Logga in som root på konsolen i kundportalen och kör fwconsole firewall trust 198.51.100.7 && fwconsole firewall start med din nuvarande adress. För att stänga av brandväggen helt kör du fwconsole firewall disable.
FreePBX ber dig aktivera servern. Välj Skip. Aktiveringen är frivillig (steg 8).
Webbläsaren varnar för certifikatet. Webbservern använder fortfarande sitt eget certifikat. Kör kommandot med sed i steg 5, och öppna adressen https://pbx.example.com, inte IP-adressen.
En telefon registrerar sig men samtalet saknar ljud. Kontrollera att du svarade Yes på Automatically configure Asterisk IP Settings? i steg 4. Under Settings, Asterisk SIP Settings ska External Address vara serverns publika IPv4-adress.
fwconsole misslyckas med "Permission denied" när den skriver en fil. Den körs som användaren asterisk, som inte kan skriva i /root. Ange en sökväg som /tmp i stället.