SSD Nodes Learn 🎉 VPS $5.50/महिन्यापासून
मार्गदर्शक Matt Connorद्वारे Matt Connor

स्वतःचा VoIP सर्व्हर: Asterisk की FreePBX?

VPS वर Asterisk किंवा FreePBX चालवताना SIP trunk, RTP port ranges आणि scanner रोखणारे firewall rules कसे सेट करावेत, तसेच toll fraud कसा सुरू होतो ते जाणून घ्या.

स्वतः-होस्ट केलेला VoIP सर्व्हर म्हणजे काय

स्वतः-होस्ट केलेला VoIP सर्व्हर म्हणजे तुम्ही नियंत्रित करत असलेल्या VPS वर चालणारा SIP सर्व्हर. त्यामुळे तुमचे कॉल hosted phone service ऐवजी तुमच्या स्वतःच्या मशीनमार्फत route केले जातात. VoIP (voice over IP) मध्ये आवाज UDP packets म्हणून पाठवला जातो. SIP (session initiation protocol) हे कॉल सुरू आणि समाप्त करणारे signalling आहे. ऑडिओ SIP वरून प्रवास करत नाही. खालीलपैकी बहुतेक समस्या याच एका तथ्यामुळे निर्माण होतात.

कार्यरत प्रणालीसाठी चार भाग आवश्यक असतात.

  • PBX (private branch exchange) software. Asterisk ही नेहमीची निवड आहे. त्यात extensions आणि dialplan असतात.
  • Endpoints. Desk phones किंवा softphones username आणि secret वापरून PBX वर register होतात.
  • SIP trunk. हा provider कडील सशुल्क account असतो. तो तुम्हाला public telephone network शी जोडतो आणि प्रत्यक्ष phone numbers भाड्याने देतो.
  • Media path. RTP (real-time transport protocol) flows ऑडिओ स्वतंत्र UDP ports वरून वाहून नेतात.

PBX स्वतः host करण्याचा अर्थ phone numbers स्वतः host करणे असा नाही. Numbers carrier कडून मिळतात आणि प्रत्येक number तसेच प्रत्येक minute साठी तुम्हाला पैसे द्यावे लागतात. तुमच्या नियंत्रणात call routing, voicemail, recordings आणि extension list असतात. पैशांसाठी हल्ले करणाऱ्या लोकांपासून अशा सेवेची security राखण्याची जबाबदारीही तुमचीच असते.

स्वतः होस्ट केलेल्या VoIP सर्व्हरला कोणते पोर्ट आवश्यक असतात?

SIP signalling साठी UDP आणि TCP वर port 5060 वापरले जाते. SIP over TLS (transport layer security) साठी port 5061 वापरले जाते. या पोर्टवर फक्त call setup संदेश वाहून नेले जातात. प्रत्येक call चा audio स्वतंत्र UDP flow मधून पाठवला जातो. त्यासाठी RTP range मधील port वापरले जाते. Asterisk सोबत येणाऱ्या sample rtp.conf मध्ये rtpstart=10000 आणि rtpend=20000 सेट केलेले असतात. Compiled-in defaults 5000 आणि 31000 आहेत. प्रत्येक call साठी या range मधून दोन पोर्ट लागतात. एक RTP साठी आणि एक RTCP (RTP control protocol) साठी.

बहुतेक पहिल्या प्रयत्नांमध्ये अडचण याच विभाजनामुळे येते. Call connect होतो. दोन्ही फोन call answered दाखवतात. तरीही दोन्ही बाजूंना audio ऐकू येत नाही. याचे कारण firewall 5060 ला परवानगी देतो, पण प्रत्येक RTP packet टाकून देतो. Signalling आणि media हे स्वतंत्र flows आहेत. त्यामुळे त्यांच्यासाठी स्वतंत्र firewall rules आवश्यक असतात. हा फरक नवीन असल्यास, काहीही उघडण्यापूर्वी Linux वर ports आणि listening sockets कसे कार्य करतात हे वाचणे उपयुक्त ठरेल.

Port उघडण्यापूर्वी range लहान करा. वीस हजार ports लहान system साठी आवश्यकतेपेक्षा खूपच जास्त आहेत. प्रत्येक call साठी दोन ports लागतात. त्यामुळे दोनशे ports ची range एकाच वेळी शंभर calls साठी पुरेशी ठरते.

[general]
rtpstart=10000
rtpend=10200

