Skip to main content

Command Palette

Search for a command to run...

Linux Server Hardening

Updated
3 min read

Server Hardening ဆိုတာဘာလဲ

လွယ်လွယ်ပြောရရင်တော့ Linux Systems ကို Attack လုပ်ရခက်အောင် security မြှင့်တာ၊ သုံးထားတဲ့ library တွေမှာ vulnerability တွေရှိရင် အဲသည့်အားနည်းချက်ကို အသုံးချမခံရအောင် upgrade လုပ်တာပါပဲ။

ဘယ်လို လုပ်ကြမလဲ? အောက်က အချက် ၉ ချက်ကို လုပ်ကြည့်ကြမယ်။ ဒါဖြင့် သည်အချက်ကိုးချက်ပဲလား လုံလောက်ပြီလား၊ ဘယ်လုံလောက်ပါ့မလဲ သည့်ထက်သည့်ထက်မက အများကြီးရှိဦးမှာပေါ့။ ကျွန်တော်ပြောမယ့်အထဲမှာတော့ အောက်က အချက်တွေပဲ ပါသေးတယ်။

၁. Linux System Remote Login (SSHD) service ကို Harden လုပ်တာ။

၂. Security Upgrade လုပ်တာ။

၃. Root user account ပိတ်တာ။

၄. Swap Space (virtual ram) လိုအပ်သလောက်ပေးတာ။

၅. မလိုအပ်တဲ့ compliers တွေကို ပိတ်တာ။

၆. Fail2ban သုံးပြီး systems ကို Attack လုပ်တဲ့ IP တွေကို ban တာ။

၇. Kernel parameter တွေပြင်တာ။

၈. Logwatch ကိုအသုံးပြုတာ။

၉. Systems Attack အလုပ်ခံရတဲ့အခါ နဲ့ Logwatch ‌ကနေ email ပို့ပေးဖို့လုပ်တာ။

ကျွန်တော် အခုသည် tutorials မှာ သုံးထားတဲ့ Linux Distors က Rocky Linux 8 ပါ။ Centos 7, Ubuntu , Oracle Linux တွေနဲ့လည်း အလုပ်လုပ်ပါတယ်။ package install လုပ်တာတော့ ကျွန်တော်တို့ သုံးတဲ့ Distros ပေါ်မူတည်ပြီး နည်းနည်းကွဲမှာပေါ့။

၁. SSH Remote Login Hardening

သည်အပိုင်းမှာ ssh hardening နဲ့ ssh connection အတွက် whitelist network ကိုပဲ allow ပေးတာကို လုပ်ကြည့်ကြပါ့မယ်။ ssh connection အတွက် whitelist network ကိုပဲ allow ပေးတဲ့နေရာမှာ ပုံမှန်အားဖြင့် ကျွန်တော်တို့ firewall ကို စစဉ်းစားကြမှာပေါ့။ cloud တွေနဲ့ on-prem မှာတော့ security group မှာ firewall rule ရေးရမှာ ဖြစ်ပေမယ့် အခု ကျွန်တော်တို့က ဆာဗာ level ကနေပဲ စဉ်းစားမှာ ဖြစ်ပါတယ်။ ဆာဗာထဲမှာလည်း firewalld (or) iptables ကိုသုံးပြီး ရေးလို့ရပေမယ့် အခုတော့ hosts ACL က ရေးတာကိုပဲ လုပ်မှာ ဖြစ်ပါတယ်။

Hosts Access Control Files က /etc/hosts.allow နဲ့ /etc/hosts.deny ဆိုတဲ့ နေရာနှစ်ခုမှာ ရှိပါတယ်။ အလုပ် ဘယ်လိုလုပ်လဲဆိုတော့ - hosts ကို access လုပ်တဲ့အခါမှာ ပထမဦးဆုံး hosts.allow ဖိုင်မှာ access လုပ်မယ့် ဆားဗစ် (daemon - ဥပမာ sshd) နဲ့ အသုံးပြုမယ့် client အတွဲကို သွားဖတ်ပါတယ်။ အဲသည့်မှာ ကိုက်ညီရင် allow ခွင့်ပြုပေးပါတယ်။ မကိုက်ညီဘူးဆိုရင် hosts.deny ကိုဆက်ဖတ်ပါတယ်။ hosts.deny rule ထဲမှာ ညိနေတာရှိရင် deny လုပ်ပါတယ်။ hosts.deny နဲ့ hosts.allow တွေမှာ config တွေမထည့်ထားဘူး empty ဆို hosts acl ကို မသုံးဘူးဆိုတဲ့ အဓိပ္ပါယ်ပါ။ Default အနေနဲ့ ဖိုင်တွေထဲမှာ ဘာမှမရှိတဲ့အတွက် default အနေနဲ့ကတော့ မသုံးထားဘူးပေါ့။

