নতুন VPS-এ Lynis-এর প্রথম চালানো সাধারণত 60-এর কাছাকাছি কিছু দেয় আর পরামর্শের লম্বা তালিকা, যেখানে বোঝা যায় না আগে কোনটা ধরতে হবে। ভালো খবর: 80 থেকে 85 এক সন্ধ্যার কাজ, আর বেশিরভাগ ধাপ প্রসাধনী নয়, সত্যিই করার মতো। খারাপ খবর: শেষ পনেরো পয়েন্ট ভাড়া করা ভার্চুয়াল যন্ত্রে নাগালের বাইরে, আর তাদের পেছনে ছোটা ভুল।

index কী দেখায় আর কী দেখায় না

hardening index হলো উত্তীর্ণ পরীক্ষার সঙ্গে মোটের অনুপাত, ওজনসহ — নিরাপত্তার শতাংশ নয়। Lynis প্রায় তিনশো পরীক্ষা চালায় এবং দুটি আলাদা তালিকা দেয়: warnings, যেগুলো সত্যিকারের সমস্যার মতো দেখায়, আর suggestions, যেগুলো উন্নত করা যায়। সবসময় সতর্কতা দিয়ে শুরু করুন; সেগুলো সাধারণত মুষ্টিমেয়।

একশো পয়েন্ট হয় না: কিছু পরামর্শের জন্য সিস্টেম বসানোর সময়ে নেওয়া সিদ্ধান্ত দরকার (/home, /tmp/var-এর জন্য আলাদা পার্টিশন), কিছুর জন্য বুটলোডারে প্রবেশাধিকার দরকার যা VPS-এ নেই, আর কিছু পরস্পরবিরোধী। আর নিজের index অন্যের সঙ্গে তুলনা করা অর্থহীন: যন্ত্রে যা চলছে তার জন্যই Lynis পয়েন্ট কাটে। প্রতিটি চলমান সেবা আরেকটি খোলা পোর্ট, তার নিজের কনফিগ আর ডজনখানেক নতুন পরামর্শ, সেজন্যই উঁচু সংখ্যা সেখানেই বেশি মেলে যেখানে SSH ছাড়া কিছুই চলে না। সাইট, ডেটাবেস ও মেইলসহ কর্মরত সার্ভারের জন্য 85 ভালো ফল।

এটি root হিসেবে চালান

sudo lynis audit system

sudo ছাড়া Lynis সিস্টেম ফাইল লাগে এমন প্রতিটি পরীক্ষা এড়িয়ে যায় এবং কম index দেখায় — সার্ভার খারাপ বলে নয়, বরং যাচাইগুলো দেখাই যায়নি বলে। রিপোর্ট লেখা হয় /var/log/lynis-report.dat-এ, পড়ার উপযোগী লগ /var/log/lynis.log-এ।

ফলাফলের প্রতিটি লাইন শুরু হয় পরীক্ষার শনাক্তকারী দিয়ে, যেমন SSH-7408 বা KRNL-6000। এই শনাক্তকারী দিয়েই ব্যাখ্যাও মেলে, পরীক্ষা বন্ধ করার উপায়ও — এর চেহারা মনে রাখুন, নিচের সবকিছু এরই চারপাশে।

আসলে সংখ্যাটা কী বাড়ায়

SSH (SSH-7408)। সবচেয়ে ভারী অংশ: একটিমাত্র পরীক্ষা একসঙ্গে ডজনখানেক প্যারামিটার যাচাই করে। পুরো sshd_config সম্পাদনা করবেন না; আলাদা ফাইল ফেলুন যাতে প্যাকেজ হালনাগাদ আপনার কাজ মুছে দিতে না পারে:

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 2
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
TCPKeepAlive no
EOF
sudo sshd -t && sudo systemctl reload ssh

সেবা পুনরায় লোড করার আগে sshd -t বাধ্যতামূলক: সেশন চালু থাকা অবস্থায় কনফিগে করা ভুল আপনাকে বাইরে ফেলে দেবে। আর PasswordAuthentication no বসানোর আগে নিশ্চিত হয়ে নিন কি সত্যিই কাজ করে — দ্বিতীয় একটা খোলা টার্মিনাল থেকে।

কার্নেল প্যারামিটার (KRNL-6000)। পরীক্ষাটি দুই ডজন sysctl মান যাচাই করে। তাদের জন্য ফাইল:

sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sudo sysctl --system

