Snort: ওপেন-সোর্স নেটওয়ার্ক ইনট্রুশন ডিটেকশন/প্রিভেনশন সিস্টেম (IDS/IPS) দিয়ে নেটওয়ার্ক হার্ডেনিং
Snort (Cisco-এর মালিকানা, GPLv2) নেটওয়ার্ক সিকিউরিটির ডি-ফ্যাক্টো স্ট্যান্ডার্ড IDS/IPS। এটি রিয়েল-টাইম ট্রাফিক অ্যানালাইসিস, রুল-ভিত্তিক থ্রেট ডিটেকশন, প্যাকেট লগিং এবং ইনলাইন ব্লকিং (IPS মোডে) দিয়ে নেটওয়ার্ককে হার্ডেন করে। নিচে ইনস্টলেশন, কনফিগারেশন, রুল ম্যানেজমেন্ট এবং প্রোডাকশন ডিপ্লয়মেন্ট গাইড দেওয়া হলো।
Snort-র কাজ করার মোড
| মোড | বিবরণ | ব্যবহার ক্ষেত্র |
| Sniffer Mode | প্যাকেট ক্যাপচার করে কনসোলে দেখায় (tcpdump-সদৃশ) | ডিবাগিং, লার্নিং |
| Packet Logger Mode | প্যাকেট লগ ফাইলে লেখে (pcap / unified2) | ফরেনসিক, ऑफलাইন অ্যানালাইসিস |
| NIDS Mode (IDS) | রুলসের বিপরীতে ট্রাফিক ম্যাচ করলে অ্যালার্ট জেনারেট করে (ব্লক করে না) | মনিটরিং, SOC অ্যালার্টিং |
| NIPS Mode (IPS - Inline) | ট্রাফিক ইনলাইন होकर যায়, ম্যালিশিয়াস প্যাকেট ড্রপ/ব্লক করে | প্রোডাকশন ব্লকিং, হায়-পারফরম্যান্স নেটওয়ার্ক |
ইনস্টলেশন (Ubuntu 22.04/24.04 LTS / Debian 12)
# ১. ডিপেন্ডেন্সি
sudo apt update && sudo apt install -y build-essential libpcap-dev libpcre3-dev libdnet-dev zlib1g-dev luajit libluajit-5.1-dev libnghttp2-dev libssl-dev libhwloc-dev libmnl-dev libnetfilter-queue-dev libunwind-dev
# ২. DAQ (Data Acquisition Library) - IPS মোডের জন্য NFQ DAQ প্রয়োজন
cd /tmp && wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar xzf daq-2.0.7.tar.gz && cd daq-2.0.7
./configure && make && sudo make install
# ৩. Snort 2.9.x (স্টেবল) বা 3.x (আধুনিক, 멀티-থ্রেডেড)
# Snort 3 (সুপারিশ):
cd /tmp && wget https://github.com/snort3/snort3/archive/refs/tags/3.1.80.0.tar.gz -O snort3.tar.gz
tar xzf snort3.tar.gz && cd snort3-3.1.80.0
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build && sudo make install
sudo ldconfig
# ৪. কনফিগারেশন ডিরেক্টরি সেটআপ
sudo mkdir -p /etc/snort/rules /etc/snort/preproc_rules /usr/local/lib/snort_dynamicrules /var/log/snort
sudo cp /usr/local/etc/snort/snort.lua /etc/snort/snort.lua
sudo cp /usr/local/etc/snort/file_magic.lua /etc/snort/
কনফিগারেশন: snort.lua (Snort 3) / snort.conf (Snort 2.9)
-- /etc/snort/snort.lua (Snort 3) - মূল অংশ
HOME_NET = '192.168.1.0/24' -- আপনার লোকাল নেটওয়ার্ক
EXTERNAL_NET = 'any'
-- ইন্টারফেস সেট করুন
interface = 'ens192' -- আপনার ইন্টারফেস (ip link show দিয়ে চেক করুন)
-- রুল পাথ
rules = [[
include /etc/snort/rules/local.rules
include /etc/snort/rules/community.rules
-- সাবস্ক্রিপশন থাকলে: include /etc/snort/rules/snort3-subscriber.rules
]]
-- আউটপুট: Unified2 (ফাস্ট, স্ট্যান্ডার্ড)
output = {
unified2 = {
filename = '/var/log/snort/snort.log',
limit = 128, -- MB
nostamp = false,
}
}
-- IPS মোডে (inline) NFQ ব্যবহার করতে:
-- ips = { mode = 'inline', policy = 'security' }
রুলস (Rules) ম্যানেজমেন্ট: ওয়াস্ট বা পুলসড্রে (oinkmaster / pulledpork)
# PulledPork 3 (Snort 3 compatible) - সাবস্ক্রিপশন (Oinkcode) বা কমিউনিটি রুলস আপডেটের জন্য
cd /tmp && git clone https://github.com/shirkdog/pulledpork3
cd pulledpork3 && sudo make install
# /etc/pulledpork3/pulledpork.conf এ Oinkcode এবং রুল পাথ সেট করুন
sudo pulledpork3 -c /etc/pulledpork3/pulledpork.conf -l -v
# Cron job দিয়ে দৈনিক আপডেট:
# 0 3 * * * /usr/local/bin/pulledpork3 -c /etc/pulledpork3/pulledpork.conf -l > /var/log/pulledpork.log 2>&1
Snort রান করা (টেস্ট / প্রোডাকশন)
# কনফিগারেশন টেস্ট
sudo snort -c /etc/snort/snort.lua --plugin-path /usr/local/lib/snort --warn-all
# IDS মোডে (প্রোমিস্কুয়াস, ট্রাফিক ট্যাপ/SPAN পোর্ট থেকে)
sudo snort -c /etc/snort/snort.lua -i ens192 -A alert_fast -k none
# IPS মোডে (Inline - NFQUEUE ব্যবহার করে)
# ১. iptables রুল এড করুন ট্রাফিক NFQUEUE-তে পাঠাতে
sudo iptables -I FORWARD -j NFQUEUE --queue-num 0
# ২. Snort IPS মোডে চালান
sudo snort -c /etc/snort/snort.lua -i ens192 --daq nfq --daq-var queue=0 -A alert_fast -k none
# নোট: প্রোডাকশনে systemd service তৈরি করুন।
প্রোডাকশন ডিপ্লয়মেন্ট আর্কিটেকচার (Best Practice)
- প্লেসমেন্ট: Snort সенসর ফায়ারওয়ালের ভিতরে (Internal interface) রাখুন যাতে ইন্টারন্যাল ল্যাটারাল মুভমেন্ট, C2 বিন, ডেটা এক্সফিল্ট্রেশন ডিটেক্ট হয়। এক্সটার্নাল ইন্টারফেসে রাখলে এনক্রিপ্টেড ট্রাফিক (TLS 1.3) দেখতে পাবেন না।
- ট্রাফিক ভিজিবিলিটি: SPAN/Mirror পোর্ট (IDS) বা Inline TAP/NFQUEUE (IPS) ব্যবহার করুন।
- পারফরম্যান্স টিউনিং:
- Snort 3: `--enable-tcmalloc`, `HYPERSCAN` (regex acceleration), 멀티-থ্রেড (`snort -c ... --threads=4`)。
- অফলোড: RSS (Receive Side Scaling), XDP/eBPF (AF_XDP) ব্যবহার করুন।
- রুল অপ্টিমাইজেশন: শুধু প্রয়োজনীয় রুলসেট (Emerging Threats Pro, Talos, Snort Subscriber) ব্যবহার করুন, `disable` কীওয়ার্ড দিয়ে নয়েজি রুল বন্ধ করুন।
- হায় আভেইলেবিলিটি: দুটি সেনসর Active/Standby (keepalived/VRRP) বা Active/Active (Load Balancer) এ ডিপ্লয় করুন।
- লগ ম্যানেজমেন্ট: Unified2 লগ → Filebeat / Logstash / Fluent Bit → Elasticsearch / Splunk / OpenSearch → Kibana / Dashboard।
- অ্যালার্ট টুনিং: False Positive কমাতে রুল থ্রেশহোল্ড (`threshold`, `suppression`) ব্যবহার করুন। MITRE ATT&CK ট্যাগ দিয়ে অ্যালার্ট এনরিচ করুন।
Snort 3 এর নতুন ফিচারস (Snort 2.9.x থেকে উন্নতি)
- মাল্টি-থ্রেডেড আর্কিটেকচার: একক প্রসেসে একাধিক প্যাকেট প্রসেসিং থ্রেড (RSS/AF_XDP সাপোর্ট) — ১০ Gbps+ হ্যান্ডেল করতে পারে।
- Lua-ভিত্তিক কনফিগারেশন (snort.lua): পাইথন-সদৃশ সিনট্যাক্স, মডুলার, সহজে স্ক্রিপ্টেবল।
- প্লাগইন আর্কিটেকচার: কাস্টম ডিটেকশন প্লাগইন লিখা যায় (Lua/C++)।
- Hyperscan সাপোর্ট: হাই-পারফরম্যান্স রেগুলার এক্সপ্রেশন ম্যাচিং।
- বेहতর پروتোকল ডিকোডার: HTTP/2, TLS 1.3, DNS over HTTPS, QUIC, gRPC প্রোটোকল অ্যানালাইসিস।
- NFQ / AF_XDP DAQ: কernel-বাইপাস হাই-স্পিড IPS।
সামান্য সমস্যা ও সমাধান
- High CPU / Packet Drop: রুলসেট ছোট করুন, Hyperscan সক্ষম করুন, AF_XDP ব্যবহার করুন, ট্রাফিক ফিল্টার করুন (বেশি পোর্ট বাদ দিন)।
- False Positives: Suppression rules (`suppress gen_id 1, sig_id 1234, track by_src, ip 192.168.1.10`) ব্যবহার করুন।
- SSL/TLS ট্রাফিক অনালাইজ করা যায় না: Snort পেলোড ডিক্রিপ্ট করতে পারে না। TLS Inspection (SSL Decryption) প্রক্সি (Squid, F5, Palo Alto) দিয়ে ডিক্রিপ্টেড ট্রাফিক Snort-এ পাঠান।
- রুলস আপডেট হয় না: Oinkcode চেক করুন, PulledPork লগ চেক করুন, ডিস্ক স্পেস চেক করুন।
বিকল্প ও পূরক টুলস
- Suricata: 멀্টি-থ্রেডেড, Lua/JIT,conditional logging, Eve JSON আউটপুট, Kubernetes সাপোর্ট — বর্তমান সেরা অপেন-সোর্স IDS/IPS।
- Zeek (Bro): নেটওয়ার্ক ট্রাফিক অ্যানালাইসিস ফ্রেমওয়ার্ক (ফ্লো-ভিত্তিক, প্রোটোকল ডিকোডিং, ফাইল এক্সট্রাকশন) — IDS নয়, NSM (Network Security Monitoring) টুল।
- Wazuh / OSSEC: HIDS (Host-based) + নেটওয়ার্ক IDS ইন্টিগ্রেশন।
- Security Onion: পূর্ণ NSM ডিস্ট্রো (Ubuntu-ভিত্তিক) — Snort/Suricata/Zeek/Wazuh/Elastic/Kibana প্রি-কনফিগার্ড। নতুনদের জন্য সেরা স্টার্টিং পয়েন্ট।