تقویت امنیت برای FreeBSD با استفاده از IPFW و SSHGuard

سرورهای VPS معمولاً توسط افراد متجاوز هدف قرار می گیرند. یک نوع متداول از حم��ه به عنوان صدها تلاش برای ورود به سیستم ssh غیر مجاز در پرونده های سیستم مشاهده می شود. راه اندازی فایروال بسیار مفید است ، اما به خودی خود ممکن است کوشش های نفوذی مختل کننده را به درستی کنترل نکند.

این آموزش نحوه ساخت سد نفوذ افزایشی شده برای FreeBSD را با استفاده از دو برنامه ، ipfwفایروال و sshguard. SSHGuard یک برنامه افزودنی کوچک است که بر روی سیاهههای مربوط به سیستم برای ورودی های "سوءاستفاده" نظارت می کند. هنگامی که متخلفان سعی در دستیابی به دسترسی دارند ، sshguardدستور ipfwمی دهند که ترافیک ناشی از آدرس IP متخلف را مسدود کنند. متخلف سپس به طور موقت خاموش است.

پس از درک نحوه کار این برنامه ها ، مدیریت حفاظت از سرور بسیار ساده است. اگرچه این راهنما روی پیکربندی FreeBSD متمرکز است ، اما بخش هایی از آن برای سایر سیستم عامل ها و نرم افزارهای فایروال کاربرد دارد.

مرحله 1. پیکربندی IPFW

FreeBSD 3 فایروال را در GENERICهسته پیش فرض ( ) خود ، ipfwو pf، فراهم می کند ipfilter. هر کدام از این مزایا و طرفداران زیادی دارند اما ipfwنرم افزار فایروال بومی FBSD است و برای استفاده در اهداف ما بسیار ساده است. شایان ذکر است که ipfwکارهای بسیاری را انجام می دهد همانطور که صفحه اصلی آن نشان می دهد ، با این وجود قابلیت هایی مانند NAT ، شکل دادن به ترافیک و غیره برای وضعیت معمولی VPS لازم نیست. خوشبختانه ، ویژگی های اصلی فایروال به راحتی نیازهای ما را برآورده می کند.

برای شروع فایروال در زمان راه اندازی ، موارد زیر را به آن اضافه کنید /etc/rc.conf:

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

این serviceدستور برای شروع و متوقف کردن فایروال بصورت دستی موجود است:

[user@vultr ~]$ sudo service ipfw start

به طور طبیعی ، ipfwتا زمانی که قوانینی را اضافه کنید ، اغلب از یک پرونده ، در این مثال که در آن قرار دارد ، هیچ کاری نخواهید کرد /usr/local/etc/IPFW.rules. در واقع پرونده قوانین می تواند در هرجای دیگری واقع شده باشد و یا دارای هر اسمی باشد ، تا زمانی که با پارامتر "firewall_script" مطابقت داشته باشد. پرونده قوانین به شرح زیر است.

مرحله 2. SSHGuard را نصب و پیکربندی کنید

sshguardدر چندین طعم برای استفاده با فایروال های مختلف ارائه می شود. pkgبرای واکشی و نصب از ابزارهای زیر استفاده کنید sshguard-ipfw:

[user@vultr ~]$ sudo pkg install sshguard-ipfw

در بیشتر موارد ، همه اینها باید انجام دهند. متغیر مناسب به طور خودکار /etc/rc.confبرای شروع کار راه اندازی می شود:

sshguard_enable="YES"

پیش فرض ها به طور معمول خوب کار می کنند. اگر مقادیر مختلف لازم باشد ، sshguardصفحه صفحه اطلاعات دقیقی در مورد پارامترها می دهد:

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

می توانید sshguardبا serviceدعوت معمول شروع کنید :

[user@vultr ~]$ sudo service sshguard start

مرحله 3. یک اسکریپت قوانین ایجاد کنید

سخت ترین قسمت ایجاد خط مقدماتی فایروال است. ipfwمی تواند از /etc/rc.firewallاسکریپت ارائه شده استفاده کند ، اما باید آنرا تغییر داد تا در SSHGuard ، و همچنین سناریوهای مختلف عملیاتی جای گیرد. تعدادی از صفحات وب و کتابچه راهنمای FreeBSD اطلاعات مفیدی در مورد انجام این کار دارند. با این حال ، نوشتن یک پرونده قوانین کار چندان سختی نیست ، علاوه بر این ، یک آیین نامه سفارشی می تواند درک و تغییر در صورت لزوم ساده تر باشد.

ویژگی مهم ipfwقوانین این است که در مسابقه اول برنده می شود و این بدان معنی است که ترتیب قاعده مهم است. در ipfw، هر قانون یک دستور است ، و پرونده قاعده یک اسکریپت پوسته قابل اجرا است. این امر باعث می شود كه قواعد با تغییر قوانین تغییر یافته و سپس پرونده قوانین به عنوان اسكریپت پوسته ای كه در آن قرار دارد تغییر یابد:

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