sudo asterisk -rx "core reload" वापरून ते लागू करा.

Asterisk किंवा FreePBX पैकी कोणते स्थापित करावे?

Asterisk हे मुख्य engine आहे. तुम्ही ते /etc/asterisk मधील text files वापरून configure करता आणि dialplan स्वतः लिहिता. FreePBX हे PHP आणि JavaScript मध्ये लिहिलेले web interface आहे. ते Asterisk वर चालते, त्या files तुमच्यासाठी generate करते आणि voicemail व call queues साठी modules जोडते.

VPS वर महत्त्वाचा फरक म्हणजे machine चे ownership. August 2026 पर्यंत अधिकृत FreePBX 17 installer ला vanilla Debian 12 system अपेक्षित आहे. तो Asterisk, web server, database server आणि PHP स्थापित करतो. आधीच इतर services चालू असलेल्या box वर तो installer चालवला, तर परिणाम चांगला मिळणार नाही. FreePBX साठी स्वतंत्र VPS वापरा.

wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
sudo bash /tmp/sng_freepbx_debian_install.sh

Install log /var/log/pbx/freepbx17-install.log मध्ये साठवला जातो. Script लवकर थांबली, तर तपासण्याचे हे पहिले ठिकाण आहे.

FreePBX स्वतः generate केलेल्या configuration files चे ownership ठेवते. FreePBX box वर pjsip.conf हाताने edit केले, तर GUI पुढच्या वेळी ती file लिहिताना तुमचा बदल नाहीसा होईल. हाताने लिहिलेल्या config साठी FreePBX नावात _custom असलेल्या स्वतंत्र files वाचते आणि त्या files मध्ये बदल करत नाही.

या दोन्ही पर्यायांमधील वास्तविक तडजोड अशी आहे. FreePBX तुम्हाला GUI देते आणि तुमच्या phone system साठी login page सार्वजनिक internet वर उपलब्ध करते. Raw Asterisk मध्ये web surface अजिबात नसते. प्रत्येक setting ही file मधील documented directive असते. ती तुम्ही वाचू शकता आणि git मध्ये ठेवू शकता. FreePBX स्थापित केल्यास त्याचा web port फक्त तुमच्या स्वतःच्या address साठी उपलब्ध ठेवा किंवा VPN द्वारे access करा. कारण PBX साठीचे admin GUI हे थेट पैशांपर्यंत पोहोचू शकणारे target आहे.

Version note, August 2026 पर्यंत अचूक: Asterisk 22 ही सध्याची long term support release आहे. ती October 2024 मध्ये published झाली आणि October 2028 पर्यंत security fixes मिळतील. Asterisk 23 ही standard release आहे. Ubuntu 24.04 मध्ये universe repository मधून Asterisk 20.6.0 उपलब्ध आहे.

Ubuntu 24.04 वर Asterisk स्थापित करा

वितरणाचे package वापरणे हा जलद मार्ग आहे. Ubuntu त्यात आवश्यक patches लागू करते आणि ते systemd अंतर्गत आपोआप सुरू होते.

sudo apt update
sudo apt install -y asterisk
sudo asterisk -rx "core show version"

Source मधून build केल्यास त्याऐवजी सध्याचे long term support release मिळते.

sudo apt update
sudo apt install -y build-essential wget
cd /usr/local/src
sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
sudo tar -xzf asterisk-22-current.tar.gz
cd asterisk-22.*
sudo contrib/scripts/install_prereq install
sudo ./configure
sudo make menuselect
sudo make -j"$(nproc)"
sudo make install
sudo make samples
sudo make config
sudo ldconfig

install_prereq install तुमच्या distribution साठी build dependencies install करते, तर install_prereq test काहीही बदल न करता चालवली जाणारी commands दाखवते. make menuselect module picker उघडते. येथे Codec Translators अंतर्गत codec_opus enable करा. नवीन install वरच make samples चालवा, कारण ते sample configuration /etc/asterisk मध्ये लिहिते. make config init script /etc/init.d/asterisk येथे install करते. systemd ते आपल्या SysV compatibility layer द्वारे चालवते. त्यामुळे त्यानंतर sudo systemctl enable --now asterisk कार्य करते.

तुम्ही कोणताही मार्ग निवडला असला तरी sudo asterisk -rvvv चालू daemon शी जोडते आणि CLI देते. तेथे core show version चालवल्यास प्रत्यक्षात install केलेली आवृत्ती दाखवते.