အခု ကျွန်တော်တို့က Hosts ACL ကိုသုံးမှာဖြစ်တဲ့အတွက် /etc/hosts.allow နဲ့ /etc/hosts.deny ကိုပြင်ကြပါမယ်။ Syntax example (ဘယ်လို‌ရေးရလဲဆိုတာ)ကို ကြည့်ချင်ရင် manual file (man hosts.deny) ဖွင့်ဖတ်ပြီးတော့သော်လည်းကောင်း၊ သို့မဟုတ် ဖိုင်ကို direct ပြင်ရင်သော်လည်းကောင်း ဥပမာ ပေးထားတဲ့ ရေးထုံးကို တွေ့ရပါလိမ့်မယ်။

Example: ALL: LOCAL @some_netgroup

ALL က ဘယ် services မဆို

LOCAL က . dot character မပါတဲ့ ဘယ် hosts မဆို

@some_netgroup က @sign ပါတဲ့ နက်ဝက်တခုခုပေါ့။

ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

ALL ဘယ် services မဆို

.foobar.edu (.foodbar.edu) က ဘယ်ဟာကိုမဆို

ချွင်းချက်အနေနဲ့ terminalserver.foobard.edu

ရေးတဲ့ပုံစံတွေက အမျိုးမျိုးရှိပါတယ်။ ကျွန်တော်တို့က ကျွန်တော်တို့ရဲ့ public IP ဒါမှမဟုတ် ကျွန်တော်တို့ private network က လာတဲ့ hosts တွေကိုပဲ sshd services ကိုပေးချိတ်မယ်။ အဲ့သည့်နက်ဝက်ကလာတာမှ မဟုတ်ရင် sshd ကို လာချိတ်ရင် ban မယ်ဆို သည်လိုရေးလို့ရပါတယ်။

ကျွန်တော်တို့ allow ပေးမယ့် private network (subnet)က 192.168.0.0/24 ဆိုပါစို့။

Public IP က 99.99.99.99 ဆိုပါစို့။

ပထမဦးဆုံး hosts.allow ဖိုင်ကို အရင်ပြင်ကြပါ့မယ်

$ sudo vim /etc/hosts.allow

Example Syntax -

ALL: LOCAL @some_netgroup

ALL: က any services ကျွန်တော်တို့က sshd ကို allow ပေးမယ် 192.168.0.0/24 network နဲ့ 99.99.99.99 ကိုမဟုတ်လား သည်လိုရေးလို့ရပါတယ်။

sshd: 192.168.0.0/24 99.99.99.99

:wq နဲ့ ဖိုင်ကို save ခဲ့ပါ။

ဒါဆိုရင် sshd services ကို 192.168.0.0 network နဲ့ 99.99.99.99 (ဥပမာအနေနဲ့သုံးတာ သက်သက်ပါ) ကို allow ပေးပြီးပါပြီ။

ဒါပြီးရင် hosts.deny ဖိုင်မှာ deny rule အတွက်သွားရေးပါမယ်။

$ sudo vim /etc/hosts.deny

sshd: ALL ဆိုပြီးရေးပေးလိုက်ပ့ါမယ်။

သည်လိုဆိုရင် sshd service ကို ဘယ်နက်ဝက်ကနေမဆို ခေါ်လို့မရတော့ဘူးဆိုတဲ့ အဓိပ္ပာယ်ပါ။ local (သည်စက်ကနေပဲ ssh ကိုသုံးပြီး) ကနေလည်း ဝင်လို့မရတော့ပါဘူး။ ဒါပေမယ့် ကျွန်တော်တို့ allow ပေးခဲ့တဲ့ 192.168.0.0/24 network ကနေနဲ့ public IP ကနေတော့ ဝင်လို့ရရမှာပေါ့။ ကျွန်တော်တို့ :wq နဲ့ ဖိုင်ကို သိမ်းပြီး စစ်ကြည့်ရအောင်ပါ။

$ ssh zarne@localhost (or) ssh zarne@127.0.0.1 ကိုသုံးပြီး ကျွန်တော်တို့ အခု harden လုပ်လိုက်တဲ့စက်ထဲကို ပြန်ဝင်ကြည့်ရအောင်ပါ။ ကျွန်တော်တို့ အောက်က error return ကိုရပြီး စက်ထဲဝင်လို့မရတာကို တွေ့ရပါလိမ့်မယ်။

ssh_exchange_identification: read: Connection reset by peer

ဒါဆို host.deny rule မှာ local ကိုတော့ ချွင်းချက်အနေနဲ့ထားပေးပါဆိုပြီး ရေးပြီး စမ်းကြည့်ရအောင်ပါ။

$ sudo vim /etc/hosts.deny

sshd: ALL except local

:wq

ဒါပြီးရင် သည်စက်ထဲကိုပဲ loopback IP ကိုသုံးပြီး ပြန်ဝင်ကြည့်ပါ။ ရတာကို တွေ့ရပါမယ်။

$ ssh zarne@localhost (or) ssh zarne@127.0.0.1