به طور کلی ، یک پرونده قواعد متغیر را برای ipfwفرمان تعریف می کند ، سپس قواعد فعلی را پاک می کند ، قواعد عمومی را صادر می کند ، سپس به تنظیم قوانین "از" می پردازد و به دنبال آن قواعد "in". صفحه راهنما ipfw و منابع دیگر حاوی اطلاعات زیادی در مورد ساختار قانون و گزینه هایی هستند که کمترین گفتن را دارند.

از آنجا که نسخه sshguard FreeBSD به نسخه 1.6.2 به روز شده است ، روش درج قوانین مسدود کردن برای متخلفان تغییر کرده است. اکنون آدرس متخلفان به جای اینکه در قوانین بالاتر از 55000 مانند قبل وارد شود ، در یک جدول ipfw (جدول 22 خاص) نگه داشته می شوند.

خوشبختانه ، تنظیم پرونده قوانین برای استفاده از جدول بسیار ساده است. این فقط مسئله ای است که جدول جدول را در جای مناسب قرار دهید و مطمئن شوید که هنگام نوشتن قانون از نحو صحیح استفاده می کنید.

هنگامی sshguardکه متخلف را پیدا کرد ، آدرس متخلف را در لیست سیاه خود قرار می دهد و همچنین آدرس را در ipfwجدول وارد می کند تا باعث شود که "دسترسی" را انکار کند. این قانون این اهداف را انجام می دهد:

01000 deny ip from table\(22\) to any

هنوز لازم است در این مورد قوانینی را مجاز کنید که خدمات ورودی را بالای 01000 انجام دهند. به عنوان مثال ، بیایید بگوییم آدرس 10.20.30.40یک مجرم در جدول 22 است و ما این قانون ipfw را داریم:

56420 allow tcp from any to me dst-port 22 in via $vif

از آنجا که ipfwبرخورد حکومت 01،000 قبل از حکومت 56420 ، 10.20.30.40است مسدود . این امر هرگز به هیچ وجه توسط قانون "اجازه 22 در" مشاهده نخواهد شد. اگر قانون مجاز دارای یک شماره "معمولی" مانند 00420 باشد ، ترافیک بد وارد می شود و هرگز مسدود نمی شود (زیرا 00420 کمتر از 01000 است و "اولین مسابقه برنده است").

از ویژگی های خوب نسخه به روز شده این است که اکنون وقتی sshguard شروع به کار می کند ، تمام آدرس های موجود در لیست سیاه به جدول اضافه می شوند و برای جلوگیری از متخلفین ورودی بدون تأخیر در دسترس هستند. لیست سیاه تجمعی است و بین جلسات حفظ می شود.

در این مرحله احتمالاً معقول است که یک قانون کامل را ipfwبرای آن تغییر دهید sshguard. نظرات باید پیروی از منطق قاعده را بسیار آسان کند:

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

مرحله 4. راه اندازی و آزمایش

نیازهای سیستم متفاوت است و گزینه های مختلف پورت ها برای مسدود کردن یا رفع انسداد در مجموعه قوانین منعکس می شود. پس از اتمام خط مقدم ، پرونده را ذخیره کرده /usr/local/etc/IPFW.rulesو خدمات FBSD را شروع کنید:

 # service ipfw start
 # service sshguard start

اکنون فایروال افزودنی باید اجرا شود! بررسی کنید sshguard:

 [user@vultr ~]$ sudo pgrep -lfa ssh

در صورت sshguardاجرا ، خط pid و فرمان کامل آن نمایش داده می شود:

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

این نشان می دهد که قانون فایروال با آمار و آخرین باری که یک بسته با این قانون مطابقت دارد:

 [user@vultr ~]$ sudo ipfw -cat list

پس از ساعت ها یا روزها ، آدرس مجرمان به لیست سیاه و همچنین جدول 22 اضافه می شود. برای مشاهده همه آدرس های موجود در جدول ، از این دستور استفاده کنید:

ipfw table 22 list

نتیجه به صورت زیر چاپ می شود:

10.10.10.118/32 0
10.10.10.72/32 0
...

همانطور که در بالا توضیح داده شد ، اتصالات این آدرس ها مجاز نیستند. البته ، در اولین اجرا sshguardآدرس دیگری در لیست وجود نخواهد داشت ، اما با گذشت زمان می تواند خیلی طولانی شود. یک گزینه ایجاد قوانین مسدود کننده جداگانه برای آدرس های دارای چندین ورودی در جدول و سپس حذف آنها از لیست سیاه است.

مرحله 5. نگه داشتن هوشیار ...