SIP trunk आणि एक extension configure करणे

सध्याच्या Asterisk मध्ये PJSIP हा SIP channel driver आहे. त्याची configuration /etc/asterisk/pjsip.conf मध्ये असते आणि एकमेकांना नावाने reference करणाऱ्या लहान typed sections पासून ती तयार होते. वेगवेगळ्या प्रकारच्या sections चे नाव समान असू शकते. म्हणूनच खालील प्रत्येक block ला mytrunk असे नाव दिले आहे.

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

[mytrunk]
type=registration
outbound_auth=mytrunk
server_uri=sip:sip.example.com
client_uri=sip:1234567890@sip.example.com
retry_interval=60

[mytrunk]
type=auth
auth_type=userpass
username=1234567890
password=REPLACE_WITH_A_LONG_RANDOM_SECRET

[mytrunk]
type=aor
contact=sip:sip.example.com:5060

[mytrunk]
type=endpoint
context=from-trunk
disallow=all
allow=ulaw
outbound_auth=mytrunk
aors=mytrunk

[mytrunk]
type=identify
endpoint=mytrunk
match=sip.example.com

registration object तुमच्या provider ला REGISTER पाठवतो. त्यातून provider ला तुमचे calls कुठे पाठवायचे हे कळते. Provider कडून येणारा call source address नुसार या endpoint शी जुळवण्यासाठी identify object वापरला जातो. Provider साधारणपणे येथे नोंदवण्यासाठी अनेक addresses देतो. Outbound registration आणि endpoint हे जाणीवपूर्वक स्वतंत्र objects आहेत. एक object provider ला तुम्ही कुठे आहात हे सांगतो. दुसरा object आलेल्या calls चे काय करायचे ते ठरवतो.

Desk phone साठी आणखी तीन objects आवश्यक आहेत.

[6001]
type=endpoint
context=internal
disallow=all
allow=ulaw
auth=auth6001
aors=6001
direct_media=no

[auth6001]
type=auth
auth_type=userpass
username=6001
password=REPLACE_WITH_A_LONG_RANDOM_SECRET

[6001]
type=aor
max_contacts=1

direct_media=no Asterisk ला media path मध्ये ठेवते. हे वगळल्यास Asterisk दोन्ही endpoints ना RTP थेट एकमेकांकडे पाठवण्याचा प्रयत्न करेल. Home router वरील NAT (network address translation) मागे phone असल्यास ते अपयशी ठरते. Secret आणि extension number कधीही समान ठेवू नका. उदाहरण वाचायला सोपे राहावे म्हणून upstream sample मध्ये extension 6001 साठी password=6001 वापरले आहे. Scanners सर्वप्रथम हाच pattern वापरून पाहतात.

/etc/asterisk/extensions.conf मधील dialplan प्रत्येक context ला कोणती कामे करण्याची परवानगी आहे ते ठरवतो.

[internal]
exten => 6001,1,Dial(PJSIP/6001,20)
exten => _9X.,1,Dial(PJSIP/${EXTEN:1}@mytrunk,60)

[from-trunk]
exten => 1234567890,1,Dial(PJSIP/6001,20)
same => n,Hangup()

हे दोन contexts security boundary म्हणून काम करतात. from-trunk provider कडून येणारे calls हाताळते आणि फक्त extension 6001 वर ring करू शकते. तिला _9X. pattern पर्यंत पोहोचता येत नाही. त्यामुळे बाहेरून आलेला call तुमच्या trunk द्वारे पुन्हा बाहेर call करू शकत नाही. Contexts merge केल्यास toll fraud साठी नेहमीचा मार्ग तयार होतो: एखादा अनोळखी व्यक्ती तुमच्या number वर call करतो, तुमचा dialplan तुमच्या account वरून बाहेर call करतो आणि त्याचा खर्च तुम्हाला भरावा लागतो.

Configuration लागू करा आणि ती तपासा.

sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "pjsip show registrations"
sudo asterisk -rx "pjsip show endpoints"

pjsip show registrations मध्ये mytrunk ची नोंद Registered status सह दिसली पाहिजे. Rejected याचा अर्थ provider ने तुमची credentials नाकारली आहेत. Unregistered याचा अर्थ तुमच्या REGISTER ला उत्तर मिळत नाही. त्यामुळे पुढे firewall तपासा.

