نصب و راه اندازی 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 سناریوی زیر که در آن روتر اسنورت با سه اینترفیس به شبکه مختلف وصل شده است، استفاده خواهیم کرد.
در این شکل شبکه 192.168.3.0/24 مربوط به Management میباشد که هیچ روتی بین این شبکه و سایر شبکه وجود نخواهد داشت. که در ادامه سیاستهایی در فایروال برای مسدود سازی این ترافیکها در فایروال اضافه میکنیم
رنج آدرس 10.0.2.0/24 برای شبکه WAN در نظر گرفته شده است. ترافیکهایی که مربوط به شبکه داخلی نباشند را سیستم اسنورت در صورت داشتن مجوز به گیت وی این شبکه ارسال خواهد کرد.
رنج آدرس 172.16.1.0/24 برای شبکه دیتا سنتر در نظر گرفته شده است و آدرس گیت وی سرورها آدرس اسنورت میباشد. در سناریو تعریف شده برای سیستم اسنورت ترافیک بین این شبکه و شبکه WAN آنالیز و بررسی و در صورت تشخیص هرگونه مورد مشکوت در این ترافیک اسنورت انها را مسدود خواهد کرد.
از آنجایی که تصمیم داریم اسنورت را به عنوان یک Router در شبکه استفاده کنیم بایستی اینترفیسهایی که قرار است ترافیک شبکه از طریق آنها Route شود هر کدام یک آدرس IP استاتیک داشته باشند. علاوه بر این بر روی این اینترفیسهای بایستی LRO و GRO غیرفعال شوند.
تنظیما ت اینترفیسها در Ubuntu 20.04
Iranshell@Snort:~$ sudo nano /etc/netplan/00-installer-config.yaml
غیرفعال کردن LRO و GRO
Iranshell@Snort:~$ sudo nano /lib/systemd/system/ethtool.service
Iranshell@Snort:~$ sudo systemctl enable ethtool
Iranshell@Snort:~$ sudo service ethtool start
Iranshell@Snort:~$ sudo ethtool -k eth* | grep receive-offload
فعال سازی IP forwarding
Iranshell@Snort:~$ /etc/sysctl.conf
net.ipv4.ip_forward=1
بعد از انجام این تنظیمات سیستم را ریستارت میکنیم.
نصب DAQ و Snort با قابلیت پشتیبانی NFQ
برای اینکه بتوانیم از اسنورت و DAQ به همراه NFQ استفاده کنیم بایستی طبق دستورالعمل زیر عمل کنیم.
نصب پیش نیازها
Iranshell@Snort:~$ sudo apt-get install -y build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev
Iranshell@Snort:~$
sudo apt-get install libluajit-5.1-2 libluajit-5.1-common libluajit-5.1-dev luajit
Iranshell@Snort:~$
sudo apt install -y libnghttp2-dev
نصب کتابخانه مورد نیاز NFQ
Iranshell@Snort:~$
sudo apt install libnetfilter-queue-dev
ایجاد دایرکتوری snort_src برای ذخیره همه فایل سورس مربوط به نرم افزارهای مورد نیاز
Iranshell@Snort:~$
mkdir ~/snort_src
Iranshell@Snort:~$
cd ~/snort_src
دانلود و نصب DAQ
Iranshell@Snort:~$
cd ~/snort_src
Iranshell@Snort:~$
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
Iranshell@Snort:~$
tar -xvzf daq-2.0.7.tar.gz
Iranshell@Snort:~$
cd daq-2.0.7
Iranshell@Snort:~$
./configure
Iranshell@Snort:~$
sudo apt install libtool
Iranshell@Snort:~$
autoreconf -i --force
Iranshell@Snort:~$
make
Iranshell@Snort:~$
sudo make install
بعد از اجرای configure بایستی در قسمت NFQ پیغامی مشابه زیر مشاهده کنید.
نصب Snort
Iranshell@Snort:~$
cd ~/snort_src
Iranshell@Snort:~$
wget https://www.snort.org/downloads/snort/snort-2.9.16.1.tar.gz
Iranshell@Snort:~$
tar -xvzf snort-2.9.16.1.tar.gz
Iranshell@Snort:~$
cd snort-2.9.16.1
Iranshell@Snort:~$
./configure --enable-sourcefire --enable-open-appid
Iranshell@Snort:~$
make
Iranshell@Snort:~$
sudo make install
اجرای دستور زیر برای بروزرسانی کتابخانههای اشتراکی
Iranshell@Snort:~$
sudo ldconfig
در هنگام نصب اسنورت به صورت پیش فرض باینریهای مربوط به ان در مسیر usr/local/bin/snort/ قرار میگیرد. این مرسوم است که یک symlink به مسیر usr/local/snort/ ایجاد شود.
Iranshell@Snort:~$
sudo ln -s /usr/local/bin/snort /usr/sbin/snort
تست Snort
در صورت موفقیت آمیز بودن نصب دستور snort با فلگ V خروجی مشابه عکس زیر خواهد داشت.
در صورت اجرای دستور زیر بایستی خروجی زیر که نشان دهنده کارکرد صحیح Snort با NFQ میباشد، نشان داده شود.
Iranshell@Snort:~$
snort --daq-list
انجام تنظیمات Snort
ایجاد کاربر و گروه کاربری برای اجرا کردن Snort
Iranshell@Snort:~$
sudo groupadd snort
Iranshell@Snort:~$
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
ایجاد فایلها و فولدرهای مورد نیاز و تنظیمات مربوط به سطح دسترسی آنها
Iranshell@Snort:~$
sudo mkdir /etc/snort
Iranshell@Snort:~$
sudo mkdir /etc/snort/rules
Iranshell@Snort:~$
sudo mkdir /etc/snort/rules/iplists
Iranshell@Snort:~$
sudo mkdir /etc/snort/preproc_rules
Iranshell@Snort:~$
sudo mkdir /usr/local/lib/snort_dynamicrules
Iranshell@Snort:~$
sudo mkdir /etc/snort/so_rules
Iranshell@Snort:~$
sudo touch /etc/snort/rules/iplists/black_list.rules
Iranshell@Snort:~$
sudo touch /etc/snort/rules/iplists/white_list.rules
Iranshell@Snort:~$
sudo touch /etc/snort/rules/local.rules
Iranshell@Snort:~$
sudo touch /etc/snort/sid-msg.map
Iranshell@Snort:~$
sudo mkdir /var/log/snort
Iranshell@Snort:~$
sudo mkdir /var/log/snort/archived_logs
Iranshell@Snort:~$
sudo chmod -R 5775 /etc/snort
Iranshell@Snort:~$
sudo chmod -R 5775 /var/log/snort
Iranshell@Snort:~$
sudo chmod -R 5775 /var/log/snort/archived_logs
Iranshell@Snort:~$
sudo chmod -R 5775 /etc/snort/so_rules
Iranshell@Snort:~$
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
Iranshell@Snort:~$
sudo chown -R snort:snort /etc/snort
Iranshell@Snort:~$
sudo chown -R snort:snort /var/log/snort
Iranshell@Snort:~$
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
کپی کردن فایلهای مورد نیاز از فولدر مربوط به فایلهای تاربال snort به فولدر تنطیمات snort
Iranshell@Snort:~$
cd ~/snort_src/snort-2.9.16.1/etc/
Iranshell@Snort:~$
sudo cp .conf /etc/snort
Iranshell@Snort:~$
sudo cp *.map /etc/snort
Iranshell@Snort:~$
sudo cp *.dtd /etc/snort
Iranshell@Snort:~$
cd ~/snort_src/snort-2.9.16.1/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
Iranshell@Snort:~$
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
غیرفعال کردن همه سیاستها
Iranshell@Snort:~$
sudo sed -i 's/include \$RULE_PATH/#include \$RULE_PATH/' /etc/snort/snort.conf
انجام تنظیمات مربوط به فایل کانفیگ snort
Iranshell@Snort:~$
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 میباشد به رولهای اسنورت اضافه می کنیم.
Iranshell@Snort:~$
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
Iranshell@Snort:~$
sudo snort -T -c /etc/snort/snort.conf -Q
تنظیم کردن NFQUEUE برای هدایت ترافیک به سمت اسنورت
Iranshell@Snort:~$
sudo iptables -I FORWARD -j NFQUEUE --queue-num=1
در صورتی که بخواهیم ترافیک شبکه در صورت crash کردن یا Stop شدن سرویس Snort همچنان عبور کند از فلگ queue-bypass استفاده می کنیم.
Iranshell@Snort:~$
sudo iptables -I FORWARD -j NFQUEUE --queue-num=1 --queue-bypass
برای استفاده از اسنورت در مد inline دستور زیر را اجرا میکنیم. برای اجرا شدن اتوماتیک snort در هنگام بوت شدن سیستم آن را به صورت سرویس به سیستم اضافه می کنیم.
Iranshell@Snort:~$
sudo/usr/local/bin/snort-A console -q -u snort -g snort -c /etc/snort/snort.conf -Q
Iranshell@Snort:~$
sudo nano /etc/systemd/system/snort.service
Iranshell@Snort:~$
sudo systemctl enable snort
Iranshell@Snort:~$
sudo systemctl start snort
برای مسدود کردن سایر ترافیکها بدون آنالیز اسنورت از دستور زیر استفاده میکنیم.
Iranshell@Snort:~$
sudo iptables -P FORWARD DROP
دیدگاهتان را بنویسید