
Linux Hardening คืออะไร? ทำไม SysAdmin ทุกคนต้องทำ
ในโลกของ cybersecurity ที่ภัยคุกคามทางไซเบอร์มีความซับซ้อนและรุนแรงมากขึ้นทุกวัน การ hardening หรือการเสริมความแข็งแกร่งให้กับ Linux Server เป็นสิ่งที่ SysAdmin ทุกคนต้องให้ความสำคัญอย่างยิ่งยวด Hardening หมายถึง กระบวนการลดพื้นที่โจมตี (Attack Surface) ของ server โดยการปิดช่องทางที่ไม่จำเป็น เสริมการป้องกันที่มีอยู่ และตั้งค่าระบบให้มีความปลอดภัยสูงสุดตามมาตรฐานสากล
ทำไม Linux Hardening ถึงสำคัญ? เพราะ Linux server เป็นแกนหลักของ infrastructure ในองค์กรส่วนใหญ่ทั่วโลก ตั้งแต่ web server, database server, mail server ไปจนถึง container orchestration และ cloud workloads หากผู้โจมตีสามารถเจาะ server ได้ จะส่งผลกระทบร้ายแรงต่อองค์กร ทั้งการรั่วไหลของข้อมูล การหยุดชะงักของบริการ ความเสียหายทางการเงิน และชื่อเสียง
บทความนี้จะนำเสนอ Hardening Checklist ที่ครอบคลุมทุกด้านของ Linux Server Security พร้อมวิธีการตั้งค่าที่ปฏิบัติได้จริง เหมาะสำหรับ SysAdmin ทั้งมือใหม่และมืออาชีพที่ต้องการยกระดับความปลอดภัยของ server ให้เป็นไปตามมาตรฐาน CIS Benchmarks และ industry best practices ในปี 2026
ลดพื้นที่โจมตี (Reduce Attack Surface)
หลักการพื้นฐานของ hardening คือการลด attack surface ให้เหลือน้อยที่สุด หมายความว่า ทุกสิ่งที่ไม่จำเป็นต้องถูกปิดหรือลบออก
ลบ package ที่ไม่จำเป็น — ตรวจสอบ package ที่ติดตั้งอยู่ใน server และลบสิ่งที่ไม่ได้ใช้งานออก เช่น desktop environment (GNOME, KDE), game packages, development tools ที่ไม่จำเป็นสำหรับ production server ใน Debian/Ubuntu ใช้คำสั่ง dpkg –list เพื่อดู package ทั้งหมด แล้วใช้ apt purge เพื่อลบสิ่งที่ไม่ต้องการ ใน RHEL/CentOS ใช้ rpm -qa และ yum remove
ปิด service ที่ไม่จำเป็น — ตรวจสอบ service ที่กำลังทำงานอยู่ด้วยคำสั่ง systemctl list-units –type=service –state=running แล้วปิด service ที่ไม่ต้องใช้ เช่น avahi-daemon, cups, bluetooth, rpcbind ใช้ systemctl disable –now เพื่อปิดและป้องกันไม่ให้ start อัตโนมัติ
ปิด port ที่ไม่จำเป็น — ใช้คำสั่ง ss -tulnp หรือ netstat -tulnp เพื่อดู port ที่เปิดอยู่ ทุก port ที่เปิดคือช่องทางที่ผู้โจมตีอาจใช้เข้ามาได้ ปิด port ที่ไม่จำเป็นด้วยการหยุด service ที่ listen อยู่ และตั้ง firewall rule เพื่อบล็อก
Minimal Installation — เมื่อติดตั้ง Linux ใหม่ ให้เลือก minimal installation เสมอ แล้วค่อย install เฉพาะ package ที่ต้องการภายหลัง จะช่วยลด attack surface ได้ตั้งแต่ต้น
User Management — จัดการบัญชีผู้ใช้อย่างปลอดภัย
ปิดการ Login ด้วย root โดยตรง
การอนุญาตให้ login ด้วย root account โดยตรงเป็นความเสี่ยงอย่างมาก เพราะผู้โจมตีรู้อยู่แล้วว่า username คือ “root” จึงเหลือแค่ต้องเดารหัสผ่านเท่านั้น แนวปฏิบัติที่ดีคือ สร้าง user account ทั่วไปแล้วใช้ sudo เพื่อยกระดับสิทธิ์เมื่อจำเป็น
การปิด root login ทำได้โดยแก้ไขไฟล์ /etc/ssh/sshd_config ตั้งค่า PermitRootLogin no จากนั้น restart sshd service นอกจากนี้ควร lock root account ด้วยคำสั่ง passwd -l root เพื่อป้องกันการ login ผ่านทาง console ด้วย
การจัดการ sudo
sudo เป็นเครื่องมือที่ช่วยให้ user สามารถ execute คำสั่งด้วยสิทธิ์ root ได้โดยไม่ต้อง login เป็น root โดยตรง ควรตั้งค่า sudo ให้เฉพาะ user ที่จำเป็นเท่านั้น โดยเพิ่มเข้าไปใน group sudo (Debian/Ubuntu) หรือ wheel (RHEL/CentOS)
ควรใช้ visudo ในการแก้ไขไฟล์ sudoers เสมอ เพราะจะตรวจสอบ syntax ก่อนบันทึก สำหรับ production server แนะนำให้กำหนด sudo permission อย่างละเอียด โดยระบุคำสั่งที่ user แต่ละคนสามารถรันได้ แทนที่จะให้ ALL=(ALL:ALL) ALL ซึ่งเป็นการให้สิทธิ์ root เต็มรูปแบบ
Password Policy
การตั้ง password policy ที่เข้มแข็งเป็นพื้นฐานของความปลอดภัย ควรตั้งค่าดังนี้ ความยาวขั้นต่ำ 12 ตัวอักษร ต้องมีตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข และอักขระพิเศษ ตั้ง password expiry ทุก 90 วัน และ ห้ามใช้ password เก่า 10 ครั้งล่าสุดซ้ำ
การตั้งค่า password policy ใน Linux ทำได้ผ่าน PAM (Pluggable Authentication Modules) โดยแก้ไขไฟล์ /etc/security/pwquality.conf สำหรับกำหนดความซับซ้อนของ password และ /etc/login.defs สำหรับกำหนด PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_MIN_LEN และ PASS_WARN_AGE
Multi-Factor Authentication (MFA)
การเพิ่ม MFA เป็นอีกชั้นความปลอดภัยที่สำคัญมาก แม้ password จะรั่วไหล ผู้โจมตีก็ไม่สามารถ login ได้หากไม่มี second factor สำหรับ Linux server สามารถใช้ Google Authenticator PAM module (libpam-google-authenticator) เพื่อเพิ่ม TOTP (Time-based One-Time Password) ให้กับ SSH login ได้
การติดตั้งทำได้โดย install package libpam-google-authenticator จากนั้นรัน google-authenticator สำหรับแต่ละ user เพื่อ generate QR code และ secret key แล้วแก้ไข /etc/pam.d/sshd เพิ่มบรรทัด auth required pam_google_authenticator.so และแก้ /etc/ssh/sshd_config ตั้ง ChallengeResponseAuthentication yes
SSH Hardening — เสริมความปลอดภัย SSH
SSH เป็นช่องทางหลักในการเข้าถึง Linux server จากระยะไกล จึงเป็นเป้าหมายอันดับ 1 ของผู้โจมตี การ harden SSH อย่างเหมาะสมเป็นสิ่งจำเป็นอย่างยิ่ง
ใช้ Key-based Authentication เท่านั้น
การใช้ SSH key แทน password เป็นขั้นตอนแรกที่สำคัญที่สุดของ SSH hardening เพราะ SSH key มีความปลอดภัยสูงกว่า password มาก (key มีความยาว 2048-4096 bits ซึ่งเป็นไปไม่ได้ที่จะ brute force) การตั้งค่าทำได้โดย generate key pair ด้วย ssh-keygen บน client จากนั้น copy public key ไปยัง server ด้วย ssh-copy-id แล้วแก้ /etc/ssh/sshd_config ตั้ง PasswordAuthentication no เพื่อปิดการ login ด้วย password
เปลี่ยน SSH Port
แม้การเปลี่ยน SSH port จะเป็น “security through obscurity” แต่ก็ช่วยลด automated brute force attacks ที่กวาดทั้งอินเทอร์เน็ตได้อย่างมาก แก้ไข /etc/ssh/sshd_config ตั้ง Port เป็นหมายเลขอื่น เช่น 2222 หรือหมายเลขสุ่ม อย่าลืมเปิด port ใหม่ใน firewall ก่อน restart sshd
Fail2Ban — ป้องกัน Brute Force
Fail2Ban เป็นเครื่องมือที่ monitor log file แล้ว ban IP address ที่พยายาม login ผิดหลายครั้ง ติดตั้งผ่าน package manager แล้วตั้งค่าใน /etc/fail2ban/jail.local กำหนด maxretry (จำนวนครั้งที่ยอมให้ผิด), bantime (ระยะเวลาที่ ban), findtime (ช่วงเวลาที่นับ) Fail2Ban สามารถป้องกันได้ไม่เฉพาะ SSH แต่ยังรวมถึง web server, mail server และ service อื่นๆ ด้วย
AllowUsers / AllowGroups
จำกัด user ที่สามารถ SSH เข้ามาได้ โดยเพิ่มบรรทัด AllowUsers user1 user2 หรือ AllowGroups sshusers ใน sshd_config ทำให้แม้ user อื่นจะมี account อยู่ใน server ก็ไม่สามารถ SSH เข้ามาได้ เป็น defense in depth ที่สำคัญ
การตั้งค่า SSH อื่นๆ ที่แนะนำ
นอกจากที่กล่าวมาแล้ว ยังมีการตั้งค่า SSH อื่นๆ ที่ช่วยเพิ่มความปลอดภัย เช่น Protocol 2 (ใช้ SSH protocol version 2 เท่านั้น), MaxAuthTries 3 (จำกัดจำนวนครั้งในการพยายาม login), LoginGraceTime 60 (จำกัดเวลา login), ClientAliveInterval 300 และ ClientAliveCountMax 2 (disconnect session ที่ idle นานเกินไป), X11Forwarding no (ปิด X11 forwarding ที่ไม่จำเป็น) และ AllowTcpForwarding no (ปิด TCP forwarding หากไม่ต้องใช้)
Firewall — กำแพงป้องกันด่านแรก
Firewall เป็นแนวป้องกันด่านแรกที่สำคัญที่สุดของ server ทำหน้าที่กรอง traffic ที่เข้าและออกจาก server โดยอนุญาตเฉพาะ traffic ที่ได้รับอนุญาตเท่านั้น
UFW (Uncomplicated Firewall)
สำหรับ Ubuntu/Debian UFW เป็น firewall frontend ที่ใช้งานง่ายที่สุด หลักการคือ deny all incoming traffic by default แล้วค่อย allow เฉพาะ port ที่ต้องการ เช่น ufw default deny incoming จากนั้น ufw allow 22/tcp (หรือ port ที่เปลี่ยน) สำหรับ SSH, ufw allow 80/tcp และ ufw allow 443/tcp สำหรับ web server แล้ว ufw enable เพื่อเปิดใช้งาน
firewalld
สำหรับ RHEL/CentOS/Fedora ใช้ firewalld ซึ่งมี concept ของ zone ที่ช่วยจัดกลุ่ม rules ตามความไว้วางใจ เช่น public zone สำหรับ interface ที่เชื่อมต่อกับอินเทอร์เน็ต และ internal zone สำหรับ interface ภายใน ตั้งค่าด้วย firewall-cmd เช่น firewall-cmd –permanent –add-service=ssh และ firewall-cmd –reload
iptables / nftables
สำหรับผู้ที่ต้องการ control firewall ในระดับลึก สามารถใช้ iptables หรือ nftables (ตัวใหม่กว่า) โดยตรง nftables เป็น successor ของ iptables ที่มี syntax ที่เข้าใจง่ายกว่า performance ดีกว่า และรองรับ IPv4/IPv6 ในชุด rules เดียว สำหรับ server ใหม่ในปี 2026 แนะนำให้ใช้ nftables เป็นหลัก
หลักการตั้ง firewall ที่สำคัญคือ default policy ต้อง DROP สำหรับ INPUT และ FORWARD chains อนุญาตเฉพาะ traffic ที่จำเป็นจริงๆ เท่านั้น และ log traffic ที่ถูก drop เพื่อใช้วิเคราะห์ภายหลัง
SELinux และ AppArmor — Mandatory Access Control
SELinux (Security-Enhanced Linux) และ AppArmor เป็นระบบ Mandatory Access Control (MAC) ที่เพิ่มชั้นความปลอดภัยเหนือ traditional Unix file permissions โดยกำหนด policy ว่า process ใดสามารถเข้าถึง resource ใดได้บ้าง
SELinux
SELinux ถูกพัฒนาโดย NSA และ Red Hat ใช้เป็น default ใน RHEL/CentOS/Fedora มี 3 โหมด คือ Enforcing (บังคับใช้ policy), Permissive (แค่ log ไม่บังคับ) และ Disabled (ปิด) ควรตั้งเป็น Enforcing เสมอใน production server ตรวจสอบสถานะด้วย getenforce หรือ sestatus
SELinux อาจทำให้บาง application ทำงานไม่ได้หากไม่มี policy ที่เหมาะสม แต่ไม่ควรปิด SELinux เป็นทางแก้ ควรสร้าง custom policy แทน ใช้คำสั่ง audit2allow เพื่อ generate policy จาก audit log หรือใช้ setsebool เพื่อปรับ boolean ที่ต้องการ
AppArmor
AppArmor เป็น MAC system ที่ใช้เป็น default ใน Ubuntu/Debian/SUSE ทำงานคล้าย SELinux แต่ config ง่ายกว่าเพราะใช้ path-based rules แทน label-based ตรวจสอบสถานะด้วย apparmor_status สร้าง profile ใหม่ได้ด้วย aa-genprof และทดสอบด้วย aa-complain ก่อนเปลี่ยนเป็น aa-enforce
File Permissions — จัดการสิทธิ์ไฟล์อย่างรัดกุม
การตั้ง file permissions ที่ถูกต้องเป็นพื้นฐานของ Linux security ที่มักถูกมองข้าม ทุกไฟล์และ directory ใน Linux มี owner, group และ permissions ที่กำหนดว่าใครสามารถ read, write หรือ execute ได้
Sticky Bit, SUID, SGID Audit
SUID (Set User ID) — เมื่อ set ไว้บน executable file ผู้ที่รัน file นั้นจะได้สิทธิ์ของ file owner (มักเป็น root) เช่น /usr/bin/passwd ไฟล์ที่มี SUID ที่ไม่จำเป็นอาจถูกใช้เป็นช่องทาง privilege escalation ได้ ควร audit ไฟล์ SUID ทั้งหมดด้วยคำสั่ง find / -perm -4000 -type f แล้วลบ SUID bit ออกจากไฟล์ที่ไม่จำเป็น
SGID (Set Group ID) — คล้าย SUID แต่เป็นระดับ group ตรวจสอบด้วย find / -perm -2000 -type f
Sticky Bit — ใช้กับ directory เช่น /tmp เพื่อป้องกันไม่ให้ user ลบไฟล์ของ user อื่นได้ ตรวจสอบให้แน่ใจว่า /tmp และ /var/tmp มี sticky bit ตั้งอยู่
ไฟล์สำคัญที่ต้องตรวจสอบ Permissions
ไฟล์ที่ต้องมี permissions ที่ถูกต้องเสมอ ได้แก่ /etc/passwd ควรเป็น 644, /etc/shadow ควรเป็น 600, /etc/group ควรเป็น 644, /etc/gshadow ควรเป็น 600, /etc/ssh/sshd_config ควรเป็น 600 และ home directory ของ user ควรเป็น 700 หรือ 750
Automatic Security Updates — อัปเดตอัตโนมัติ
การอัปเดต security patch ทันเวลาเป็นสิ่งสำคัญมาก เพราะ vulnerability ที่ถูกเปิดเผยจะถูกผู้โจมตีนำไปใช้ภายในไม่กี่ชั่วโมง
unattended-upgrades (Debian/Ubuntu)
ติดตั้ง package unattended-upgrades แล้วตั้งค่าใน /etc/apt/apt.conf.d/50unattended-upgrades กำหนดให้ install security updates อัตโนมัติ สามารถตั้ง email notification เพื่อแจ้งเตือนเมื่อมี update และตั้ง automatic reboot หาก required (ควรตั้งให้ reboot ในช่วงเวลาที่ traffic น้อย)
dnf-automatic (RHEL/CentOS/Fedora)
สำหรับ RHEL-based ใช้ dnf-automatic ที่ทำหน้าที่เดียวกัน ตั้งค่าใน /etc/dnf/automatic.conf กำหนด apply_updates = yes และ upgrade_type = security แล้ว enable timer ด้วย systemctl enable –now dnf-automatic.timer
ข้อควรระวัง: สำหรับ production server ที่สำคัญมาก อาจไม่ควรให้ auto-update ทุก package โดยอัตโนมัติ เพราะ update บางตัวอาจทำให้ application ที่ run อยู่มีปัญหา แนะนำให้ auto-update เฉพาะ security patches แล้วทดสอบ update อื่นๆ ใน staging environment ก่อน
CIS Benchmarks — มาตรฐานความปลอดภัยระดับสากล
CIS (Center for Internet Security) Benchmarks เป็นมาตรฐานความปลอดภัยที่ได้รับการยอมรับทั่วโลก ประกอบด้วย checklist รายละเอียดสำหรับการ harden ระบบปฏิบัติการต่างๆ รวมถึง Linux distributions ทั้งหลาย
CIS Benchmark สำหรับ Linux ครอบคลุมหมวดหมู่ต่างๆ เช่น Initial Setup (filesystem configuration, software updates, filesystem integrity checking), Services (disable unnecessary services), Network Configuration (firewall, network parameters), Logging and Auditing, Access Authentication and Authorization, System Maintenance เป็นต้น
แต่ละ recommendation มี 2 ระดับ คือ Level 1 (ตั้งค่าพื้นฐานที่ควรทำทุก server) และ Level 2 (ตั้งค่าขั้นสูงสำหรับ server ที่ต้องการความปลอดภัยสูง) สามารถดาวน์โหลด CIS Benchmark ฟรีได้จากเว็บไซต์ CIS และใช้เป็นแนวทางในการ harden server อย่างเป็นระบบ
Audit Logging — บันทึกเหตุการณ์ด้วย auditd
auditd เป็น Linux Audit Daemon ที่บันทึกเหตุการณ์ระดับ system call ลงใน audit log ช่วยให้สามารถ track ได้ว่าใครทำอะไร เมื่อไหร่ บน server เป็น requirement สำคัญสำหรับ compliance และ forensics
การติดตั้งและตั้งค่า auditd ทำได้โดย install package auditd แล้วตั้งค่า rules ใน /etc/audit/rules.d/ audit rules ที่ควรตั้ง ได้แก่ monitor file access ของไฟล์สำคัญ (เช่น /etc/passwd, /etc/shadow, /etc/sudoers), monitor user และ group management commands, monitor system call ที่เกี่ยวกับ network configuration changes, monitor mount operations และ monitor kernel module loading
ตัวอย่าง audit rule ที่สำคัญ เช่น การ watch ไฟล์ /etc/passwd สำหรับ write และ attribute change หรือการ monitor คำสั่ง useradd, userdel, groupadd เป็นต้น ใช้ ausearch และ aureport เพื่อค้นหาและสรุปข้อมูลจาก audit log
Log Management — จัดการ Log อย่างเป็นระบบ
rsyslog
rsyslog เป็น syslog daemon ที่ใช้กันอย่างแพร่หลายใน Linux สามารถ collect, filter และ forward log ไปยัง centralized log server ได้ การส่ง log ไปยัง remote server เป็นสิ่งสำคัญมาก เพราะหากผู้โจมตีเข้าถึง server ได้ เขาอาจลบ log เพื่อปกปิดร่องรอย แต่ log ที่ส่งไปยัง remote server แล้วจะปลอดภัย
ตั้งค่า rsyslog ให้ส่ง log ไปยัง remote server โดยเพิ่มบรรทัดใน /etc/rsyslog.conf เช่น *.* @@logserver.example.com:514 (ใช้ @@ สำหรับ TCP, @ สำหรับ UDP) แนะนำให้ใช้ TCP และเปิด TLS encryption สำหรับ log transmission
journald
systemd-journald เป็น logging system ของ systemd ที่ collect log จากทุก service ที่รันผ่าน systemd ข้อดีคือมี structured logging ที่ค้นหาและ filter ได้ง่าย ด้วย journalctl สามารถตั้งค่าใน /etc/systemd/journald.conf กำหนด Storage=persistent เพื่อเก็บ log ข้าม reboot และกำหนด SystemMaxUse เพื่อจำกัดขนาด log
ควร forward log จาก journald ไปยัง rsyslog หรือ centralized log management เช่น ELK Stack (Elasticsearch, Logstash, Kibana) หรือ Grafana Loki เพื่อการวิเคราะห์และ monitoring ที่ดียิ่งขึ้น
Rootkit Detection — ตรวจจับ Rootkit
Rootkit เป็นมัลแวร์ที่ซ่อนตัวอยู่ในระบบอย่างแนบเนียน ยากต่อการตรวจจับ มักถูกใช้เพื่อ maintain access หลังจากเจาะเข้า server ได้แล้ว การสแกนหา rootkit เป็นประจำจึงเป็นสิ่งสำคัญ
rkhunter (Rootkit Hunter)
rkhunter เป็นเครื่องมือสแกน rootkit ที่ได้รับความนิยมมากที่สุด ทำงานโดยการตรวจสอบ system binaries ว่าถูกแก้ไขหรือไม่ ตรวจสอบ hidden files, suspicious kernel modules และ listening ports ที่ผิดปกติ ติดตั้งผ่าน package manager แล้วรัน rkhunter –check เพื่อสแกน ควรตั้ง cron job ให้สแกนอัตโนมัติทุกวันและส่ง report ทาง email
chkrootkit
chkrootkit เป็นอีกเครื่องมือหนึ่งสำหรับตรวจจับ rootkit ทำงานคล้าย rkhunter แต่ใช้วิธีการตรวจสอบที่แตกต่างกัน แนะนำให้ใช้ทั้ง rkhunter และ chkrootkit ร่วมกัน เพราะแต่ละตัวอาจตรวจจับ rootkit คนละประเภท การใช้ทั้งสองตัวจะเพิ่มโอกาสในการตรวจจับได้มากขึ้น
File Integrity Monitoring — ตรวจสอบความสมบูรณ์ของไฟล์
File Integrity Monitoring (FIM) เป็นการตรวจสอบว่าไฟล์สำคัญในระบบถูกแก้ไขหรือไม่ ช่วยตรวจจับการบุกรุกที่ผู้โจมตีแก้ไข system files หรือ configuration
AIDE (Advanced Intrusion Detection Environment)
AIDE ทำงานโดยสร้าง database ของ hash ไฟล์ทั้งหมด แล้วเปรียบเทียบกับ hash ปัจจุบันเป็นระยะ หาก hash ไม่ตรง แสดงว่าไฟล์ถูกแก้ไข ติดตั้งแล้วรัน aideinit เพื่อสร้าง database เริ่มต้น จากนั้นตั้ง cron job ให้รัน aide –check ทุกวัน ควรเก็บ AIDE database ไว้ใน read-only media หรือ remote server เพื่อป้องกันการถูก tamper
OSSEC
OSSEC เป็น Host-based Intrusion Detection System (HIDS) ที่มีความสามารถมากกว่า AIDE โดยรวม FIM, log analysis, rootkit detection, real-time alerting และ active response ไว้ในตัวเดียว สามารถ deploy แบบ agent-server สำหรับ monitor หลาย server พร้อมกัน มี web interface (Wazuh เป็น fork ที่พัฒนาต่อจาก OSSEC และได้รับความนิยมมากในปัจจุบัน)
Network Hardening — เสริมความปลอดภัยระดับเครือข่าย
ปิด Service ที่ไม่จำเป็น
ตรวจสอบ service ที่ listen อยู่บน network ด้วย ss -tulnp แล้วปิดทุก service ที่ไม่จำเป็น service ที่มักไม่จำเป็นบน production server ได้แก่ telnet, rsh, rlogin, FTP (ใช้ SFTP แทน), NFS (หากไม่ใช้), SNMP (หากไม่ใช้สำหรับ monitoring) และ X11
TCP Wrapper
TCP Wrapper (/etc/hosts.allow และ /etc/hosts.deny) เป็นอีกชั้นในการ control access ของ service ต่างๆ แม้จะเป็นเทคโนโลยีเก่า แต่ยังใช้ได้กับ service หลายตัว เช่น sshd หลักการคือ deny all ใน hosts.deny แล้ว allow เฉพาะ IP หรือ subnet ที่ต้องการใน hosts.allow
ปิด IPv6 (หากไม่ใช้)
หาก server ไม่ใช้ IPv6 ควรปิดเพื่อลด attack surface ทำได้โดยเพิ่ม parameter ใน /etc/sysctl.conf เช่น net.ipv6.conf.all.disable_ipv6 = 1 และ net.ipv6.conf.default.disable_ipv6 = 1 แล้วรัน sysctl -p เพื่อ apply
Kernel Hardening — ปรับ Kernel Parameters ด้วย sysctl
Linux kernel มี parameter หลายตัวที่สามารถปรับเพื่อเพิ่มความปลอดภัย ตั้งค่าใน /etc/sysctl.conf หรือไฟล์ใน /etc/sysctl.d/ แล้วรัน sysctl -p เพื่อ apply
ป้องกัน IP Spoofing — ตั้งค่า net.ipv4.conf.all.rp_filter = 1 เพื่อเปิด reverse path filtering ที่ช่วยป้องกัน IP spoofing
ปิด IP Forwarding — หาก server ไม่ได้ทำหน้าที่เป็น router ให้ตั้ง net.ipv4.ip_forward = 0 เพื่อปิด IP forwarding
ปิด ICMP Redirects — ตั้ง net.ipv4.conf.all.accept_redirects = 0 และ net.ipv4.conf.all.send_redirects = 0 เพื่อป้องกัน ICMP redirect attacks
ป้องกัน SYN Flood — ตั้ง net.ipv4.tcp_syncookies = 1 เพื่อเปิด SYN cookies protection ป้องกัน SYN flood DDoS attacks
ปิด Source Routing — ตั้ง net.ipv4.conf.all.accept_source_route = 0 เพื่อปิด source routing ที่อาจถูกใช้ในการ bypass firewall
Log Martian Packets — ตั้ง net.ipv4.conf.all.log_martians = 1 เพื่อ log packet ที่มี source address ผิดปกติ ช่วยในการตรวจจับ suspicious activity
ASLR (Address Space Layout Randomization) — ตั้ง kernel.randomize_va_space = 2 เพื่อเปิด ASLR เต็มรูปแบบ ช่วยป้องกัน buffer overflow attacks
Disk Encryption — เข้ารหัสข้อมูลด้วย LUKS
LUKS (Linux Unified Key Setup) เป็นมาตรฐาน disk encryption สำหรับ Linux ที่ช่วยป้องกันข้อมูลในกรณีที่ disk ถูกขโมยหรือ server ถูกเข้าถึงทางกายภาพ
LUKS ควรถูกตั้งค่าตั้งแต่ขั้นตอนการ install OS โดยเลือก encrypt ทั้ง disk หรือเฉพาะ partition ที่เก็บข้อมูลสำคัญ (เช่น /home, /var) สำหรับ server ที่มีอยู่แล้ว สามารถ encrypt partition เพิ่มเติมได้ด้วย cryptsetup
ข้อควรระวัง: เมื่อ encrypt disk แล้ว server จะต้อง input passphrase ตอน boot ทำให้ไม่สามารถ reboot อัตโนมัติได้ สำหรับ remote server สามารถใช้ network-unlock (Clevis + Tang) หรือ TPM-based unlock เพื่อแก้ปัญหานี้ได้
สำหรับ cloud server (AWS, GCP, Azure) ส่วนใหญ่มี managed disk encryption ให้ใช้ เช่น AWS EBS encryption ซึ่งจัดการง่ายกว่า LUKS และ integrate กับ KMS (Key Management Service) ได้
Time Synchronization — การซิงค์เวลา
การมีเวลาที่ถูกต้องบน server เป็นสิ่งสำคัญมากสำหรับ security เพราะ log timestamp ที่ไม่ตรงจะทำให้การวิเคราะห์ incident ทำได้ยาก และ certificate validation, Kerberos authentication และ MFA ล้วนต้องพึ่งพาเวลาที่ถูกต้อง
Chrony
Chrony เป็น NTP implementation ที่ได้รับความนิยมมากที่สุดในปัจจุบัน มีข้อดีเหนือ ntpd ตรงที่ sync เวลาได้เร็วกว่า ทำงานได้ดีแม้ network จะไม่เสถียร และใช้ resource น้อยกว่า ตั้งค่า NTP server ใน /etc/chrony.conf (หรือ /etc/chrony/chrony.conf) โดยชี้ไปที่ NTP server ที่น่าเชื่อถือ เช่น pool.ntp.org หรือ NTP server ขององค์กร
systemd-timesyncd
สำหรับ server ที่ใช้ systemd สามารถใช้ systemd-timesyncd ที่เป็น lightweight NTP client ได้ เหมาะสำหรับ server ที่ต้องการแค่ sync เวลาโดยไม่ต้อง serve NTP ให้ client อื่น ตั้งค่าใน /etc/systemd/timesyncd.conf
Backup and Recovery — สำรองข้อมูลและกู้คืน
Backup เป็นส่วนสำคัญของ security strategy ที่มักถูกมองข้าม ไม่ว่า security จะดีแค่ไหน ก็ไม่มีอะไรรับประกัน 100% ว่าจะไม่ถูก compromise Backup ที่ดีจะช่วยให้กู้คืนได้รวดเร็วเมื่อเกิดเหตุ
หลักการ 3-2-1 — เก็บ backup อย่างน้อย 3 ชุด ใน media อย่างน้อย 2 ชนิด (เช่น disk + cloud) โดย 1 ชุดต้องอยู่ offsite (คนละที่กับ server)
เครื่องมือ Backup — สำหรับ Linux มีเครื่องมือ backup หลายตัว เช่น rsync (sync file แบบ incremental), Borg Backup (deduplicated encrypted backup), restic (encrypted backup to cloud) และ Bacula/Bareos (enterprise backup solution) เลือกใช้ตามความเหมาะสมและขนาดของ infrastructure
ทดสอบ Restore เป็นประจำ — backup ที่ไม่เคย test restore อาจใช้ไม่ได้เมื่อต้องการ ควรทดสอบ restore อย่างน้อยเดือนละครั้ง เพื่อให้แน่ใจว่า backup สมบูรณ์และ restore procedure ทำงานได้จริง
Immutable Backup — ในยุคที่ ransomware เป็นภัยร้ายแรง ควรใช้ immutable backup ที่ไม่สามารถถูกลบหรือแก้ไขได้ แม้ผู้โจมตีจะได้ root access cloud storage อย่าง AWS S3 Object Lock หรือ Azure Blob immutable storage ช่วยในเรื่องนี้ได้
Hardening Automation — อัตโนมัติด้วย Ansible
การ harden server ทีละตัวด้วยมือเป็นงานที่ใช้เวลานานและอาจเกิดข้อผิดพลาดได้ง่าย โดยเฉพาะเมื่อมี server จำนวนมาก การใช้ automation tool อย่าง Ansible จะช่วยให้ hardening เป็นไปอย่างสม่ำเสมอและรวดเร็ว
Ansible Roles สำหรับ Hardening
มี Ansible roles สำเร็จรูปหลายตัวที่สร้างขึ้นมาเพื่อ hardening โดยเฉพาะ เช่น devsec.os_hardening และ devsec.ssh_hardening จาก DevSec Hardening Framework ซึ่ง implement CIS Benchmarks recommendations อัตโนมัติ สามารถ install ผ่าน Ansible Galaxy แล้วนำไปใช้ในplaybook ได้ทันที
ตัวอย่างการใช้งาน สร้าง playbook ที่ include hardening roles แล้วรัน ansible-playbook กับ inventory ของ server ทั้งหมด ทุก server จะได้รับ configuration ที่เหมือนกัน ลดโอกาสที่จะมี server ที่ถูก harden ไม่ครบ
นอกจาก Ansible แล้ว ยังสามารถใช้ Chef, Puppet หรือ SaltStack ได้เช่นกัน แต่ Ansible ได้รับความนิยมมากที่สุดเพราะใช้งานง่าย ไม่ต้องติดตั้ง agent บน target server
Compliance Scanning — ตรวจสอบ Compliance อัตโนมัติ
OpenSCAP
OpenSCAP เป็นเครื่องมือ open-source สำหรับ compliance scanning ที่ implement SCAP (Security Content Automation Protocol) สามารถสแกน server เทียบกับ CIS Benchmarks, DISA STIGs หรือ custom policies แล้ว generate report ที่บอกว่า pass/fail ในแต่ละ recommendation
การใช้งาน OpenSCAP ทำได้โดย install package openscap-scanner แล้วดาวน์โหลด content file (SCAP Security Guide) สำหรับ OS ที่ใช้ จากนั้นรัน oscap xccdf eval พร้อมระบุ profile ที่ต้องการ (เช่น CIS Level 1) ระบบจะ scan แล้ว generate report เป็น HTML ที่อ่านง่าย
Lynis
Lynis เป็น security auditing tool ที่ได้รับความนิยมสูงมากในหมู่ SysAdmin ทำงานโดยสแกน server แล้วให้คะแนน hardening index พร้อม suggestion สำหรับปรับปรุง ติดตั้งง่าย รันง่าย เพียงรัน lynis audit system แล้วอ่าน report ที่ /var/log/lynis.log
Lynis ตรวจสอบหลายด้าน เช่น boot และ services, kernel, memory และ processes, users, groups และ authentication, shells, file systems, storage, networking, ports และ packages, software (web servers, databases), name services, logging และ auditing, cryptography, virtualization, containers, security frameworks และ malware สแกนที่ครอบคลุมทำให้เป็นเครื่องมือที่ดีที่สุดสำหรับ quick security assessment
เทคนิคเพิ่มเติมและ Advanced Hardening
Restrict Core Dumps
Core dumps อาจเก็บข้อมูลสำคัญ เช่น password หรือ encryption key ที่อยู่ใน memory ควรปิด core dump สำหรับ production server โดยเพิ่ม * hard core 0 ใน /etc/security/limits.conf และ fs.suid_dumpable = 0 ใน /etc/sysctl.conf
Secure Shared Memory
mount /dev/shm ด้วย noexec, nosuid, nodev options เพื่อป้องกันการ execute malware จาก shared memory เพิ่มบรรทัด tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0 ใน /etc/fstab
Restrict USB Storage
สำหรับ server ที่ไม่ต้องการ USB storage สามารถ blacklist usb-storage module ได้โดยเพิ่ม blacklist usb-storage และ install usb-storage /bin/true ใน /etc/modprobe.d/blacklist-usb.conf
Login Banner
ตั้ง login banner ใน /etc/issue และ /etc/issue.net เพื่อแสดงข้อความเตือนก่อน login ว่า server นี้ถูก monitor และ unauthorized access เป็นสิ่งผิดกฎหมาย ซึ่งเป็น requirement ของหลาย compliance standards อีกทั้งยังเป็นหลักฐานทางกฎหมายที่สามารถใช้ดำเนินคดีกับผู้บุกรุกได้
Disable Ctrl+Alt+Del
สำหรับ physical server หรือ VM ที่มีคนเข้าถึง console ได้ ควรปิด Ctrl+Alt+Del เพื่อป้องกันการ reboot โดยไม่ตั้งใจ ทำได้โดย systemctl mask ctrl-alt-del.target
Hardening Checklist สรุปรวม
นี่คือ checklist สรุปรวมสำหรับ Linux Hardening ที่ SysAdmin ควรตรวจสอบทุก server
ด้าน User Management: ปิด root SSH login, ตั้ง password policy ที่เข้มแข็ง, เปิด MFA, ลบ user ที่ไม่ใช้, ตรวจสอบ user ที่มี UID 0, จำกัด sudo permission
ด้าน SSH: ใช้ key-based auth, เปลี่ยน port, ติดตั้ง Fail2Ban, ตั้ง AllowUsers, ปิด X11 forwarding, ตั้ง idle timeout
ด้าน Firewall: default deny all incoming, allow เฉพาะที่จำเป็น, log dropped traffic, ตรวจสอบ rules เป็นประจำ
ด้าน MAC: เปิด SELinux/AppArmor ใน enforcing mode, สร้าง custom policy สำหรับ application ที่ต้องการ
ด้าน File Permissions: audit SUID/SGID files, ตั้ง permission ที่เหมาะสมสำหรับไฟล์สำคัญ, ใช้ umask 027
ด้าน Updates: ตั้ง auto security updates, ทดสอบ update ใน staging ก่อน production
ด้าน Logging: ตั้ง auditd, ส่ง log ไป centralized server, ตั้ง log retention policy, monitor log อย่างสม่ำเสมอ
ด้าน Monitoring: ติดตั้ง AIDE/OSSEC, สแกน rootkit เป็นประจำ, สแกน compliance ด้วย Lynis/OpenSCAP
ด้าน Network: ปิด service ที่ไม่จำเป็น, ปิด IPv6 หากไม่ใช้, ตั้ง sysctl parameters, ปิด ICMP redirects
ด้าน Backup: ตั้ง automated backup, ทดสอบ restore, ใช้ immutable backup, เก็บ offsite
สรุป — Linux Hardening เป็นกระบวนการต่อเนื่อง
Linux Hardening ไม่ใช่งานที่ทำครั้งเดียวแล้วจบ แต่เป็นกระบวนการที่ต้องทำอย่างต่อเนื่อง ภัยคุกคามใหม่ๆ เกิดขึ้นทุกวัน vulnerability ใหม่ถูกค้นพบอยู่เสมอ SysAdmin ต้อง keep up to date กับ security advisories, update patch อย่างสม่ำเสมอ, audit configuration เป็นระยะ และ improve security posture อยู่ตลอด
เริ่มต้นจาก checklist ในบทความนี้ ทำทีละหัวข้อ ไม่จำเป็นต้องทำทุกอย่างในวันเดียว แต่ทุกขั้นตอนที่ทำจะช่วยลด attack surface และเพิ่มความปลอดภัยให้กับ server ของคุณอย่างมีนัยสำคัญ ใช้ Ansible เพื่อ automate hardening process ใช้ Lynis และ OpenSCAP เพื่อ assess และ track ความก้าวหน้า และที่สำคัญที่สุด อย่าลืม backup ข้อมูลสำคัญอย่างสม่ำเสมอ เพราะไม่มีระบบ security ไหนที่สมบูรณ์แบบ 100 เปอร์เซ็นต์ แต่การเตรียมตัวที่ดีจะช่วยลดความเสียหายเมื่อเกิดเหตุการณ์ไม่คาดฝันได้อย่างมาก