SIP आणि RTP साठी firewall नियम

Signalling आणि media यांना वेगळी हाताळणी आवश्यक आहे, कारण त्यांच्याशी संबंधित जोखीम वेगवेगळी असते. 5060 फक्त तुमचा provider प्रत्यक्षात वापरत असलेल्या addresses आणि तुमचे phones ज्या networks वर आहेत त्या networks साठीच उपलब्ध ठेवा.

sudo ufw allow proto udp from 203.0.113.10 to any port 5060
sudo ufw allow proto tcp from 203.0.113.10 to any port 5060
sudo ufw allow 10000:10200/udp
sudo ufw status verbose

RTP range तितकी मर्यादित करता येत नाही, कारण media अनेकदा signalling पेक्षा वेगळ्या address वरून येते. तुमच्या provider कडून त्यांच्या media subnets ची माहिती मागा. त्यांनी ते subnets प्रकाशित केले असल्यास, प्रवेश फक्त त्यांच्यापुरता मर्यादित ठेवा. तुमच्या सर्वाधिक व्यस्त तासासाठी आवश्यक असेल इतकाच मोठा range ठेवा. Default policies, rule order आणि ufw model मधील इतर बाबी VPS साठी ufw firewall basics guide मध्ये दिल्या आहेत.

IPv6 देखील तपासा. /etc/default/ufw मध्ये IPV6=no सेट असल्यास, ufw IPv6 traffic अजिबात filter करत नाही. त्यामुळे :: शी bound असलेला daemon, वरीलपैकी कोणतेही नियम लागू न होता, IPv6 वरून reachable राहतो. ufw वापरून IPv6 साठी ports उघडणे या लेखात दोन्ही address families मधील फरक स्पष्ट केला आहे. बहुतेक providers control panel मध्ये स्वतंत्र network firewall देखील देतात. तो firewall तुमची packets VPS पर्यंत पोहोचण्यापूर्वी लागू होतो. त्यामुळे एखादा port दोन्ही ठिकाणी open असणे आवश्यक आहे.

SIP brute force आणि toll fraud या दुर्लक्ष करता न येणाऱ्या समस्या आहेत

5060 सार्वजनिक address वर ठेवताच scans सुरू होतात. Pattern स्थिर असतो: अनेक source addresses कडून REGISTER आणि INVITE requests येतात आणि त्यात सामान्य extension numbers सोबत सामान्य secrets वापरून पाहिले जातात. Asterisk प्रत्येक failure log करते आणि त्या log line चा आकार असा असतो.

Request 'REGISTER' from '<sip:1000@198.51.100.20>' failed for '198.51.100.20:5060' (callid: 5f1a5c0d) - No matching endpoint found

यासाठी प्रत्यक्ष प्रयत्न करणे आवश्यक आहे, कारण यात पैसे धोक्यात असतात. चोरलेला extension महागड्या international calls करण्यासाठी वापरला जातो. हे calls अनेकदा premium rate numbers कडे केले जातात, ज्यातून attacker ला हिस्सा मिळतो. हे calls तुमच्या credentials ने केलेले असल्यामुळे bill तुम्हालाच भरावा लागतो. ही प्रक्रिया machine speed ने चालते आणि बहुतेक वेळा रात्रभर सुरू असते.

खालील सहा controls optional hardening नसून अनिवार्य आहेत.

  • ज्याचा secret स्वतःचा number किंवा एखादा लहान शब्द आहे असा extension कधीही तयार करू नका. openssl rand -base64 24 वापरून secret generate करा आणि तो paste करा.
  • Anonymous inbound calls बंद ठेवा. PJSIP unidentified calls default ने नाकारते आणि त्या फक्त anonymous नावाचा endpoint तयार केल्यास स्वीकारते. असा endpoint तयार करू नका.
  • वर दाखवल्याप्रमाणे trunk context हा dial out करू शकणाऱ्या कोणत्याही context पासून वेगळा ठेवा.
  • ufw आणि provider च्या network firewall या दोन्ही ठिकाणी source address नुसार signalling restrict करा.
  • तुमच्या SIP trunk provider कडे spending cap सेट करा आणि तुम्ही कधीही call न करणारी international destinations disable करा. इतर controls अयशस्वी झाल्यावर होणारे नुकसान मर्यादित करणारा हा एकमेव control आहे.
  • Asterisk log वर fail2ban चालवा.