တခု သတိထားရမှာက sshd ကိုမှားပိတ်မိလိုက်ရင် ဆာဗာထဲကို သည်စက်ထဲကို sshd နဲ့ ပြန်ဝင်လို့မရနိုင်တော့တာတွေ ဖြစ်နိုင်တဲ့အတွက် သတိထားရပါမယ်။ တချို့ cloud တွေမှာဆို sshd only ပဲ remote management ရတဲ့အတွက် ကျွန်တော်တို့ မှားရေးမိရင် နောက်တခေါက်ပြန်ဝင်လို့မရနိုင်ဘူးဆိုတဲ့ ပြဿနာရှိပါတယ်။ rule တွေရေးပြီးတဲ့အခါ လက်ရှိ session ကိုမပိတ်ဘဲနဲ့ တခြား hosts / စက်ကနေ ssh နဲ့ remote login ဝင်ပြီး ရမရ စစ်ပေးဖို့လိုပါတယ်။ အခု ဥပမာထဲကဆို 192.168.0.0/24 network ထဲက စက်တလုံးလုံး ဒါမှမဟုတ် public IP 99.99.99.99 ကနေပေ့ါ။ အဲ့ကနေပါ ဝင်လို့မရရင် လက်ရှိရေးထားတဲ့ config တွေကို ပြန်စစ်ဖို့လိုပါတယ်။

Hosts ACL ကိုသုံးပြီး တခြားဆားဗစ်တွေကိုလည်း သည်တိုင်းပဲ ဆက်လုပ်လို့ရပါတယ်။

ဒါဖြင့် ကျွန်တော်တို့ sshd config ကိုပြင်ပြီး ဆားဗစ်ကို hardening ထပ်လုပ်ရအောင်ပါ။

အရင်ဆုံး အခြေခံအနေနဲ့ ဘာပဲလုပ်လုပ် မလုပ်ခင် backup ယူပါ။ အခုက sshd config ဖိုင်ကို ထိမှာဖြစ်တဲ့အတွက် အဲ့သည့်ဖိုင်ကို backup ယူပါမယ်။

(ဆက်ရန် - ကျန်တဲ့အပိုင်းတွေ ထပ်တင်ပေးပါမယ်)

More from this blog

37th Birthday

25 Aug 2024 မှာ ၃၇ နှစ်ပြည့်ပါတယ်။ မွေးနေ့ဆုတောင်း အိမ်ကလူတွေနဲ့ အလုပ်ထဲက မိတ်ဆွေတချို့ဆီကနေ ရတယ်။ အိမ်ကလူတွေဆိုလို့ အဖေနဲ့ ကိုယ့်နှမ အငယ်ဆုံးပါပဲ။ အလုပ်ထဲကလူတွေကတော့ မုန့်ဝယ်ကျွေးထားလို့ မှတ်မိနေကြတာ။ မွေးနေ့ အမှတ်တရ သွေးသွားလှူမယ် အစောကြီးကတည်းက တွ...

Aug 25, 20241 min read
37th Birthday

Own Service ကို systemd နဲ့ startup လုပ်တာ env ကြောင့်အလုပ်မလုပ်တာလေး

ပြီးခဲ့တဲ့ တပတ်ကျော်လောက်က ရုံးက ထုံးစံအတိုင်းပဲ java နဲ့ ရေးထားတဲ့ service တခုကို boot အတက်မှာ running ဖြစ်အောင်လုပ်ပေးပါဆိုတော့ ဒါလေးများ easyquizzy လုပ်နေကြပဲ ဆိုပြီး script ရေးပြီး ထည့်တာပေ့ါလေ။ ဘယ်လိုလုပ်လဲက အွန်လိုင်းမှာ လိုက်ရှာကြည့်လို့ရပါတယ်...

Jun 15, 20232 min read

ဆာတီဖီကိတ်တွေ

ပိုက်ဆံကုန်ခံပြီး ဖြေဖြစ်ခဲ့တာ Red Hat ပဲရှိတယ်။ RHCE က သည်နှစ် ၃ လပိုင်းက သက်တမ်းကုန်သွားပြီ။ RHCS Ansible ဖြေဖို့လုပ်ဖြစ်ခဲ့ပေမယ့် မဖြေဖြစ်လိုက်ဘူး။ သင်တန်းက စာရေးမတယောက်က ဖြေမယ့်ရက်ပြန်ပြောပေးမယ်ဆိုပြီး ဘာမှ ပြန်မပြော၊ ကျွန်တော်ကလည်း သင်တန်းက ဆရာတ...

May 18, 20231 min read

လူတွေ စာဖတ်ပျင်းသွားကြပြီလား

လူတွေ စာဖတ်ပျင်းသွားကြပြီလား ဆိုတော့ စာအုပ်ကိုင်ပြီး ဖတ်ရတာ ပျင်းလာတယ်ဆိုရင်တော့ ဟုတ်မှာပဲ။ စာအုပ်ကိုင်ဖတ်တဲ့လူနည်းသွားပေမယ့် ဖုန်း tablet ကွန်ပျူတာ ဒါတွေကိုသုံးပြီး စာဖတ်နေတဲ့လူတွေ မနည်းဘူး မဟုတ်လား။ ဒါဖြင့် စာအုပ်တွေ မရောင်းရတော့ဘူးလား။ မဟုတ်ဘူးလို...

May 15, 20231 min read

zarneaung

6 posts

The guy who loves playing chess, who works as a SysAdmin, SRE and/or Cloud Engineer.

Linux Server Hardening