ارتقا امنیت VoIP با Fail2ban
سلام . امروز از سری آموزش های fail2ban برتون یه مطلب تولید کردم که چطور میشه با استفاده از نرم افراز fail2ban امنیت VoIP رو تامین کرد .
تمام سعیم رو میکنم که این مطلب رو به صورت ساده و روان توضیح بدم خوب بریم سر اصل مطلب پس با من همراه باشید .
من درپستی جداگانه از سری آموزش fail2ban توضیح دادم که fail2ban چی هست و چگونه کار میکنه و چطوره با این سرویس SSH رو امن کنیم .
*نکته ۱ : به صورت پیش فرض قسمت اول آموزش تا قبل از نصب fail2ban بر روی Asterisk های بعد از ۱۱ موجود هست . بهتره شما همراه با من این کارها رو انجام بدید تا از وجودش مطمعن بشید.
*نکته ۲ : ممکنه فایل هایی رو که من میگم بسازید از قبل موجود باشه ،پس شما فقط لازمه محتویاتش رو چک کنید که با آموزش متفاوت نباشه.
گام اول : بررسی log های سرویس تلفنی
در سیستم های تلفنی مبتنی بر Asterisk هر عملیاتی که انجام میگیرد به صورت متنی در کنسول Asterisk نمایش داده میشود .
این پیام ها انواع مختلفی دارند که در این مقاله ما فقط نیاز به پیغام های اخطار و امنیتی داریم .
از طریق خط فرمان وارد linux سیتم تلفنی خودتون بشید و با استفاده از دستور زیر وارد کنسول Asterisk بشید
۱ |
asterisk -vvvr |
دستور زیر را وارد کنید
۱ |
module show like res_security_log.so |
بعد از وارد کردن این دستور متنی مثل این متن رو میبینید .
۱ ۲ ۳ ۴ |
raspbx*CLI> module show like res_security_log.so Module Description Use Count res_security_log.so Security Event Logging ۰ ۱ modules loaded |
حالا از کنسول Asterisk با دستور quit خارج بشید .
در قدم بعد احتیاج داریم که برای Asterisk مشخص کنیم که پیام های امنیت VoIP و اخطار ها رو در فایلی جداگونه ذخیره کنه که fail2ban برای خوندن اونها به مشکل بر نخوره .
- به مسیر /etc/asterisk/ برید و فایل conf رو یا ویرایش گر مورد علاقه خودتون باز کنید
- در آخرین خط عبارت زیر رو وارد کنید .
۱security_log => SECURITY,NOTICE
فقط دقت داشته باشید برای ویرایش این فایل شما احتیاج به دسترسی ادمین دارید .
الان نیاز هست مجددا وارد کنسول Asterisk بشید و ماژول logger رو مجدد راه اندازی کنید تا سیستم فایل log مورد نظر شما رو بسازه .
وارد کنسول Asterisk بشید :
۱ |
asterisk -vvvr |
دستور زیر رو برای راه اندازی مجدد ماژول logger اجرا کنید .
۱ |
logger reload |
برای اطمینان از انجام صحیح مراحل تا اینجا با دستور زیر میتونید فایل های log که سیستم تلفنی تولید میکنه رو ببینید .
با دستور زیر این کار رو انجام بدید :
۱ |
logger show channels |
بعد از اجرای دستور شما باید این خط رو مشاهده کنید
۱ |
/var/log/asterisk/security_log File default Enabled - NOTICE SECURITY |
حالا از کنسول Asterisk با دستور quit خارج بشید .
عالیه ! الان میتونید با مراجعه به مسیر زیر فایل 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/ |
حالا با دستور زیر یه فایل با نام asterisk.conf بسازید.
۱ |
touch asterisk.conf |
حالا فایل asterisk.conf رو با ویرایشگر مورد علاقتون باز کنید و متن زیر رو در اون کپی کنید
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ |
# Fail2Ban configuration file # # # $Revision: 251 $ # [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{۴,۶}:)?(?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 # |
این تنظیمات رو میتونید در وب ساید رسمی fail2ban در این آدرس مشاهده کنید .
فدم دوم : ساخت تنظیمات اقدام کننده (Action)
حالا باید یه فایل دیگه بسازیم که در اون برای fail2ban توضیح بدیم که چطور IP شخصی که تلاش برای ورود داشته رو در فایروال اضافه کنه و دسترسی اون رو محدود کنه .
پس ما برای تنظیم احتیاح به ساخت فایلی با عنوان iptables-asterisk.conf داریم .
با دستور زیر این کار رو انجام میدیم . بهتره برای امنیت voip این قسمت رو با دقت بخونید .
با دستور اول وارد پوشه action بشید ودستور دوم فایلی با نام iptables-asterisk.conf بسازید .
۱ ۲ |
cd /etc/fail2ban/action.d touch iptables-asterisk.conf |
حالا فایلی رو که ساختید با ویرایشگر مورد علاقتون باز کنید و متن زیر رو در اون کپی کنید .
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ |
# Fail2Ban configuration file # # Author: Razvan Turtureanu # # $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 tcp --dport ۵۰۶۱ -j fail2ban-<name> iptables -I <chain> -p udp --dport ۵۰۶۰ -j fail2ban-<name> iptables -I <chain> -p tcp --dport ۵۰۶۰ -j fail2ban-<name> # Option: actionstop # Notes.: command executed once at the end of Fail2Ban # Values: CMD # actionstop = iptables -D <chain> -p tcp --dport ۵۰۶۱ -j fail2ban-<name> iptables -D <chain> -p udp --dport ۵۰۶۰ -j fail2ban-<name> iptables -D <chain> -p tcp --dport ۵۰۶۰ -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> ۱ -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 ۵۰۶۱ -j fail2ban-<name> iptables -I <chain> -p udp --dport ۵۰۶۰ -j fail2ban-<name> iptables -I <chain> -p tcp --dport ۵۰۶۰ -j fail2ban-<name> |
قدم سوم : اضافه کردن تنظیمات که ساخنیم به Fail2ban
حالا باید در فایل تنظیمات اصلی Fail2ban تنیظماتی که در بالا توضیح دادم رو به این فایل اضافه کنید .
از مسیر /etc/fail2ban فایل jail.conf رو با ویرایشگر باز کنید و متن پایین رو به این فایل اضافه کنید .
حتما اگر سیستم تلفنی خودتون رو تنظیم کردید که بتونه به بیرون ایمیل ارسال کنه در متن پایین قسمت [email protected] به جای ایمیل خودتون رو وارد کنید و [email protected] رو هم یه نام برای ارسال کننده یه فرمت ایمیل وارد کنید .
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ |
[sec-asterisk] enabled = true filter = asterisk 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 = ۳ bantime = ۱۸۰۰ |
- اگر خواستید تعداد دفعات مجاز رو تغییر بدید maxretry = 3رو با هز تعداد باری که میخواید جایگزین کنید .
- در حال حاضر ip مسدود شده به مدت ۳۰ دقیقه (۱۸۰۰ ثانیه ) در لیست فایروال میمونه میتونید مدت زمان رو به صورت ثانیه در bantime = 1800 تغییر بدید.
الان با دستور های زیر سرویس Fail2ban رو یکبار استارت و استاپ میکنیم تا تنظیمات ما اعمال بشه .
۱ ۲ |
service fail2ban stop service fail2ban start |
حالا با دستور زیر میتونید فایروال سیستم خودتون رو ببینید
۱ |
iptables -L -v |
در این آموزش fail2ban یاد گرفتیم چطور میتونیم از حملات brute force در امان باشیم و امنیت VoIP خودمون رو ازتقا بدیم .
لطفا برای حمایت از من اگر از مطالب استفاده کردید جایی اسم و آدرس رو درج کنید .
اگر سوالی دارید حتما بپرسید .