एका address कडून वारंवार unmatched requests आल्यावर Asterisk security event देखील तयार करू शकते. pjsip.conf मधील [global] section unidentified_request_count स्वीकारतो, ज्याची default value 5 आहे, आणि unidentified_request_period स्वीकारतो, ज्याची default value 5 seconds आहे. या दोन्हींचा अर्थ असा की पाच seconds च्या आत एका address कडून आलेल्या पाच unmatched requests मुळे security event तयार होतो आणि fail2ban त्यावर कार्य करू शकते.

स्कॅनरना fail2ban ने प्रतिबंधित करा

fail2ban मध्ये asterisk jail आधीपासून उपलब्ध आहे. ते 5060 आणि 5061 पोर्टचा समावेश करते, /var/log/asterisk/messages वाचते आणि maxretry = 10 हे default मूल्य वापरते. /etc/fail2ban/jail.local मध्ये enable करेपर्यंत हे jail बंद राहते.

[asterisk]
enabled = true
maxretry = 5
findtime = 600
bantime = 86400
sudo systemctl restart fail2ban
sudo fail2ban-client status asterisk

योग्य परिणामात jail ची log file आणि सध्या प्रतिबंधित केलेल्या addresses ची संख्या दिसते. सार्वजनिक 5060 पोर्टवर ही संख्या एका दिवसात शून्य राहात नाही. उपलब्ध filter वरील No matching endpoint found notices शी जुळतो. तो Asterisk च्या संरचित SecurityEvent lines शी देखील जुळतो. हे events स्वतंत्र log channel कडे पाठवले जातात. /etc/asterisk/logger.conf मध्ये हा channel comment केलेला आहे. हे events हवे असल्यास तेथे तो enable करा आणि jail च्या logpath मध्ये ती file जोडा.

[logfiles]
console => notice,warning,error
messages.log => notice,warning,error
security.log => security

sudo asterisk -rx "logger reload" ने logger reload करा. या filter मध्ये asterisk.service साठी journalmatch देखील आहे. त्यामुळे log files ठेवायच्या नसल्यास journal backend वापरता येतो. Installation, jail.local structure आणि चुकून स्वतःचा address lock out केल्यास तो unban करण्याची पद्धत Ubuntu 24.04 साठी fail2ban मार्गदर्शक मध्ये दिली आहे.

दूरस्थ VPS वरील latency आणि codec ची निवड

Latency भूगोलामुळे ठरते; ती configuration करून दूर करता येत नाही. ITU-T G.114 नुसार सामान्य संभाषणासाठी one-way delay 150 ms पेक्षा कमी ठेवावा आणि सुमारे 400 ms पर्यंतचा delay वापरण्यायोग्य मानला जातो. फोनवरील audio तुमच्या VPS पर्यंत जाते आणि तेथून trunk provider कडे जाते. त्यामुळे चुकीच्या region मधील VPS निवडल्यास हा प्रवास दोनदा करावा लागतो. VPS फोनजवळ किंवा provider जवळ ठेवा. हे दोन्ही पर्याय परस्परविरोधी असल्यास फोनजवळचा पर्याय निवडा, कारण तो मार्ग सहसा consumer internet वरून जातो आणि तेथे jitter सर्वाधिक असतो.

Codec ची निवड प्रत्येक call साठी लागणारी bandwidth ठरवते. येथे प्रत्येक codec दर 20 ms ला एक packet पाठवतो. म्हणजे 50 packets प्रति सेकंद. प्रत्येक packet मध्ये audio payload व्यतिरिक्त IP, UDP आणि RTP headers साठी 40 bytes असतात.

ChartBandwidth per concurrent call, one direction, 20 ms packets
The data behind this chart
[
  {
    "label": "G.711 ulaw",
    "payload_kbps": 64,
    "ip_kbps": 80
  },
  {
    "label": "G.722",
    "payload_kbps": 64,
    "ip_kbps": 80
  },
  {
    "label": "Opus at 24 kbps",
    "payload_kbps": 24,
    "ip_kbps": 40
  },
  {
    "label": "G.729",
    "payload_kbps": 8,
    "ip_kbps": 24
  }
]

