تعزيز الأمن لـ FreeBSD باستخدام IPFW و SSHGuard

يتم استهداف خوادم VPS بشكل متكرر من قبل المتسللين. يظهر نوع شائع من الهجمات في سجلات النظام كمئات من محاولات تسجيل الدخول إلى ssh غير المصرح بها. يعد إنشاء جدار حماية مفيدًا جدًا ، ولكن في حد ذاته قد لا يتحكم بشكل كاف في محاولات الاختراق التخريبية.

يوضح هذا البرنامج التعليمي كيفية بناء حاجز اقتحام محسن لـ FreeBSD باستخدام برنامجين ، ipfwجدار الحماية و sshguard. SSHGuard هو برنامج إضافي صغير يراقب سجلات النظام للإدخالات "المسيئة". عندما يحاول المخالفين الوصول ، sshguardيرشد ipfwإلى منع حركة المرور الناشئة من عنوان IP الخاص بالجاني. ثم يتم إغلاق الجاني بشكل فعال.

بمجرد فهم كيفية عمل هذه البرامج ، تصبح إدارة حماية الخادم بسيطة جدًا. على الرغم من أن هذا الدليل يركز على تكوين FreeBSD ، فإن أجزاء منه تنطبق على نظام التشغيل الآخر وبرامج جدار الحماية.

الخطوة 1. تكوين IPFW

يوفر FreeBSD 3 جدران حماية في GENERICنواة ( ) kernel 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، كل قاعدة هي أمر ، وملف القاعدة هو برنامج نصي shell قابل للتنفيذ. يسمح هذا بتغيير مجموعة القواعد عن طريق تغيير القواعد ثم تشغيل ملف القواعد كبرنامج نصي shell:

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

بشكل عام ، سيحدد ملف القواعد متغيرًا ipfwللأمر ، ثم يمسح القواعد الحالية ، ويصدر القواعد العامة ، ثم يتابع وضع القواعد "خارج" ، متبوعًا بقواعد "في". تحتوي صفحة دليل ipfw والموارد الأخرى على ثروة من المعلومات حول هيكل القاعدة والخيارات التي تعد أقل من غيرها.

منذ أن تم تحديث إصدار FreeBSD sshguard إلى الإصدار 1.6.2 ، تغيرت طريقة إدراج قواعد الحظر للمجرمين. الآن يتم الاحتفاظ بعناوين الجناة في جدول ipfw (الجدول 22 محدد) ، بدلاً من إدراجها في القواعد أعلاه 55000 كما كان من قبل.

لحسن الحظ ، من السهل جدًا إعداد ملف القواعد لاستخدام الجدول. إنها مجرد مسألة وضع قاعدة الجدول في المكان الصحيح ، والتأكد من استخدام بناء الجملة الصحيح عند كتابة القاعدة.

عندما 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قاءات حكم 01000 قبل الحكم 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 منه إلى القائمة البيضاء. إذا أغلقت نفسك دون قصد ، فيمكنك دائمًا الاتصال بوحدة التحكم noVNC في https://my.vultr.com وإدراج عنوان IP الخاص بك في القائمة البيضاء.

تلخيص باستخدام تركيبة نظام FreeBSD الخاص بك ipfwوالمساعدة في sshguardالحفاظ عليه آمنًا والقيام بعمله. إن تقليل نشاط الشبكة المتداخل له فائدة إضافية: "ضوضاء" أقل تجعل من السهل تتبع وضبط تشغيل النظام ، مما يساهم في خادم أفضل وأكثر أمانًا.

حماية نظام / خادم FreeBSD بشكل فعال ليست معقدة بشكل خاص. في حين يلزم بذل جهد متواضع لتشغيله وتشغيله ، فإنه يؤتي ثماره في VPS وأمن المشروع بشكل أكبر.


Tags: #BSD #Security

Leave a Comment

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد