نصب و راه اندازی Snort در مد inline
نصب و راه اندازی Snort به عنوان NIPS
در این پست نحوه نصب و راه اندازی Snort در مد inline با استفاده از NFQUEUE توضیح داده شده است. در نسخه ۲ اسنورت این امکان وجود دارد تا بتوان از Iptables برای مسیردهی ترافیک بین چندین Subnet با امکان ارزیابی کل ترافیک عبوری استفاده کرد.
در حال حاضر نصب و راه اندازی Snort به عنوان یک سیستم IPS برخط با استفاده از NFQ بسیار پیچیده تر از راه اندازی Snort به عنوان NIDS و حتی پیچیده تر از راه اندازی آن به عنوان IPS با استفاده از AFPACKET می باشد. این پیچیدگی به خاطر استفاده از Iptables و نیاز به فهم قوی از بحث Routing میباشد.
مقایسه NFQUEUE با AFPACKET
سیستمهای لینوکسی این قابلیت را به ما می دهند تا با استفاده از ماژول NFQ یا AFPACKET سیستم اسنورت را در مد IPS و به صورت inline نصب و راه اندازی نماییم. این دو راهکار در راه اندازی، تقریبا مشابه هم بوده ولی عمده تفاوت آنها در نحوه هدایت ترافیک شبکه میباشد. اگر قصد استفاده از APACKET را دارید به این نکته توجه کنید که این ماژول فقط دارای امکان Bridge کردن جفت اینترفیسهابا هم میباشد، یعنی فقط می توانیم اینترفیسهای eth0 را با eth1 و اینترفیسهای eth2 را با eth3 در یک Bridge قرار دهیم. در این حالت دیگر امکان Bridge کردن همزمان eth0 با eth2 و eth3 نخواهیم داشت. پس ناچار به استفاده از روشی هستیم که امکان کنترل کامل ترافیک را به ما بدهد.
از فواید AFPACKET نسبت به NDFQUEUE سادگی راه اندازی snort با استفاده از آن در مد inline و بدون نیاز به تغییر در آدرس دهی و روتینگ شبکه می باشد. در مقابل با وجود پیچیدگی راه اندازی snort با استفاده از NFQ، این روش از لحاظ امنیتی بسیار قدرتمند میباشد.
مراحل راه اندازی Snort بر روی Ubuntu 20.04
- پیکربندی شبکه
- تنظمات روتینگ شبکه
- تنظیمات مربوط به IP Forwarding Kernel
- نصب نرم افزار
- فعال سازی NFQUEUE
- فعال سازی ruleهای فایروال
تنظیمات شبکه
برای پیاده سازی اسنورت به صورت Inline و با استفاده از NFQUEUE سناریوی زیر که در آن روتر اسنورت با سه اینترفیس به شبکه مختلف وصل شده است، استفاده خواهیم کرد.

در این شکل شبکه ۱۹۲.۱۶۸.۳.۰/۲۴ مربوط به Management میباشد که هیچ روتی بین این شبکه و سایر شبکه وجود نخواهد داشت. که در ادامه سیاستهایی در فایروال برای مسدود سازی این ترافیکها در فایروال اضافه میکنیم
رنج آدرس ۱۰.۰.۲.۰/۲۴ برای شبکه WAN در نظر گرفته شده است. ترافیکهایی که مربوط به شبکه داخلی نباشند را سیستم اسنورت در صورت داشتن مجوز به گیت وی این شبکه ارسال خواهد کرد.
رنج آدرس ۱۷۲.۱۶.۱.۰/۲۴ برای شبکه دیتا سنتر در نظر گرفته شده است و آدرس گیت وی سرورها آدرس اسنورت میباشد. در سناریو تعریف شده برای سیستم اسنورت ترافیک بین این شبکه و شبکه WAN آنالیز و بررسی و در صورت تشخیص هرگونه مورد مشکوت در این ترافیک اسنورت انها را مسدود خواهد کرد.
از آنجایی که تصمیم داریم اسنورت را به عنوان یک Router در شبکه استفاده کنیم بایستی اینترفیسهایی که قرار است ترافیک شبکه از طریق آنها Route شود هر کدام یک آدرس IP استاتیک داشته باشند. علاوه بر این بر روی این اینترفیسهای بایستی LRO و GRO غیرفعال شوند.
تنظیما ت اینترفیسها در Ubuntu 20.04
[email protected]:~$ sudo nano /etc/netplan/00-installer-config.yaml

غیرفعال کردن LRO و GRO
[email protected]:~$ sudo nano /lib/systemd/system/ethtool.service

[email protected]:~$ sudo systemctl enable ethtool
[email protected]:~$ sudo service ethtool start
[email protected]:~$ sudo ethtool -k eth* | grep receive-offload
فعال سازی IP forwarding
[email protected]:~$ /etc/sysctl.conf
net.ipv4.ip_forward=1
بعد از انجام این تنظیمات سیستم را ریستارت میکنیم.
نصب DAQ و Snort با قابلیت پشتیبانی NFQ
برای اینکه بتوانیم از اسنورت و DAQ به همراه NFQ استفاده کنیم بایستی طبق دستورالعمل زیر عمل کنیم.
نصب پیش نیازها
[email protected]:~$ sudo apt-get install -y build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev
[email protected]:~$
sudo apt-get install libluajit-5.1-2 libluajit-5.1-common libluajit-5.1-dev luajit
[email protected]:~$
sudo apt install -y libnghttp2-dev
نصب کتابخانه مورد نیاز NFQ
[email protected]:~$
sudo apt install libnetfilter-queue-dev
ایجاد دایرکتوری snort_src برای ذخیره همه فایل سورس مربوط به نرم افزارهای مورد نیاز
[email protected]:~$
mkdir ~/snort_src
[email protected]:~$
cd ~/snort_src
دانلود و نصب DAQ
[email protected]:~$
cd ~/snort_src
[email protected]:~$
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
[email protected]:~$
tar -xvzf daq-2.0.7.tar.gz
[email protected]:~$
cd daq-2.0.7
[email protected]:~$
./configure
[email protected]:~$
sudo apt install libtool
[email protected]:~$
autoreconf -i --force
[email protected]:~$
make
[email protected]:~$
sudo make install
بعد از اجرای configure بایستی در قسمت NFQ پیغامی مشابه زیر مشاهده کنید.

نصب Snort
[email protected]:~$
cd ~/snort_src
[email protected]:~$
wget https://www.snort.org/downloads/snort/snort-2.9.16.1.tar.gz
[email protected]:~$
tar -xvzf snort-2.9.16.1.tar.gz
[email protected]:~$
cd snort-2.9.16.1
[email protected]:~$
./configure --enable-sourcefire --enable-open-appid
[email protected]:~$
make
[email protected]:~$
sudo make install
اجرای دستور زیر برای بروزرسانی کتابخانههای اشتراکی
[email protected]:~$
sudo ldconfig
در هنگام نصب اسنورت به صورت پیش فرض باینریهای مربوط به ان در مسیر usr/local/bin/snort/ قرار میگیرد. این مرسوم است که یک symlink به مسیر usr/local/snort/ ایجاد شود.
[email protected]:~$
sudo ln -s /usr/local/bin/snort /usr/sbin/snort
تست Snort
در صورت موفقیت آمیز بودن نصب دستور snort با فلگ V خروجی مشابه عکس زیر خواهد داشت.

در صورت اجرای دستور زیر بایستی خروجی زیر که نشان دهنده کارکرد صحیح Snort با NFQ میباشد، نشان داده شود.
[email protected]:~$
snort --daq-list