G.711 ulaw हा बहुतांश trunks वरील default आहे. त्याचा payload 64 kbps आहे. Headers धरल्यास सुरू असलेल्या call साठी प्रत्येक दिशेने 80 kbps bandwidth लागते. Opus 24 kbps वर 40 kbps वापरतो. G.729 audio quality आणि CPU time यांची किंमत देऊन bandwidth 24 kbps पर्यंत कमी करतो. ही आकडेवारी measurements नसून headers वरील arithmetic आहे: payload rate अधिक 50 packets प्रति सेकंदांसाठी प्रत्येक packet चे 40 bytes. Ethernet किंवा VLAN framing मुळे wire वर आणखी थोडी bandwidth वाढते.

Transcoding साठी CPU लागतो. तुमचे phones आणि trunk दोन्ही ulaw वापरत असल्यास फक्त ulaw ला परवानगी द्या; Asterisk audio मध्ये कोणताही बदल न करता ते पुढे पाठवतो. Lossy links वर Opus चांगली कामगिरी करतो. मात्र Opus आणि G.711 यांच्यात transcoding करण्यासाठी बाह्य codec_opus module आवश्यक आहे. तो make menuselect मध्ये निवडता येतो आणि default configuration मध्ये build केलेला नसतो.

काय बिघडते आणि दिसणारा संदेश

कॉल जोडला जातो, पण कोणालाही आवाज ऐकू येत नाही. RTP येत नाही. rtp.conf मधील range ही firewall मध्ये उघडलेल्या range शी जुळते का ते तपासा. त्यानंतर कॉल करताना sudo tcpdump -ni any udp portrange 10000-10200 वापरून packets वर लक्ष ठेवा. एकही packet दिसत नसेल, तर तुमचा firewall किंवा provider च्या network firewall कडून ते packets टाकून दिले जात आहेत.

फक्त एका दिशेने audio येतो. एक बाजू RTP अशा address वर पाठवत आहे जिथे ते स्वीकारता येत नाही. ही port ची नव्हे, तर address ची समस्या आहे. तुमच्या VPS च्या interface वर public address थेट दिलेला असल्यास NAT handling आवश्यक नाही. Provider ने VPS ला private address देऊन one to one public mapping केली असल्यास, transport वर public address सेट करा आणि तुमची private range local_net मध्ये नमूद करा.

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
local_net=10.0.0.0/8
external_media_address=198.51.100.5
external_signaling_address=198.51.100.5

log मध्ये No matching endpoint found. IP address किंवा username नुसार request कोणत्याही endpoint शी जुळली नाही. Scanner कडून आलेली request असल्यास हे सामान्य आहे आणि fail2ban ती हाताळेल. तुमच्या स्वतःच्या provider कडून आलेली असल्यास, ते ज्या address वरून तुम्हाला call करतात तो address identify section मध्ये नमूद केलेला नाही.

registration status Rejected आहे. Provider ने तुमच्या auth section मधील credentials नाकारले. CLI वर pjsip set logger on चालवा. एक REGISTER आणि त्याला मिळालेला response पहा. त्यानंतर client_uri आणि username यांची तुलना provider ने दिलेल्या माहितीसोबत करा.

log मध्ये उपयुक्त माहितीच दिसत नाही. Asterisk default ने notice level आणि त्यापेक्षा वरील messages messages.log मध्ये लिहितो. समस्या पुन्हा निर्माण करताना core set verbose 4 आणि pjsip set logger on वापरून logging level वाढवा. त्यानंतर दोन्ही बंद करा, कारण SIP logger प्रत्येक packet लिहितो.

प्रवेशासाठी ते सार्वजनिक करण्यापूर्वी

PBX हे तुम्ही स्वतः host करत असलेल्या इतर सेवांसारखे नाही. वेब अॅपमध्ये बिघाड झाला, तर एखादे पेज उपलब्ध होत नाही. PBX मध्ये बिघाड झाला, तर तुम्ही झोपलेले असताना काही तासांत मोठे फोन बिल येऊ शकते. ते इतर कोणतेही काम न करणाऱ्या VPS वर चालवा. 5060 पोर्टचा प्रवेश केवळ ज्ञात पत्त्यांपुरता मर्यादित ठेवा. प्रत्येक extension साठी यादृच्छिक secret वापरा. Trunk account वर खर्चाची कमाल मर्यादा सेट करा. उर्वरित सर्व्हरसाठी कोणत्याही सार्वजनिकरीत्या उघडलेल्या सर्व्हरसारखीच मूलभूत सुरक्षा आवश्यक आहे. VPS hosting खरोखर किती सुरक्षित आहे याचा हा आढावा त्याचे वर्णन करतो.

