Asterisk மற்றும் FreePBX மூலம் சொந்தமாக VoIP server
சொந்தமாக VPS-ல் Asterisk அல்லது FreePBX நிறுவும் முறையை அறியுங்கள். SIP trunks, RTP port கட்டமைப்பு, firewall விதிகள் மற்றும் toll fraud தாக்குதல்களைத் தடுக்கும் வழிகள் இங்கே.
சுய-வழங்கப்பட்ட (self-hosted) VoIP server என்றால் என்ன
சுய-வழங்கப்பட்ட VoIP server என்பது நீங்கள் கட்டுப்படுத்தும் VPS-ல் இயங்கும் ஒரு SIP server ஆகும். இதனால், ஒரு hosted phone service-க்கு பதிலாக, உங்கள் சொந்த machine மூலமாகவே அழைப்புகள் வழிநடத்தப்படுகின்றன. VoIP (voice over IP) என்பது பேச்சை UDP packets-ஆகக் கடத்துகிறது. SIP (session initiation protocol) என்பது ஒரு அழைப்பைத் தொடங்கி முடிக்கும் சிக்னலிங் ஆகும். ஆடியோ SIP வழியாகச் செல்வதில்லை; இந்த ஒரு காரணமே கீழே உள்ள பெரும்பாலான சிக்கல்களுக்குக் காரணமாகிறது.
நான்கு பகுதிகள் ஒரு இயங்கும் அமைப்பை உருவாக்குகின்றன.
- PBX (private branch exchange) மென்பொருள். Asterisk என்பது வழக்கமான தேர்வாகும். இது extensions மற்றும் dialplan-ஐக் கொண்டுள்ளது.
- Endpoints. ஒரு username மற்றும் secret மூலம் PBX-ல் பதிவு செய்யும் desk phones அல்லது softphones.
- SIP trunk. பொது தொலைபேசி நெட்வொர்க்குடன் உங்களை இணைக்கும் மற்றும் உண்மையான தொலைபேசி எண்களை வாடகைக்கு வழங்கும் ஒரு சேவை வழங்குநரின் கட்டணக் கணக்கு.
- Media path. ஆடியோவை அதன் சொந்த UDP ports-ல் கடத்தும் RTP (real-time transport protocol) ஓட்டங்கள்.
PBX-ஐ நீங்களே வழங்குவது என்பது தொலைபேசி எண்களை நீங்களே வழங்குவது என்று அர்த்தமல்ல. எண்கள் ஒரு carrier-லிருந்து வருகின்றன, மேலும் நீங்கள் ஒவ்வொரு எண்ணிற்கும் நிமிடத்திற்கும் பணம் செலுத்துகிறீர்கள். நீங்கள் வைத்திருப்பது அழைப்பு வழித்தடம் (call routing), குரல் அஞ்சல் (voicemail), பதிவுகள் மற்றும் extension பட்டியல் மட்டுமே. பணத்திற்காக மக்கள் தாக்கும் ஒரு சேவையின் பாதுகாப்பும் உங்கள் பொறுப்பிலேயே உள்ளது.
சுய-வழங்கப்பட்ட (self-hosted) VoIP server-க்கு எந்தெந்த ports தேவைப்படுகின்றன?
SIP signalling, UDP மற்றும் TCP-க்கு port 5060-ஐயும், SIP over TLS (transport layer security)-க்கு port 5061-ஐயும் பயன்படுத்துகிறது. இந்த ports அழைப்பு அமைப்பை (call setup) மட்டுமே கையாளுகின்றன. ஒவ்வொரு அழைப்பின் ஆடியோவும் ஒரு தனித்தனி UDP flow ஆகும்; இது RTP வரம்பிலிருந்து (range) எடுக்கப்பட்ட ஒரு port-க்கு அனுப்பப்படும். Asterisk ஒரு மாதிரி rtp.conf-ஐ வழங்குகிறது, அது rtpstart=10000 மற்றும் rtpend=20000-ஐ அமைக்கிறது, மேலும் compiled-in defaults என்பவை 5000 மற்றும் 31000 ஆகும். ஒவ்வொரு அழைப்பும் அந்த வரம்பிலிருந்து இரண்டு ports-ஐ எடுத்துக்கொள்கிறது; ஒன்று RTP-க்கும், மற்றொன்று RTCP (RTP control protocol)-க்கும் ஆகும்.
இந்த பிரிவினையில்தான் பெரும்பாலான முதல் முயற்சிகள் தோல்வியடைகின்றன. அழைப்பு இணைகிறது, இரு தொலைபேசிகளிலும் அது ஏற்கப்பட்டதாகக் காட்டுகிறது, ஆனால் இரு தரப்பிலும் எதுவும் கேட்காது. ஏனெனில், firewall 5060-ஐ அனுமதிக்கிறது, ஆனால் ஒவ்வொரு RTP packet-ஐயும் நிராகரிக்கிறது (drop). Signalling மற்றும் media ஆகியவை தனித்தனி flows என்பதால், அவற்றுக்குத் தனித்தனி firewall விதிகள் தேவை. இந்த வேறுபாடு உங்களுக்குப் புதியது என்றால், Linux-ல் ports மற்றும் listening sockets எவ்வாறு செயல்படுகின்றன என்பதை எதையும் திறப்பதற்கு முன் படிப்பது நல்லது.
நீங்கள் திறப்பதற்கு முன் இந்த வரம்பைக் குறைக்கவும். இருபதாயிரம் ports என்பது ஒரு சிறிய system-க்குத் தேவையானதை விட மிக அதிகம். ஒரு அழைப்புக்கு இரண்டு ports வீதம், இருநூறு ports கொண்ட வரம்பு ஒரே நேரத்தில் நூறு அழைப்புகளைக் கையாளப் போதுமானது.
[general]
rtpstart=10000
rtpend=10200இதை sudo asterisk -rx "core reload" மூலம் செயல்படுத்தவும்.
Asterisk அல்லது FreePBX - எதை நிறுவ வேண்டும்?
Asterisk என்பது ஒரு engine ஆகும். நீங்கள் /etc/asterisk-ல் உள்ள text files மூலம் அதை configure செய்து, dialplan-ஐ நீங்களே எழுத வேண்டும். FreePBX என்பது Asterisk-க்கு மேல் இயங்கும் PHP மற்றும் JavaScript-ஆல் உருவாக்கப்பட்ட ஒரு web interface ஆகும். இது உங்களுக்காக அந்த files-ஐ உருவாக்குவதுடன், voicemail மற்றும் call queues-க்கான modules-ஐயும் சேர்க்கிறது.
ஒரு VPS-ல் கவனிக்க வேண்டிய முக்கிய வேறுபாடு, அந்த machine-ன் மேலாண்மை ஆகும். ஆகஸ்ட் 2026 நிலவரப்படி, அதிகாரப்பூர்வ FreePBX 17 installer ஒரு புதிய Debian 12 system-ஐ எதிர்பார்க்கிறது. இது Asterisk, ஒரு web server, ஒரு database server மற்றும் PHP ஆகியவற்றை நிறுவுகிறது. ஏற்கனவே பிற services இயங்கும் ஒரு server-ல் இதை நிறுவினால், அதன் விளைவு உங்களுக்குச் சிக்கலைத் தரும். எனவே, 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நிறுவல் log /var/log/pbx/freepbx17-install.log-ல் சேமிக்கப்படும். script பாதியிலேயே நின்றால், முதலில் பார்க்க வேண்டிய இடம் இதுதான்.
FreePBX தான் உருவாக்கும் configuration files-ஐத் தன் கட்டுப்பாட்டில் வைத்திருக்கும். FreePBX இயங்கும் ஒரு box-ல் pjsip.conf-ஐ நீங்களாக மாற்றினால், அடுத்த முறை GUI அந்த file-ஐ எழுதும்போது உங்கள் மாற்றங்கள் அழிந்துவிடும். கையால் எழுதப்பட்ட configuration-களுக்கு, _custom என்று பெயரில் முடியும் தனித்தனி files-ஐ FreePBX வாசிக்கும்; அவற்றை அது மாற்றாது.
இதிலுள்ள உண்மை இதுதான்: FreePBX உங்களுக்கு ஒரு GUI-ஐ வழங்குகிறது, ஆனால் அது உங்கள் phone system-க்கான login பக்கத்தை public internet-ல் வைக்கிறது. Raw Asterisk-ல் web interface கிடையாது; ஒவ்வொரு அமைப்பும் ஒரு file-ல் ஆவணப்படுத்தப்பட்ட directive ஆகும், அதை நீங்கள் வாசித்து git-ல் பராமரிக்கலாம். நீங்கள் FreePBX-ஐ நிறுவினால், அதன் web port-ஐ உங்கள் IP address-க்கு மட்டும் கட்டுப்படுத்துங்கள் அல்லது VPN மூலம் அணுகுங்கள். ஏனெனில், ஒரு PBX-ன் admin GUI என்பது பண இழப்பை ஏற்படுத்தக்கூடிய நேரடி இலக்காகும்.
பதிப்பு குறிப்பு, ஆகஸ்ட் 2026 நிலவரப்படி: Asterisk 22 என்பது தற்போதைய long term support release ஆகும். இது அக்டோபர் 2024-ல் வெளியிடப்பட்டது மற்றும் அக்டோபர் 2028 வரை security fixes-களைப் பெறும். Asterisk 23 என்பது standard release ஆகும். Ubuntu 24.04-ன் universe repository-ல் Asterisk 20.6.0 உள்ளது.
Ubuntu 24.04-ல் Asterisk-ஐ நிறுவுதல்
Distribution 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 ldconfiginstall_prereq install உங்கள் distribution-க்கான build dependencies-ஐப் பதிவிறக்கும், மேலும் install_prereq test எந்த மாற்றத்தையும் செய்யாமல் அது இயக்கப்போகும் கட்டளைகளைக் காட்டும். make menuselect module picker-ஐத் திறக்கும், அங்கு நீங்கள் Codec Translators-ன் கீழ் codec_opus-ஐ enable செய்ய வேண்டும். make samples-ஐ ஒரு புதிய நிறுவலில் (fresh install) மட்டுமே இயக்கவும், ஏனெனில் இது /etc/asterisk-ல் மாதிரி configuration-ஐ எழுதும். make config init script-ஐ /etc/init.d/asterisk-ல் நிறுவும், மேலும் systemd அதன் SysV compatibility layer மூலம் அதை இயக்கும், எனவே அதன் பிறகு sudo systemctl enable --now asterisk வேலை செய்யும்.
நீங்கள் எந்த வழியைத் தேர்ந்தெடுத்தாலும், sudo asterisk -rvvv இயங்கும் daemon-உடன் இணைந்து உங்களுக்கு CLI-ஐ வழங்கும். அங்கு core show version-ஐ இயக்கினால், நீங்கள் உண்மையில் என்ன நிறுவியுள்ளீர்கள் என்பதைக் காட்டும்.
SIP trunk மற்றும் ஒரு extension-ஐ உள்ளமைத்தல்
தற்போதைய Asterisk-ல் PJSIP என்பது SIP channel driver ஆகும். இதன் உள்ளமைவு /etc/asterisk/pjsip.conf-ல் அமைகிறது; இது ஒன்றையொன்று பெயரால் குறிக்கும் சிறிய வகைப்படுத்தப்பட்ட பிரிவுகளால் (typed sections) உருவாக்கப்படுகிறது. வெவ்வேறு வகை பிரிவுகள் ஒரே பெயரைப் பகிர்ந்து கொள்ள முடியும், அதனால்தான் கீழே உள்ள ஒவ்வொரு தொகுதியும் 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.comregistration object, உங்கள் அழைப்புகளை எங்கு வழங்க வேண்டும் என்று உங்கள் provider-க்குத் தெரிவிக்கும் REGISTER-ஐ அனுப்புகிறது. identify object, provider-லிருந்து வரும் அழைப்பை source address மூலம் இந்த endpoint-உடன் எவ்வாறு இணைப்பது என்பதைத் தீர்மானிக்கிறது; பொதுவாக provider பல முகவரிகளை அங்கு பட்டியலிடுவார். Outbound registration மற்றும் endpoint ஆகியவை தனித்தனி objects-ஆக இருப்பது வேண்டுமென்றே செய்யப்பட்ட ஒன்று: ஒன்று நீங்கள் எங்கு இருக்கிறீர்கள் என்பதை provider-க்குத் தெரிவிக்கும், மற்றொன்று அழைப்புகளுக்கு என்ன செய்ய வேண்டும் என்பதைத் தீர்மானிக்கும்.
ஒரு 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=1direct_media=no, Asterisk-ஐ media path-ல் வைத்திருக்கிறது. இதைத் தவிர்த்தால், இரண்டு endpoints-ம் RTP-ஐ நேரடியாகத் தங்களுக்குள் அனுப்ப முயற்சிக்கும்; phone ஒரு home router-ல் NAT (network address translation)-க்கு பின்னால் இருக்கும்போது இது தோல்வியடையும். Secret-ஐ extension எண்ணுடன் ஒருபோதும் ஒத்துப்போக விடாதீர்கள். எடுத்துக்காட்டை எளிதாகப் புரிந்துகொள்ள, 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-லிருந்து வரும் அழைப்புகளைக் கையாளுகிறது மற்றும் extension 6001-க்கு மட்டுமே ring செய்ய முடியும். இது _9X. pattern-ஐ அடைய முடியாது, எனவே வெளியிலிருந்து வரும் ஒரு அழைப்பு உங்கள் trunk வழியாக மீண்டும் வெளியே டயல் செய்ய முடியாது. இந்த contexts-ஐ இணைத்தால், நீங்கள் classic toll fraud பாதையை உருவாக்கிவிடுவீர்கள்: ஒரு அந்நியர் உங்கள் எண்ணை அழைக்கிறார், உங்கள் dialplan உங்கள் கணக்கின் மூலம் வெளியே டயல் செய்கிறது, அதற்கு நீங்கள் பணம் செலுத்த வேண்டியிருக்கும்.
உள்ளமைவைப் பதிவேற்றிச் சரிபார்க்கவும்.
sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "pjsip show registrations"
sudo asterisk -rx "pjsip show endpoints"pjsip show registrations, mytrunk-ஐ Registered நிலையுடன் பட்டியலிட வேண்டும். Rejected என்றால் உங்கள் credentials-ஐ provider நிராகரித்துவிட்டார் என்று பொருள். Unregistered என்றால் உங்கள் REGISTER-க்கு பதில் கிடைக்கவில்லை என்று பொருள், எனவே அடுத்து firewall-ஐச் சரிபார்க்கவும்.
SIP மற்றும் RTP-க்கான Firewall விதிகள்
Signalling மற்றும் media ஆகியவற்றுக்கு வெவ்வேறு பாதுகாப்பு அணுகுமுறைகள் தேவை, ஏனெனில் அவை வெவ்வேறு அபாயங்களைக் கொண்டுள்ளன. 5060 port-ஐ உங்கள் service provider பயன்படுத்தும் IP முகவரிகளுக்கும், உங்கள் தொலைபேசிகள் இணைக்கப்பட்டுள்ள network-களுக்கும் மட்டுமே கட்டுப்படுத்துங்கள்.
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 verboseRTP range-ஐ நீங்கள் அவ்வளவு எளிதாகக் குறைக்க முடியாது, ஏனெனில் media பெரும்பாலும் signalling வரும் முகவரியிலிருந்து மாறுபட்ட முகவரியிலிருந்தே வரும். உங்கள் service provider-யிடம் அவர்களின் media subnets விவரங்களைக் கேட்டு, அவர்கள் அதை வழங்கினால், அந்த வரம்பிற்குள் மட்டும் கட்டுப்படுத்துங்கள். உங்கள் busiest hour தேவைக்கு ஏற்ப மட்டும் இந்த range-ஐ வைத்திருங்கள். Default policies, விதிகளின் வரிசை மற்றும் ufw மாதிரியின் பிற அம்சங்கள் VPS-க்கான ufw firewall அடிப்படை வழிகாட்டியில் விளக்கப்பட்டுள்ளன.
IPv6-ஐயும் சரிபார்க்கவும். /etc/default/ufw கோப்பில் IPV6=no அமைக்கப்பட்டிருந்தால், ufw ஆனது IPv6-ஐ வடிகட்டாது. எனவே, ::-ல் இயங்கும் ஒரு daemon, மேலே உள்ள எந்த விதிகளும் இன்றி IPv6 வழியாக அணுகக்கூடியதாக இருக்கும். ufw மூலம் IPv6-க்கு ports திறப்பது என்ற கட்டுரை, இந்த இரண்டு குடும்பங்களுக்கும் இடையிலான வேறுபாடுகளை விளக்குகிறது. பெரும்பாலான service provider-கள் தங்கள் control panel-ல் தனிப்பட்ட network firewall-ஐ வழங்குகிறார்கள். உங்கள் packets VPS-ஐ அடைவதற்கு முன்பே அது செயல்படுத்தப்படுவதால், ஒரு port-ஐ இரண்டு இடங்களிலும் திறக்க வேண்டியது அவசியம்.
SIP brute force மற்றும் toll fraud ஆகியவை தவிர்க்க முடியாத சிக்கல்கள்
5060 port-ஐ public address-ல் வைத்தால், உடனே ஸ்கேனிங் தொடங்கிவிடும். இதன் முறை நிலையானது: பல source address-களிலிருந்து REGISTER மற்றும் INVITE கோரிக்கைகள் வரும். இவை பொதுவான extension எண்களையும், எளிதில் ஊகிக்கக்கூடிய secret-களையும் பயன்படுத்தி நுழைய முயலும். Asterisk ஒவ்வொரு தோல்வியையும் log செய்யும், அந்த வரி பின்வருமாறு அமையும்.
Request 'REGISTER' from '<sip:1000@198.51.100.20>' failed for '198.51.100.20:5060' (callid: 5f1a5c0d) - No matching endpoint foundஇதற்கு தீவிர கவனம் தேவைப்படுவதற்கு முக்கிய காரணம் பணம். திருடப்பட்ட extension மூலம் விலையுயர்ந்த சர்வதேச அழைப்புகள் மேற்கொள்ளப்படும். பெரும்பாலும் இவை premium rate எண்களாக இருக்கும், இதில் தாக்குதல் நடத்துபவருக்கு ஒரு பங்கு கிடைக்கும். அழைப்புகள் உங்கள் credentials-ஐப் பயன்படுத்துவதால், அதற்கான கட்டணம் உங்களுக்குத்தான் வரும். இது இயந்திர வேகத்தில் நடக்கும், பெரும்பாலும் இரவு நேரங்களில் நடைபெறும்.
ஆறு கட்டுப்பாடுகளை அமல்படுத்துவது கட்டாயமானது, இவை விருப்பத்தேர்வுகள் அல்ல.
- ஒரு extension-ன் secret-ஆக அதன் எண்ணையோ அல்லது சிறிய வார்த்தைகளையோ ஒருபோதும் வைக்காதீர்கள்.
openssl rand -base64 24மூலம் ஒன்றை உருவாக்கி, அதை copy-paste செய்யுங்கள். - Anonymous inbound அழைப்புகளை அனுமதிக்காதீர்கள். PJSIP இயல்பாகவே அடையாளம் காணப்படாத அழைப்புகளை நிராகரிக்கும். நீங்கள்
anonymousஎன்ற பெயரில் endpoint உருவாக்கினால் மட்டுமே அவற்றை ஏற்கும். எனவே, அதை உருவாக்காதீர்கள். - மேலே காட்டியபடி, trunk context-ஐ வெளிப்படையான அழைப்புகளை மேற்கொள்ளும் எந்தவொரு context-லிருந்தும் தனித்து வையுங்கள்.
- ufw மற்றும் உங்கள் provider-ன் network firewall ஆகிய இரண்டிலும், source address மூலம் signalling-ஐக் கட்டுப்படுத்துங்கள்.
- உங்கள் SIP trunk provider-இடம் செலவு வரம்பை (spending cap) நிர்ணயித்து, நீங்கள் அழைக்காத சர்வதேச இடங்களுக்கான அழைப்புகளை முடக்குங்கள். மற்ற கட்டுப்பாடுகள் தோல்வியடையும் போது, இழப்பைக் குறைக்க இதுவே ஒரே வழி.
- Asterisk log-ஐக் கண்காணிக்க fail2ban-ஐப் பயன்படுத்துங்கள்.
ஒரே முகவரியிலிருந்து மீண்டும் மீண்டும் பொருந்தாத கோரிக்கைகள் வரும்போது, Asterisk ஒரு பாதுகாப்பு நிகழ்வை (security event) உருவாக்க முடியும். pjsip.conf-ன் [global] பகுதி unidentified_request_count-ஐ எடுத்துக்கொள்ளும் (இதன் இயல்பு மதிப்பு 5), மற்றும் unidentified_request_period-ஐ எடுத்துக்கொள்ளும் (இதன் இயல்பு மதிப்பு 5 வினாடிகள்). இவை இரண்டும் சேர்ந்து, ஐந்து வினாடிகளுக்குள் ஒரே முகவரியிலிருந்து வரும் ஐந்து பொருந்தாத கோரிக்கைகள் ஒரு பாதுகாப்பு நிகழ்வை உருவாக்கும் என்று அர்த்தம்; இதன் மீது fail2ban நடவடிக்கை எடுக்க முடியும்.
fail2ban மூலம் ஸ்கேனர்களைத் தடுத்தல்
fail2ban ஏற்கனவே எழுதப்பட்ட ஒரு asterisk jail-ஐக் கொண்டுள்ளது. இது 5060 மற்றும் 5061 ஆகிய ports-ஐ உள்ளடக்கியது, /var/log/asterisk/messages-ஐ வாசிக்கிறது, மேலும் இயல்பாக maxretry = 10-ஐப் பயன்படுத்துகிறது. நீங்கள் /etc/fail2ban/jail.local-ல் அதை enable செய்யும் வரை அந்த jail இயங்காது.
[asterisk]
enabled = true
maxretry = 5
findtime = 600
bantime = 86400sudo systemctl restart fail2ban
sudo fail2ban-client status asteriskசரியான முடிவானது, அந்த jail-ன் log file மற்றும் தற்போது தடைசெய்யப்பட்ட முகவரிகளின் எண்ணிக்கையைக் காட்டும். பொதுவெளியில் உள்ள 5060 port-ல், ஒரு நாளுக்குள் அந்த எண்ணிக்கை பூஜ்ஜியத்திலிருந்து உயரும். வழங்கப்பட்ட filter, மேலே உள்ள No matching endpoint found அறிவிப்புகளுடன் ஒத்துப்போகிறது, மேலும் இது Asterisk-ன் கட்டமைக்கப்பட்ட SecurityEvent வரிகளுடனும் பொருந்துகிறது. அந்த நிகழ்வுகள் ஒரு தனி log channel-க்குச் செல்கின்றன, அவை /etc/asterisk/logger.conf-ல் comment செய்யப்பட்டு இருக்கும். எனவே, உங்களுக்கு அவை தேவைப்பட்டால், அங்கு அதை enable செய்து, அந்த கோப்பை jail-ன் logpath-ல் சேர்க்கவும்.
[logfiles]
console => notice,warning,error
messages.log => notice,warning,error
security.log => securitysudo asterisk -rx "logger reload" மூலம் logger-ஐ reload செய்யவும். இந்த filter asterisk.service-க்காக ஒரு journalmatch-ஐயும் கொண்டுள்ளது, எனவே நீங்கள் log files-ஐ வைத்திருக்க விரும்பவில்லை என்றால், journal backend-ஐப் பயன்படுத்தலாம். நிறுவல், jail.local கட்டமைப்பு மற்றும் நீங்கள் தவறுதலாகத் தடைசெய்த முகவரியை நீக்குதல் போன்றவை Ubuntu 24.04-க்கான fail2ban வழிகாட்டியில் விவரிக்கப்பட்டுள்ளன.
தொலைதூர VPS-ல் Latency மற்றும் codec தேர்வு
புவியியல் அமைப்பால் தாமதம் (delay) தீர்மானிக்கப்படுகிறது, இதை configuration மூலம் மாற்ற முடியாது. சாதாரண உரையாடல்களுக்கு ஒரு வழித் தாமதத்தை (one-way delay) 150 ms-க்குக் கீழ் வைத்திருக்க வேண்டும் என்றும், 400 ms வரை பயன்படுத்தக்கூடியது என்றும் ITU-T G.114 பரிந்துரைக்கிறது. தொலைபேசியிலிருந்து வரும் ஆடியோ உங்கள் VPS-க்குச் சென்று, அங்கிருந்து உங்கள் trunk provider-க்குச் செல்கிறது; எனவே தவறான பகுதியில் உள்ள VPS-ல் இந்தத் தூரம் இருமுறை கணக்கிடப்படும். தொலைபேசிகளுக்கு அருகிலோ அல்லது provider-க்கு அருகிலோ VPS-ஐ அமைக்கவும். இவை இரண்டும் வெவ்வேறு திசைகளில் இருந்தால், தொலைபேசிகளுக்கு அருகில் வைப்பதே சிறந்தது; ஏனெனில் அந்தப் பகுதி பொதுவாக consumer internet வழியாகச் செல்வதால், அங்குதான் jitter அதிகமாக இருக்கும்.
Codec தேர்வு ஒவ்வொரு அழைப்பிற்கும் தேவையான bandwidth-ஐத் தீர்மானிக்கிறது. இங்குள்ள ஒவ்வொரு codec-ம் 20 ms-க்கு ஒருமுறை packet-ஐ அனுப்புகிறது, அதாவது வினாடிக்கு 50 packets. ஒவ்வொரு packet-ம் ஆடியோ payload-க்கு மேலாக 40 bytes அளவுள்ள IP, UDP மற்றும் RTP headers-ஐக் கொண்டிருக்கும்.
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
}
]பெரும்பாலான trunks-ல் G.711 ulaw இயல்பாகவே (default) இருக்கும். அதன் payload 64 kbps ஆகும், headers-உடன் சேர்த்து ஒரு அழைப்பிற்கு ஒவ்வொரு திசையிலும் 80 kbps செலவாகும். 24 kbps-ல் இயங்கும் Opus 40 kbps-ல் இருக்கும், மேலும் G.729 ஆடியோ தரம் மற்றும் CPU பயன்பாட்டைக் குறைத்து 24 kbps-க்குக் கொண்டு வரும். இந்த அளவீடுகள் வெறும் header கணக்கீடுகள் மட்டுமே; அதாவது payload rate உடன் வினாடிக்கு 50 packets வீதம் 40 bytes-ஐச் சேர்த்தால் கிடைப்பது. Ethernet அல்லது VLAN framing கம்பியில் (wire) இன்னும் சிறிது கூடுதல் சுமையைச் சேர்க்கும்.
Transcoding-க்கு CPU தேவைப்படும். உங்கள் தொலைபேசிகளும் trunk-ம் ulaw-ஐப் பயன்படுத்தினால், ulaw-ஐ மட்டும் அனுமதிக்கவும்; அப்போது Asterisk ஆடியோவை மாற்றாமல் அப்படியே அனுப்பும். தரவு இழப்புள்ள (lossy) இணைப்புகளில் Opus சிறப்பாகச் செயல்படும், ஆனால் Opus மற்றும் G.711-க்கு இடையே transcoding செய்ய வெளிப்புற codec_opus module தேவைப்படும். இதை நீங்கள் make menuselect-ல் தேர்ந்தெடுக்க வேண்டும், இது இயல்பாகவே (default) உருவாக்கப்படாது.
என்னென்ன சிக்கல்கள் ஏற்படும், மற்றும் நீங்கள் காணும் செய்தி
அழைப்பு இணைகிறது, ஆனால் யாருடைய குரலும் கேட்கவில்லை. RTP வந்து சேரவில்லை. rtp.conf-ல் உள்ள வரம்பு (range), நீங்கள் firewall-ல் திறந்துள்ள வரம்புடன் ஒத்துப்போகிறதா என்பதை உறுதிப்படுத்தவும். பின், அழைப்பை மேற்கொள்ளும்போது sudo tcpdump -ni any udp portrange 10000-10200 மூலம் பாக்கெட்டுகளைக் கவனிக்கவும். பாக்கெட்டுகளே வரவில்லை என்றால், உங்கள் firewall அல்லது உங்கள் சேவை வழங்குநரின் (provider) network firewall அவற்றை நிராகரிக்கிறது என்று பொருள்.
ஒரே திசையில் மட்டும் ஆடியோ கேட்கிறது. ஒரு பக்கம் RTP-ஐப் பெற முடியாத முகவரிக்கு அனுப்புகிறது; இது port தொடர்பான சிக்கல் அல்ல, முகவரி தொடர்பான சிக்கல். உங்கள் VPS-ன் public முகவரி நேரடியாக அதன் interface-ல் இருந்தால், NAT கையாளுதல் தேவையில்லை. உங்கள் சேவை வழங்குநர் VPS-க்கு ஒரு private முகவரியை வழங்கி, அதை public முகவரியுடன் one-to-one mapping செய்திருந்தால், transport-ல் public முகவரியை அமைத்து, உங்கள் private வரம்பை 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பதிவுகளில் No matching endpoint found காணப்படுகிறது. IP முகவரி அல்லது பயனர் பெயர் (username) அடிப்படையில் எந்த endpoint-உடனும் அந்த கோரிக்கை பொருந்தவில்லை. ஒரு scanner-லிருந்து இது வருவது இயல்பானது, இதை fail2ban கவனித்துக்கொள்ளும். உங்கள் சொந்த சேவை வழங்குநரிடமிருந்து இது வந்தால், அவர்கள் உங்களை அழைக்கும் முகவரி identify பகுதியில் பட்டியலிடப்படவில்லை என்று பொருள்.
பதிவு நிலை (registration status) Rejected என்று உள்ளது. உங்கள் auth பகுதியில் உள்ள நற்சான்றிதழ்களை (credentials) சேவை வழங்குநர் நிராகரித்துவிட்டார். CLI-ல் pjsip set logger on-ஐ இயக்கவும், ஒரு REGISTER கோரிக்கையையும் அதற்கான பதிலையும் கவனிக்கவும். பின், client_uri மற்றும் username ஆகியவற்றை சேவை வழங்குநர் உங்களுக்கு வழங்கிய விவரங்களுடன் ஒப்பிட்டுப் பார்க்கவும்.
பதிவுகளில் பயனுள்ள தகவல்கள் ஏதுமில்லை. Asterisk இயல்பாகவே notice நிலை மற்றும் அதற்கு மேற்பட்ட தகவல்களை messages.log-ல் எழுதும். சிக்கலை மீண்டும் உருவாக்கும்போது core set verbose 4 மற்றும் pjsip set logger on மூலம் இதை அதிகரிக்கவும். SIP logger ஒவ்வொரு பாக்கெட்டையும் எழுதுவதால், சிக்கலைத் தீர்த்த பிறகு இரண்டையும் அணைத்துவிடவும்.
பொதுவெளியில் வெளியிடுவதற்கு முன்
PBX என்பது நீங்கள் self-host செய்யும் பிற சேவைகளைப் போன்றது அல்ல. ஒரு web app செயலிழந்தால், ஒரு பக்கம் மட்டுமே வேலை செய்யாது. ஆனால், ஒரு PBX செயலிழந்தால், நீங்கள் தூங்கிக்கொண்டிருக்கும் சில மணிநேரங்களிலேயே அது பெரிய தொலைபேசி கட்டணத்தை உருவாக்கிவிடும். இதைத் தனிப்பட்ட VPS-ல் மட்டும் இயக்கவும்; 5060 port-ஐ தெரிந்த IP முகவரிகளுக்கு மட்டும் கட்டுப்படுத்தவும்; ஒவ்வொரு extension-க்கும் சீரற்ற (random) secret-ஐ வழங்கவும்; trunk கணக்கிற்குச் செலவு வரம்பை (spending cap) நிர்ணயிக்கவும். இந்த server-ன் பிற பகுதிகளைப் பாதுகாக்க, VPS hosting-ன் பாதுகாப்பு குறித்த இந்த ஆய்வு விளக்கும் அடிப்படைப் பாதுகாப்பு நடைமுறைகளைப் பின்பற்றவும்.
FAQ
சுய-வழங்கி (self-hosted) VoIP server-க்கு நான் எந்தெந்த ports-ஐத் திறக்க வேண்டும்?
SIP signalling-க்காக UDP மற்றும் TCP மூலம் port 5060, TLS மூலம் SIP பயன்படுத்தினால் port 5061, மற்றும் RTP media-விற்காக ஒரு குறிப்பிட்ட UDP port range-ஐத் திறக்க வேண்டும். Asterisk-ன் மாதிரி rtp.conf 10000 முதல் 20000 வரையிலான வரம்பைப் பயன்படுத்துகிறது, மேலும் இயல்பான அமைப்புகள் 5000 முதல் 31000 வரை இருக்கும். ஒவ்வொரு அழைப்பும் இந்த வரம்பிலிருந்து இரண்டு ports-ஐப் பயன்படுத்தும், எனவே இருநூறு ports கொண்ட வரம்பு நூறு ஒரேநேர அழைப்புகளைக் கையாளும். RTP வரம்பை UDP-ஆகத் திறக்கவும், port 5060-ஐ அனைவருக்கும் திறந்த நிலையில் வைக்காமல், உங்கள் சேவை வழங்குநரின் (provider) முகவரிகள் மற்றும் உங்கள் சொந்த network-களுக்கு மட்டும் கட்டுப்படுத்தவும்.
நான் Asterisk-ஐத் தனியாக நிறுவ வேண்டுமா அல்லது FreePBX-ஐப் பயன்படுத்த வேண்டுமா?
குறைந்த attack surface மற்றும் git-ல் பராமரிக்கக்கூடிய configuration files தேவைப்பட்டு, dialplan-ஐ நீங்களே எழுதத் தயாராக இருந்தால், raw Asterisk-ஐ நிறுவவும். extensions, voicemail மற்றும் call queues-ஐ நிர்வகிக்க GUI தேவைப்பட்டால் FreePBX-ஐ நிறுவவும். ஆகஸ்ட் 2026 நிலவரப்படி, FreePBX 17 installer ஒரு புதிய Debian 12 machine-ஐ எதிர்பார்க்கிறது; இது Asterisk, web server, database server மற்றும் PHP ஆகியவற்றை நிறுவும் என்பதால், இதற்குத் தனி VPS-ஐ ஒதுக்கவும். FreePBX தான் நிர்வகிக்கும் config files-ஐ மீண்டும் உருவாக்கும், எனவே நீங்கள் செய்யும் மாற்றங்களை அதன் _custom கோப்புகளில் மட்டுமே செய்ய வேண்டும்.
அழைப்பு இணைக்கப்பட்ட பிறகு ஏன் ஒலி (audio) கேட்கவில்லை?
Signalling சரியாக வேலை செய்துள்ளது, ஆனால் media வரவில்லை. SIP அழைப்பை port 5060-ல் அமைத்தது, ஆனால் audio என்பது RTP வரம்பில் உள்ள ஒரு port-க்குச் செல்லும் தனி UDP flow ஆகும்; அதை ஏதோ ஒன்று தடுக்கிறது. rtp.conf-ல் உள்ள வரம்பு உங்கள் firewall-ல் திறக்கப்பட்டுள்ள வரம்புடன் ஒத்துப்போகிறதா என்று சரிபார்க்கவும்; மேலும் server-ல் உள்ள firewall மட்டுமின்றி, உங்கள் சேவை வழங்குநரின் network firewall-ஐயும் சரிபார்க்கவும். அழைப்பின் போது sudo tcpdump -ni any udp portrange 10000-10200-ஐ இயக்கவும்: packets எதுவும் வரவில்லை என்றால், அவை server-க்கு வருவதற்கு முன்பே தடுக்கப்படுகின்றன என்று அர்த்தம்.
SIP brute force தாக்குதல்கள் மற்றும் கட்டண மோசடியைத் தடுப்பது எப்படி?
ஒவ்வொரு extension-க்கும் நீண்ட, சீரற்ற (random) secret-ஐ வழங்கவும்; extension எண்ணையே secret-ஆக வைக்க வேண்டாம். உங்கள் trunk பயன்படுத்தும் context-ஐ, வெளியே அழைப்புகளை மேற்கொள்ளும் (dial out) பிற context-களிலிருந்து தனித்தனியாக வைக்கவும்; இதன் மூலம் உள்வரும் அழைப்புகள் உங்கள் கணக்கைப் பயன்படுத்தி வெளியே அழைப்புகளைச் செய்ய முடியாது. Port 5060-ஐ உங்கள் சேவை வழங்குநரின் முகவரிகளுக்கு மட்டும் கட்டுப்படுத்தவும். Fail2ban-ல் asterisk jail-ஐ இயக்கவும்; இது /var/log/asterisk/messages-ஐப் படித்து, No matching endpoint found தோல்விகளை உருவாக்கும் முகவரிகளைத் தடை செய்யும். இறுதியாக, உங்கள் சேவை வழங்குநரிடம் செலவுக் கட்டுப்பாடு (spending cap) மற்றும் பயன்படுத்தப்படாத சர்வதேச அழைப்புகளைத் தடுக்கும் வசதியைச் செயல்படுத்தவும்; ஏனெனில் மற்ற பாதுகாப்பு நடவடிக்கைகள் தோல்வியுற்றால், இழப்பைக் கட்டுப்படுத்த இதுவே ஒரே வழியாகும்.
தொலைதூரப் பகுதியில் உள்ள VPS அழைப்பின் தரத்தைப் பாதிக்குமா?
ஆம், ஏனெனில் audio இரண்டு நிலைகளைக் கடக்க வேண்டியிருக்கும்: தொலைபேசியிலிருந்து VPS-க்கு, பின்னர் VPS-லிருந்து trunk provider-க்கு. ITU-T G.114 பரிந்துரைப்படி, ஒரு வழி தாமதம் (one-way delay) 150 ms-க்குக் குறைவாக இருக்க வேண்டும்; தவறான இடத்தில் உள்ள VPS, தூரத்தினால் மட்டுமே அந்த நேர வரம்பின் பெரும்பகுதியை எடுத்துக்கொள்ளும். தொலைபேசிகளுக்கு அருகிலுள்ள ஒரு பகுதியைத் தேர்வு செய்யவும், ஏனெனில் அந்தப் பகுதி பொதுவாக நுகர்வோர் இணையம் (consumer internet) வழியாகச் செல்வதால் jitter அதிகமாக இருக்கும். Codec-ஐ மாற்றுவது தாமதத்தைச் சரிசெய்யாது, அது bandwidth-ஐ மட்டுமே மாற்றும்; எனவே G.729 தரவுகளைச் சேமிக்கும், ஆனால் 200 ms தாமதமுள்ள பாதையைச் சரிசெய்யாது.