অনুপস্থিত সরঞ্জাম। পরামর্শের ভালো একটা অংশ কেবল «যা নেই তা বসাও»: auditd (সিস্টেম ঘটনার হিসাব), aide (ফাইলের অখণ্ডতা), debsums (প্যাকেজের অখণ্ডতা), unattended-upgrades (স্বয়ংক্রিয় নিরাপত্তা হালনাগাদ), sysstatacct (প্রক্রিয়ার হিসাব), ম্যালওয়্যার স্ক্যানার। এদের প্রতিটি এক-দুটি পরামর্শ বন্ধ করে, কিন্তু এদের পয়েন্টের জন্য বসাবেন না: এগুলো ছাড়া ঘটনার পরে আপনি কিছুই জোড়া লাগাতে পারবেন না।

ছোট জিনিস যাদের পরিশ্রম-লাভ অনুপাত ভালো। /etc/login.defs-এ umask 027; একই ফাইলে পাসওয়ার্ডের বয়স; /etc/issue/etc/issue.net-এর ব্যানার; কম্পাইলার কেবল root-এর পাঠযোগ্য (chmod 700 /usr/bin/gcc)। ব্যানার নিয়ে সততার সঙ্গে: নিরাপত্তার জন্য সেগুলো কিছুই করে না, সেগুলো আইনি আনুষ্ঠানিকতা — তবে পয়েন্ট ঠিকই দেয়।

login.defs-এ একটা ফাঁদ

sed দিয়ে লাইন বদলে umask সম্পাদনা করলে প্রায়ই ফাইলে একসঙ্গে কয়েকটা UMASK লাইন থেকে যায়। তখন Lynis মানটা গণনাই করে না, আর পরীক্ষা AUTH-9328 লাল থেকে যায়, যদিও সেটিংস করা বলে মনে হয়। সম্পাদনার পরে যাচাই করুন:

grep -c '^UMASK' /etc/login.defs

ঠিক একটি থাকা উচিত। ওই ফাইলের অন্য প্রতিটি প্যারামিটারের ক্ষেত্রেও একই কথা।

মিথ্যা ফল এবং সেগুলো ঠিকভাবে চুপ করানো

কিছু সতর্কতা আপনার সার্ভারে প্রযোজ্যই নয়। জীবন্ত উদাহরণ: এক বড় প্রদানকারীর VPS-এ পরীক্ষা PKGS-7388 জানায় যে নিরাপত্তা রিপোজিটরি পাওয়া যায়নি — কেবল এই কারণে যে রিপোজিটরিগুলো deb822 বিন্যাসে মিরর ফাইলের উল্লেখসহ বর্ণিত, আর Lynis চেনা লাইনটা খুঁজছে। নিরাপত্তা হালনাগাদ দিব্যি আসে।

এটিকে রিপোর্ট থেকে লাইন মুছে নয়, প্রোফাইল দিয়ে চুপ করান। প্রোফাইল ফাইলের বর্ধিতাংশ .prf (.prof নয় — এখানে আধঘণ্টা হারানো সহজ), আর আপনার নিজের নিয়ম যায় /etc/lynis/custom.prf-এ:

skip-test=PKGS-7388
skip-test=KRNL-5788

একটি নিয়ম: প্রতিটি লাইনের পাশে মন্তব্য দরকার কেন পরীক্ষাটি বাদ দেওয়া হলো। ছয় মাস পরে আপনার মনে থাকবে না সেটা প্রযোজ্য নয় বলে বন্ধ ছিল না কি ঠিক করা বড্ড ঝামেলা ছিল বলে — আর এই দুইয়ের পার্থক্যই তো পুরো ব্যাপার।

যা করা উচিত নয়

সংখ্যার পেছনে ছুটবেন না। অসুবিধাজনক পরীক্ষা বন্ধ করে index সহজেই ফোলানো যায়, আর একটা স্তরের পরে সেটাই একমাত্র পথ — কেবল সার্ভার এতে বেশি নিরাপদ হয় না। কাজের জিনিস অন্য: নিজের মানটা লিখে রাখুন আর তার পরিবর্তন দেখুন। হালনাগাদ বা অন্য কারও কনফিগ সম্পাদনার পরে পড়ে যাওয়া index তার নিরঙ্কুশ আকারের চেয়ে অনেক বেশি মূল্যবান সংকেত।

ঠিক সেজন্যই Lynis একবার নয়, সূচি ধরে চালানো আর রিপোর্ট রেখে দেওয়া যুক্তিসঙ্গত, যাতে তুলনার জন্য কিছু থাকে। এক পাতায় জোড়া লাগানো অবস্থায় এটি কেমন দেখায় তা নিচের ডেমোতে: index, পরীক্ষার শনাক্তকারীসহ সতর্কতার তালিকা, আর আগের চালানোর পর থেকে কী বদলেছে।