FAQ

self-hosted VoIP सर्व्हरसाठी कोणते पोर्ट उघडावे लागतात?

UDP आणि TCP वर SIP signalling साठी port 5060, SIP over TLS वापरत असल्यास port 5061, आणि RTP media साठी UDP ports ची एक range आवश्यक आहे. Asterisk च्या नमुना rtp.conf मध्ये 10000 ते 20000 ports वापरले आहेत, तर compile-time defaults 5000 ते 31000 आहेत. प्रत्येक call साठी या range मधील दोन ports वापरले जातात. त्यामुळे दोनशे ports ची range एकाच वेळी शंभर calls हाताळते. RTP range UDP म्हणून उघडा. port 5060 सर्वांसाठी उघडे ठेवण्याऐवजी ते तुमच्या provider च्या addresses आणि तुमच्या स्वतःच्या networks पर्यंत मर्यादित करा.

Asterisk स्वतंत्रपणे install करावे की FreePBX वापरावे?

लहान attack surface हवे असेल, git मध्ये ठेवता येतील अशा configuration files हव्या असतील आणि dialplan स्वतः लिहिण्याची तयारी असेल, तर raw Asterisk install करा. Extensions, voicemail आणि call queues साठी GUI हवे असेल, तर FreePBX install करा. August 2026 पर्यंत FreePBX 17 installer vanilla Debian 12 machine गृहीत धरतो आणि Asterisk, web server, database server आणि PHP install करतो. त्यामुळे त्यासाठी स्वतंत्र VPS द्या. FreePBX स्वतः व्यवस्थापित करत असलेल्या config files पुन्हा तयार करतो. त्यामुळे हाताने केलेले बदल त्याच्या _custom files मध्येच करा.

call connect झाल्यानंतर audio का ऐकू येत नाही?

Signalling यशस्वी झाले, पण media कार्यरत झाले नाही. SIP ने port 5060 वर call स्थापित केला. Audio हा RTP range मधील एखाद्या port कडे जाणारा स्वतंत्र UDP flow असतो आणि तो कुठेतरी drop होत आहे. rtp.conf मधील range firewall मध्ये उघडलेल्या range शी जुळते का ते तपासा. तसेच server वरील firewall सोबत provider चा network firewall देखील तपासा. call सुरू असताना sudo tcpdump -ni any udp portrange 10000-10200 चालवा. कोणतेही packets दिसत नसतील, तर ते पोहोचण्यापूर्वीच block होत आहेत.

SIP brute force attacks आणि toll fraud कसे थांबवावे?

प्रत्येक extension साठी मोठा random secret द्या. तो extension number शी जुळणारा नसावा. तुमच्या trunk साठी वापरला जाणारा context, बाहेरच्या क्रमांकांवर dial करू शकणाऱ्या कोणत्याही context पासून स्वतंत्र ठेवा. त्यामुळे inbound call तुमच्या account वरून पुन्हा बाहेर call करू शकणार नाही. port 5060 तुमच्या provider च्या addresses पर्यंत मर्यादित करा. fail2ban मध्ये asterisk jail enable करा. ते /var/log/asterisk/messages वाचते आणि No matching endpoint found failures निर्माण करणाऱ्या addresses वर ban लागू करते. त्यानंतर provider कडे spending cap सेट करा आणि वापरात नसलेली international destinations block करा. उर्वरित संरक्षणे अपयशी ठरल्यास नुकसान मर्यादित करणारे हेच एकमेव नियंत्रण आहे.

दूरच्या region मधील VPS मुळे call quality खराब होते का?

होय. कारण audio दोन मार्गांमधून जाते: phone ते VPS आणि नंतर VPS ते trunk provider. ITU-T G.114 one-way delay 150 ms पेक्षा कमी असण्याची शिफारस करते. चुकीच्या ठिकाणी असलेला VPS हा पूर्ण delay budget चा मोठा भाग केवळ अंतरामुळे वापरू शकतो. phones जवळील region निवडा. हा मार्ग सामान्यतः consumer internet वरून जातो आणि त्यावर jitter सर्वाधिक असतो. Codec ची निवड delay दूर करत नाही; ती केवळ bandwidth बदलते. त्यामुळे G.729 bytes वाचवतो, पण 200 ms चा path सुधारू शकत नाही.

#voip#asterisk#freepbx#sip#self-hosting