انجام تنظیمات Snort
ایجاد کاربر و گروه کاربری برای اجرا کردن Snort
[email protected]:~$
sudo groupadd snort
[email protected]:~$
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
ایجاد فایلها و فولدرهای مورد نیاز و تنظیمات مربوط به سطح دسترسی آنها
[email protected]:~$
sudo mkdir /etc/snort
[email protected]:~$
sudo mkdir /etc/snort/rules
[email protected]:~$
sudo mkdir /etc/snort/rules/iplists
[email protected]:~$
sudo mkdir /etc/snort/preproc_rules
[email protected]:~$
sudo mkdir /usr/local/lib/snort_dynamicrules
[email protected]:~$
sudo mkdir /etc/snort/so_rules
[email protected]:~$
sudo touch /etc/snort/rules/iplists/black_list.rules
[email protected]:~$
sudo touch /etc/snort/rules/iplists/white_list.rules
[email protected]:~$
sudo touch /etc/snort/rules/local.rules
[email protected]:~$
sudo touch /etc/snort/sid-msg.map
[email protected]:~$
sudo mkdir /var/log/snort
[email protected]:~$
sudo mkdir /var/log/snort/archived_logs
[email protected]:~$
sudo chmod -R 5775 /etc/snort
[email protected]:~$
sudo chmod -R 5775 /var/log/snort
[email protected]:~$
sudo chmod -R 5775 /var/log/snort/archived_logs
[email protected]:~$
sudo chmod -R 5775 /etc/snort/so_rules
[email protected]:~$
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
[email protected]:~$
sudo chown -R snort:snort /etc/snort
[email protected]:~$
sudo chown -R snort:snort /var/log/snort
[email protected]:~$
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
کپی کردن فایلهای مورد نیاز از فولدر مربوط به فایلهای تاربال snort به فولدر تنطیمات snort
[email protected]:~$
cd ~/snort_src/snort-2.9.16.1/etc/
[email protected]:~$
sudo cp .conf /etc/snort
[email protected]:~$
sudo cp *.map /etc/snort
[email protected]:~$
sudo cp *.dtd /etc/snort
[email protected]:~$
cd ~/snort_src/snort-2.9.16.1/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
[email protected]:~$
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
غیرفعال کردن همه سیاستها
[email protected]:~$
sudo sed -i 's/include \$RULE_PATH/#include \$RULE_PATH/' /etc/snort/snort.conf
انجام تنظیمات مربوط به فایل کانفیگ snort
[email protected]:~$
sudo nano /etc/snort/snort.conf
ipvar HOME_NET [192.168.3.0/24,176.16.1.0/24] # line 45
var RULE_PATH /etc/snort/rules # line 104
var SO_RULE_PATH /etc/snort/so_rules # line 105
var PREPROC_RULE_PATH /etc/snort/preproc_rules # line 106
var WHITE_LIST_PATH /etc/snort/rules/iplists # line 113
var BLACK_LIST_PATH /etc/snort/rules/iplists # line 114
include $RULE_PATH/local.rules #line 545
config daq: nfq
config daq_mode: inline
config daq_var: queue=4
برای شروع به تست عمکرد صحیح IPS، سیاست زیر را که برای شناسایی ترافیک ICMP میباشد به رولهای اسنورت اضافه می کنیم.
[email protected]:~$
sudo nano /etc/snort/rules/local.rule
alert icmp any any -> $HOME_NET any (msg:"ICMP test detected"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)
فعال سازی NFQUEUE با استفاده از فلگ Q
[email protected]:~$
sudo snort -T -c /etc/snort/snort.conf -Q
تنظیم کردن NFQUEUE برای هدایت ترافیک به سمت اسنورت
[email protected]:~$
sudo iptables -I FORWARD -j NFQUEUE --queue-num=1
در صورتی که بخواهیم ترافیک شبکه در صورت crash کردن یا Stop شدن سرویس Snort همچنان عبور کند از فلگ queue-bypass استفاده می کنیم.
[email protected]:~$
sudo iptables -I FORWARD -j NFQUEUE --queue-num=1 --queue-bypass
برای استفاده از اسنورت در مد inline دستور زیر را اجرا میکنیم. برای اجرا شدن اتوماتیک snort در هنگام بوت شدن سیستم آن را به صورت سرویس به سیستم اضافه می کنیم.
[email protected]:~$
sudo/usr/local/bin/snort-A console -q -u snort -g snort -c /etc/snort/snort.conf -Q
[email protected]:~$
sudo nano /etc/systemd/system/snort.service

[email protected]:~$
sudo systemctl enable snort
[email protected]:~$
sudo systemctl start snort
برای مسدود کردن سایر ترافیکها بدون آنالیز اسنورت از دستور زیر استفاده میکنیم.
[email protected]:~$
sudo iptables -P FORWARD DROP
دیدگاهتان را بنویسید