گام اول : بررسی log های سرویس تلفنی
در سیستم های تلفنی مبتنی بر Asterisk هر عملیاتی که انجام میگیرد به صورت متنی در کنسول Asterisk نمایش داده میشود .
این پیام ها انواع مختلفی دارند که در این مقاله ما فقط نیاز به پیغام های اخطار و امنیتی داریم .
با دستور زیر وارد کنسول استریسک خود شوید
asterisk -vvvr
دستور زیر را وارد کنید
module show like res_security_log.so
حالا از کنسول Asterisk با دستور quit خارج بشید .
در قدم بعد احتیاج داریم که برای Asterisk مشخص کنیم که پیام های امنیت VoIP و اخطار ها رو در فایلی جداگانه ذخیره کنه که fail2ban برای خوندن اونها به مشکل بر نخوره .
به مسیر /etc/asterisk/ برید و فایل logger.conf رو با ویرایش گر مورد علاقه خودتون باز کنید در آخرین خط عبارت زیر را وارد کنید .
security_log => SECURITY,NOTICE
فقط دقت داشته باشید برای ویرایش این فایل شما احتیاج به دسترسی sudo دارید . الان نیاز هست مجددا وارد کنسول Asterisk بشید و ماژول logger رو مجدد راه اندازی کنید تا سیستم فایل log مورد نظر شما رو بسازه . وارد کنسول Asterisk بشید :
Asterisk -rvvvv
دستور زیر رو برای راه اندازی مجدد ماژول logger اجرا کنید .
logger reload
برای اطمینان از انجام صحیح مراحل تا اینجا با دستور زیر میتونید فایل های log که سیستم تلفنی تولید میکنه رو ببینید . با دستور زیر این کار رو انجام بدید :
logger show channels
بعد از اجرای دستور شما باید این خط رو مشاهده کنید
/var/log/asterisk/security_log File default Enabled - NOTICE SECURITY
حالا از کنسول Asterisk با دستور quit خارج بشید .
عالیه ! الان میتونید با مراجعه به مسیر /var/log/asterisk/ فایل security_log رو ببینید .
پیکربندی Fail2ban
با دستور زیر نرم افزار fail2ban رو نصب کنید
apt-get install fail2ban
بعد از اتمام نصب محتویات پوشه fail2ban رو با دستور زیر چک کنید
ls /etc/fail2ban/
شما باید این فایل ها رو ببینید :
action.d fail2ban.conf filter.d jail.conf
قدم اول : خواندن log های سیستم تلفنی توسط Fail2ban
شما احتیاج دارید یه فایل برای تنظیمات fail2ban خودتون بسازید که برای fail2ban شرح بدید چطور باید فایل های log که قبل تر ایجاد کردیم رو بخونه . پس با دستور زیر وارد مسیر فایل های تنظیمات بشید .
cd /etc/fail2ban/filter.d/
حالا با دستور زیر یه فایل با نام asterisk2.conf بسازید.
touch asterisk2.conf
حالا فایل asterisk2.conf رو با ویرایشگر مورد علاقتون باز کنید و متن زیر رو در اون کپی کنید
# Fail2Ban configuration file
#
#
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
# Asterisk ۱.۸ uses Host:Port format which is reflected here
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Wrong password
NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Username/auth name mismatch
NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Device does not match ACL
NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Peer is not supposed to register
NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - ACL error (permit/deny)
NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Device does not match ACL
NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>:.*' - No matching peer found
NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>:.*' - Wrong password
NOTICE.* <HOST> failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from <HOST>\)
NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
NOTICE.* .*: <HOST> failed to authenticate as '.*'
NOTICE.* .*: <HOST> tried to authenticate with nonexistent user '.*'
SECURITY.* .*: SecurityEvent="InvalidAccountID",.*,Severity="Error",Service="SIP",.*,.*,.*,.*,RemoteAddress=".*/.*/<HOST>/.*"
SECURITY.* .*: SecurityEvent="ChallengeResponseFailed",.*,Severity="Error",Service="SIP",.*,.*,.*,.*,RemoteAddress=".*/.*/<HOST>/.*",.*
SECURITY.* .*: SecurityEvent="InvalidPassword",.*,Severity="Error",Service="SIP",.*,.*,.*,.*,RemoteAddress=".*/.*/<HOST>/.*",.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
قدم دوم : ساخت تنظیمات اقدام کننده (Action)
حالا باید یه فایل دیگه بسازیم که در اون برای fail2ban توضیح بدیم که چطور IP شخصی که تلاش برای ورود داشته رو در فایروال اضافه کنه و دسترسی اون رو محدود کنه . پس ما برای تنظیم احتیاح به ساخت فایلی با عنوان iptables-asterisk.conf داریم .
با دستور زیر این کار رو انجام میدیم . بهتره برای امنیت voip این قسمت رو با دقت بخونید .
با دستور اول وارد پوشه action.d بشید و با دستور دوم فایلی با نام iptables-asterisk.conf بسازید .
cd /etc/fail2ban/action.d
touch iptables-asterisk.conf
حالا فایلی رو که ساختید با ویرایشگر مورد علاقتون باز کنید و متن زیر رو در اون کپی کنید .
# Fail2Ban configuration file
#
# Author: MB
#
# $Revision$
#
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I <chain> -p udp --dport 5061 -j fail2ban-<name>
iptables -I <chain> -p tcp --dport 5061 -j fail2ban-<name>
iptables -I <chain> -p udp --dport 5060 -j fail2ban-<name>
iptables -I <chain> -p tcp --dport 5060 -j fail2ban-<name>
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = iptables -D <chain> -p tcp --dport 5061 -j fail2ban-<name>
iptables -D <chain> -p udp --dport 5061 -j fail2ban-<name>
iptables -D <chain> -p udp --dport 5060 -j fail2ban-<name>
iptables -D <chain> -p tcp --dport 5060 -j fail2ban-<name>
iptables -F fail2ban-<name>
iptables -X fail2ban-<name>
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck = iptables -n -L <chain> | grep -q fail2ban-<name>
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP
[Init]
# Defaut name of the chain
#
name = default
# Option: chain
# Notes specifies the iptables chain to which the fail2ban rules should be
# added
# Values: STRING Default: INPUT
chain = INPUT
اگر یکم به نوشته های بالا دقت کنید میبینید که ما در اون فقط پورت های سرویس sip رو بستیم یعنی پورت های udp5060 , tcp5060 ,tcp5061 رو بستیم . در پنجره پایین به صوت جدا براتون آوردمش .
iptables -I <chain> -p tcp --dport 5061 -j fail2ban-<name>
iptables -I <chain> -p udp --dport 5061 -j fail2ban-<name>
iptables -I <chain> -p udp --dport 5060 -j fail2ban-<name>
iptables -I <chain> -p tcp --dport 5060 -j fail2ban-<name>
قدم سوم : اضافه کردن تنظیمات که ساختیم به Fail2ban
حالا باید در فایل تنظیمات اصلی Fail2ban تنظیماتی که در بالا توضیح دادم رو به این فایل اضافه کنید . از مسیر /etc/fail2ban فایل jail.conf رو با ویرایشگر باز کنید و متن پایین رو به این فایل اضافه کنید .
[asterisk-sec]
enabled = true
filter = asterisk2
action = iptables-asterisk[name=asterisk]
# sendmail[name=Asterisk, dest=your_mail@your.domain, sender=your_mail@your.domain]
logpath = /var/log/asterisk/security_log
maxretry = 3
findtime = 21600
bantime = 604800
اگر شما بخواهید ip هایی که توسط fail2ban بلاک می شوند را به ایمیل خود ارسال نمایید خط بالا که کامنت شده است را باید از کامنت در بیاورید و درنهایت ابزار sendmail را نیز نصب نمایید.
در قسمت dest و sender تغییرات جدید اعمال شود. اگر خواستید تعداد دفعات مجاز رو تغییر بدید maxretry = 3 رو با هر تعداد باری که میخواهد جایگزین کنید . در حال حاضر ip مسدود شده به مدت 1 هفته (604800 ثانیه ) در لیست فایروال میمونه میتونید مدت زمان رو به صورت ثانیه در bantime = 1800 تغییر بدید.
الان با دستور های زیر سرویس Fail2ban رو یکبار استارت و استاپ میکنیم تا تنظیمات ما اعمال بشه .
service fail2ban stop
service fail2ban start
حالا با دستور زیر میتونید فایروال سیستم خودتون رو ببینید
iptables -L -v
در این مقاله fail2ban یاد گرفتیم چطور میتونیم از حملات brute force در امان باشیم و امنیت VoIP خودمون رو ارتقا بدیم .