این ایده خوبی است که گاهی اوقات سیاههها را چک کنید تا اطمینان حاصل کنید که نفوذها کنترل می شوند. به طور کلی ، /var/log/auth.logو /var/log/securityآموزنده هستند. ممکن است شکاف ها یا خطاها در پوشش خدمات شبکه آشکار شود. اصلاح مقررات فایروال در صورت نیاز ، یک قسمت عادی از سرور مدیریت است.

در نسخه های sshguard قبلی ، وقتی /var/db/sshguard/blacklist.dbپرونده بزرگ شد ، می تواند مانع sshguardاز شروع به کار سیستم شود. حذف یا تغییر نام پرونده لیست سیاه مجاز sshguardبه شروع است. به نظر می رسد که این شماره در آخرین نسخه sshguard برطرف شده است ، بنابراین احتمالاً این راه حل دیگر ضروری نیست.

حتماً آدرس IP را که از آنجا به SSH Session وصل شده اید ، سفید کنید. اگر به طور اتفاقی خود را قفل کردید ، همیشه می توانید به https://my.vultr.com به کنسول noVNC وصل شوید و IP خود را لیست کنید.

جمع بندی ، استفاده از ترکیب ipfwو sshguardکمک به حفظ سیستم FreeBSD و انجام کار خود. به حداقل رساندن فعالیت شبکه مزاحم فواید دیگری دارد: کمتر "نویز" باعث می شود ردیابی و تنظیم سیستم عملکرد راحت تر شود و به یک سرور ایمن تر و بهتر کار کند.

محافظت موثر از سیستم / سرور FreeBSD به خصوص پیچیده نیست. در حالی که یک تلاش متوسط ​​برای رسیدن به آن و اجرای آن مورد نیاز است ، اما در VPS و امنیت پروژه به مراتب بیشتر پرداخت می کند.


Tags: #BSD #Security

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

LiteCart یک بستر سبد خرید آزاد و منبع باز است که به زبان های PHP ، jQuery و HTML 5 نوشته شده است. این نرم افزار ساده ، سبک و با کاربرد آسان است.

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

با استفاده از یک سیستم متفاوت؟ Anchor CMS یک سیستم مدیریت محتوا (CMS) بسیار ساده و بسیار سبک ، بسیار آزاد و آزاد است.

اشتراک NFS را در Debian تنظیم کنید

اشتراک NFS را در Debian تنظیم کنید

NFS یک سیستم فایل مبتنی بر شبکه است که به رایانه ها اجازه می دهد تا از طریق شبکه رایانه ای به فایلها دسترسی پیدا کنند. این راهنما توضیح می دهد که چگونه می توانید پوشه ها را روی NF قرار دهید

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

هنگام راه اندازی سرور جدید لینوکس ، به روزرسانی سیستم های هسته و سایر بسته ها تا آخرین نسخه پایدار یک روش توصیه شده است. در این مقاله

نحوه نصب Matomo Analytics در Fedora 28

نحوه نصب Matomo Analytics در Fedora 28

با استفاده از یک سیستم متفاوت؟ Matomo (سابقا پیویک) یک بستر تحلیلی منبع باز است ، یک جایگزین باز برای Google Analytics. منبع Matomo میزبان o

یک سرور TeamTalk را در لینوکس تنظیم کنید

یک سرور TeamTalk را در لینوکس تنظیم کنید

TeamTalk یک سیستم کنفرانس است که به کاربران امکان می دهد مکالمات صوتی / تصویری با کیفیت بالا ، چت متنی ، انتقال فایل ها و صفحه های به اشتراک بگذارند. من

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

Vultr یک ویژگی را فراهم می کند که به شما امکان می دهد با ایجاد یک نمونه جدید ، کلیدهای SSH را از قبل نصب کنید. این اجازه می دهد تا به کاربر root دسترسی داشته باشید ، با این حال ، th

نحوه نصب انجمن NodeBB در FreeBSD 12

نحوه نصب انجمن NodeBB در FreeBSD 12

با استفاده از یک سیستم متفاوت؟ NodeBB یک نرم افزار انجمن مبتنی بر Node.js است. از سوکت های وب برای تعامل فوری و اعلامیه های زمان واقعی استفاده می کند. NodeB

نصب و راه اندازی ZNC در اوبونتو

نصب و راه اندازی ZNC در اوبونتو

ZNC یک پیشرانه پیشرفته شبکه IRC است که تمام وقت بهم متصل می شود تا مشتری IRC بتواند بدون از دست دادن جلسه گپ قطع یا وصل شود.

نحوه نصب Ranger Terminal File Manager در لینوکس

نحوه نصب Ranger Terminal File Manager در لینوکس

رنجر یک مدیر فایل مبتنی بر خط فرمان است که دارای کلیدهای اتصال VI است. این برنامه یک رابط لعنتی مینیمالیستی و زیبا با نمای سلسله مراتب فهرست ارائه می دهد