สารบัญ
- พื้นฐาน: การอัปเดตระบบและการจัดการแพ็กเกจ
- การเสริมความปลอดภัยการเข้าถึง SSH
- การตั้งค่าไฟร์วอลล์และการเสริมความปลอดภัยเครือข่าย
- การควบคุมการเข้าถึงและการยืนยันตัวตน
- การตรวจสอบ การตรวจประเมิน และการตรวจจับการบุกรุก
- การควบคุมการเข้าถึงและการจัดการสิทธิ์
- การเสริมความปลอดภัยและการบำรุงรักษาอย่างต่อเนื่อง
- บทสรุป
การทำให้เซิร์ฟเวอร์ Debian 12 ปลอดภัยต้องทำมากกว่าการติดตั้งระบบปฏิบัติการและเชื่อมต่อกับอินเทอร์เน็ต ผู้ดูแลระบบส่วนใหญ่ทำตามแนวทางความปลอดภัยพื้นฐาน คืออัปเดตแพ็กเกจ เปิดใช้ไฟร์วอลล์ และปิดการเข้าสู่ระบบด้วย root แต่กลับมองข้ามขั้นตอนการเสริมความปลอดภัยสำคัญหลายข้อที่ช่วยยกระดับความปลอดภัยได้อย่างชัดเจน มาตรการที่ถูกละเลยเหล่านี้สร้างช่องโหว่ที่ใช้โจมตีได้ ซึ่งผู้โจมตีระดับสูงคอยค้นหาอยู่ตลอดเวลา คู่มือฉบับสมบูรณ์นี้เผย 15 ขั้นตอนการเสริมความปลอดภัยที่จำเป็น ซึ่งผู้ดูแลระบบที่มีประสบการณ์มักมองข้าม เพื่อเปลี่ยนเซิร์ฟเวอร์ Debian 12 ของคุณจากแค่ใช้งานได้ ให้ปลอดภัยจริงจากการคุกคามสมัยใหม่
ความต่างระหว่างการติดตั้งแบบพื้นฐานกับเซิร์ฟเวอร์ Debian 12 ที่เสริมความปลอดภัยอย่างถูกต้อง เป็นตัวกำหนดว่าระบบของคุณจะรอดจากการโจมตีแบบเจาะจง หรือกลายเป็นสถิติแรนซัมแวร์อีกราย แต่ละขั้นตอนที่มองข้ามคือพื้นผิวการโจมตีที่เพิ่มขึ้น ช่องโหว่ที่อาจเกิดขึ้น และโอกาสที่พลาดไปในการยกระดับกำแพงความปลอดภัยก่อนภัยคุกคามจะเกิดขึ้นจริง

พื้นฐาน: การอัปเดตระบบและการจัดการแพ็กเกจ
ขั้นตอนที่ 1: ตั้งค่าอัปเดตความปลอดภัยอัตโนมัติด้วย Unattended Upgrades
แม้ผู้ดูแลระบบส่วนใหญ่จะรัน apt update และ apt upgradeแต่มีเพียงไม่กี่คนที่ตั้งค่าการแพตช์ความปลอดภัยอัตโนมัติ ซึ่งเป็นการมองข้ามครั้งสำคัญที่ทำให้ระบบเผชิญความเสี่ยงระหว่างรอบอัปเดตด้วยมือ
แพตช์ความปลอดภัยของ Debian แก้ไขช่องโหว่ที่รู้จักซึ่งผู้โจมตีนำไปใช้โจมตีอยู่จริง การอัปเดตด้วยมือสร้างช่องว่างที่เป็นอันตราย เช่น เช้าวันจันทร์ที่คุณรันอัปเดต ช่องโหว่ zero-day ของวันอังคารถูกนำไปใช้หมุนเวียนในกลุ่มผู้โจมตีแล้ว พอถึงเย็นวันอังคาร ระบบของคุณก็ยังไม่ถูกแพตช์ทั้งที่มีตัวแก้อยู่ในคลังของ Debian แล้ว
ติดตั้ง unattended-upgrades เพื่ออัปเดตความปลอดภัยอัตโนมัติ:
bashsudo apt update && sudo apt upgrade -y
sudo apt install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure -plow unattended-upgrades
ตั้งค่าอัปเดตความปลอดภัยอัตโนมัติโดยแก้ไข /etc/apt/apt.conf.d/50unattended-upgrades:
bashsudo nano /etc/apt/apt.conf.d/50unattended-upgrades
ตรวจสอบว่าการตั้งค่าสำคัญเหล่านี้เปิดใช้งานอยู่:
textUnattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Mail "[email protected]";
Unattended-Upgrade::MailOnlyOnError "true";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
การตั้งค่านี้จะติดตั้งอัปเดตความปลอดภัยโดยอัตโนมัติทุกวัน ลบแพ็กเกจเคอร์เนลที่ไม่ได้ใช้ และส่งอีเมลถึงคุณเฉพาะเมื่อเกิดข้อผิดพลาด ช่วยป้องกันช่องว่างความปลอดภัยที่เป็นอันตรายโดยไม่เพิ่มภาระงานของผู้ดูแล
การเสริมความปลอดภัยเซิร์ฟเวอร์ Debian 12 ด้วยชั้นป้องกันไฟร์วอลล์
การเสริมความปลอดภัยการเข้าถึง SSH
ขั้นตอนที่ 2: บังคับใช้การยืนยันตัวตนด้วยคีย์ SSH (ปิดการยืนยันตัวตนด้วยรหัสผ่าน)
เซิร์ฟเวอร์ส่วนใหญ่เปิดการยืนยันตัวตนด้วยรหัสผ่าน SSH ไว้เป็นค่าเริ่มต้น ซึ่งเป็นช่องโหว่ที่เปิดทางให้เกิดการโจมตีแบบ brute-force จากทุกที่บนอินเทอร์เน็ต ผู้โจมตีใช้เครื่องมืออัตโนมัติลองรหัสผ่านหลายล้านชุดทุกคืน และถ้าคุณไม่ใช้รหัสผ่านที่แข็งแรงเป็นพิเศษร่วมกับ fail2ban สักวันหนึ่งก็จะมีคนเดาถูกจนได้
การยืนยันตัวตนด้วยคีย์ SSH ปลอดภัยกว่าในเชิงการเข้ารหัส: แม้ผู้โจมตีเจาะเข้าเครือข่ายของคุณได้ พวกเขาก็ใช้รหัสผ่านที่ขโมยมาไม่ได้ เพราะเซิร์ฟเวอร์ไม่รับรหัสผ่านอีกต่อไป
สร้างคู่คีย์ SSH ที่แข็งแรงบนเครื่องของคุณ:
bashssh-keygen -t rsa -b 4096 -f ~/.ssh/debian_server -N "your-strong-passphrase"
คัดลอกคีย์สาธารณะไปยังเซิร์ฟเวอร์ของคุณ (ทำครั้งเดียวจากเครื่องของคุณ):
bashssh-copy-id -i ~/.ssh/debian_server.pub username@your_server_ip
ตอนนี้ตรวจสอบว่าการเข้าถึงด้วยคีย์ทำงานได้ก่อนปิดการใช้รหัสผ่าน:
bashssh -i ~/.ssh/debian_server username@your_server_ip
แก้ไขการตั้งค่าของ SSH daemon:
bashsudo nano /etc/ssh/sshd_config
ใช้การตั้งค่า SSH ที่เสริมความปลอดภัยเหล่านี้:
textProtocol 2
Port 22
AddressFamily inet
ListenAddress 0.0.0.0
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no
UsePAM yes
PermitEmptyPasswords no
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 1m
StrictModes yes
IgnoreRhosts yes
HostbasedAuthentication no
RhostsRSAAuthentication no
RSAAuthentication no
X11Forwarding no
X11UseLocalhost no
TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 2
Subsystem sftp /usr/lib/openssh/sftp-server
รีสตาร์ต SSH เพื่อให้การเปลี่ยนแปลงมีผล:
bashsudo systemctl restart ssh
ทดสอบการตั้งค่าของคุณอย่างละเอียดก่อนออกจากเซสชันปัจจุบัน เพราะหากตั้งค่าผิดพลาด คุณอาจถูกล็อกออกจากระบบอย่างถาวร
ความปลอดภัยของการยืนยันตัวตนด้วยคีย์ SSH เพื่อการเข้าถึงเซิร์ฟเวอร์ที่ปลอดภัย
ขั้นตอนที่ 3: เปลี่ยนพอร์ต SSH จากค่าเริ่มต้น 22 (ไม่บังคับแต่ได้ผล)
แม้ไม่จำเป็นในเชิงการเข้ารหัส การเปลี่ยน SSH จากพอร์ต 22 ช่วยลดเสียงรบกวนจากการสแกนพอร์ตของเครื่องมือโจมตีอัตโนมัติ นี่คือความปลอดภัยผ่านการปกปิด ซึ่งใช้ได้จริงในการลดขยะในล็อกและทำให้การตรวจค้นแบบผิวเผินช้าลง
ใน /etc/ssh/sshd_configให้แก้ไข:
textPort 2222
อัปเดตไฟร์วอลล์เพื่ออนุญาตพอร์ตใหม่:
bashsudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
จดบันทึกการเปลี่ยนแปลงนี้ไว้ เพราะคุณจะลืมมันตอนเกิดเหตุฉุกเฉินครั้งหน้าที่ตี 3
ขั้นตอนที่ 4: ติดตั้ง Fail2ban เพื่อป้องกันการโจมตีแบบ brute-force
แม้ใช้การยืนยันตัวตนด้วยคีย์ SSH แล้ว บริการเสริมอื่น ๆ (อีเมล เว็บแอปพลิเคชัน ฯลฯ) อาจยังรับรหัสผ่าน Fail2ban จะเฝ้าดูความพยายามยืนยันตัวตนที่ล้มเหลวและแบนที่อยู่ IP ที่ก่อเหตุชั่วคราว หยุดการโจมตีแบบ brute-force ก่อนจะสำเร็จ
ติดตั้ง Fail2ban:
bashsudo apt update && sudo apt install fail2ban -y
ตั้งค่า Fail2ban โดยคัดลอกไฟล์การตั้งค่าเริ่มต้น:
bashsudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
แก้ไขไฟล์การตั้งค่า:
bashsudo nano /etc/fail2ban/jail.local
ใน [DEFAULT] ให้ตั้งค่า:
text[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8 ::1 your_trusted_ip
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1800
เริ่มและเปิดให้ Fail2ban ทำงานตอนบูต:
bashsudo systemctl enable fail2ban
sudo systemctl start fail2ban
ตรวจดูการแบนที่กำลังทำงานอยู่:
bashsudo fail2ban-client status sshd
การตั้งค่านี้จะแบน IP เป็นเวลา 1800 วินาที (30 นาที) เมื่อมีการพยายาม SSH ผิดพลาด 3 ครั้งภายในช่วง 10 นาที ซึ่งเข้มงวดพอที่จะหยุดการโจมตีแบบเดารหัสผ่านซ้ำ ๆ โดยไม่ทำให้เกิดการแบนผิดพลาด
การตั้งค่าไฟร์วอลล์และการเสริมความปลอดภัยเครือข่าย
ขั้นที่ 5: ตั้งค่าไฟร์วอลล์ UFW ด้วยนโยบายเริ่มต้นที่เข้มงวด
ผู้ดูแลระบบหลายคนข้ามการตั้งค่าไฟร์วอลล์หรือใช้กฎที่ผ่อนปรนเกินไป ไฟร์วอลล์ที่ตั้งค่าอย่างถูกต้องคือแนวป้องกันแรกของคุณต่อการเข้าถึงโดยไม่ได้รับอนุญาต
ติดตั้งและตั้งค่า UFW (Uncomplicated Firewall):
bashsudo apt update && sudo apt install ufw -y
ก่อนเปิดใช้งาน UFW ให้อนุญาต SSH ก่อนเพื่อไม่ให้ล็อกตัวเองออกจากระบบ:
bashsudo ufw allow 2222/tcp
sudo ufw allow ssh
กำหนดนโยบายเริ่มต้นแบบจำกัด:
bashsudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny routed
เปิดใช้งาน UFW:
bashsudo ufw enable
สำหรับเว็บเซิร์ฟเวอร์ ให้อนุญาต HTTP และ HTTPS เพิ่มด้วย:
bashsudo ufw allow 80/tcp
sudo ufw allow 443/tcp
อนุญาตเฉพาะ IP ที่ระบุให้เข้าถึงบริการที่ละเอียดอ่อน:
bashsudo ufw allow from 192.168.1.100 to any port 3306
ดูการตั้งค่าของคุณ:
bashsudo ufw status verbose
ขั้นที่ 6: เสริมความปลอดภัยพารามิเตอร์เคอร์เนลด้วย Sysctl
ผู้ดูแลระบบแทบไม่เคยแก้ไขพารามิเตอร์เคอร์เนลนอกเหนือจากค่าเริ่มต้น ซึ่งเป็นการมองข้ามที่สำคัญ การเสริมความปลอดภัยเคอร์เนลผ่าน sysctl สามารถป้องกันการโจมตีเครือข่ายและการโจมตีช่องโหว่ได้ทั้งกลุ่ม
สร้างไฟล์การตั้งค่าสำหรับเสริมความปลอดภัย:
bashsudo nano /etc/sysctl.d/99-hardening.conf
เพิ่มพารามิเตอร์เสริมความปลอดภัยของเคอร์เนลให้ครบถ้วน:
text# Network Security
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# IPv6 Security
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Memory Protection
kernel.dmesg_restrict = 1
kernel.printk = 3 3 3 3
kernel.kptr_restrict = 2
kernel.core_uses_pid = 1
kernel.kexec_load_disabled = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
# Process Restrictions
kernel.unprivileged_userns_clone = 0
kernel.perf_event_paranoid = 3
ใช้การตั้งค่าเสริมความปลอดภัยทันที:
bashsudo sysctl -p /etc/sysctl.d/99-hardening.conf
พารามิเตอร์เหล่านี้ปิดการส่งต่อ IP (เว้นแต่คุณจำเป็นต้องใช้) เปิด SYN cookies เพื่อป้องกันการโจมตีแบบ SYN flood เปิดการกรอง reverse-path เพื่อป้องกันการปลอมแปลง IP และเพิ่มการป้องกันหน่วยความจำต่อการเปิดเผยข้อมูล
ขั้นที่ 7: ปิดบริการเครือข่ายที่ไม่จำเป็น
ทุกบริการที่ทำงานอยู่คือพื้นที่โจมตีที่อาจเกิดขึ้น การติดตั้ง Debian ตามค่าเริ่มต้นหลายแห่งมีบริการที่คุณไม่จำเป็นต้องใช้ เช่น เมลเซิร์ฟเวอร์ ตัวแปลง DNS หรือแม้แต่ Bluetooth บนเซิร์ฟเวอร์แบบไม่มีหน้าจอ
ระบุบริการที่กำลังทำงาน:
bashsudo systemctl list-units --type=service --state=running
ตรวจสอบว่าบริการใดกำลังเปิดรับการเชื่อมต่อบนพอร์ตเครือข่าย:
bashsudo ss -tulnp
ปิดบริการที่ไม่จำเป็น สำหรับเว็บเซิร์ฟเวอร์พื้นฐาน คุณมักไม่จำเป็นต้องใช้:
bashsudo systemctl disable bluetooth.service
sudo systemctl disable cups.service
sudo systemctl disable avahi-daemon.service
sudo systemctl mask isc-dhcp-server
sudo systemctl mask isc-dhcp-server6
หลังจากปิดไม่ให้เริ่มตอนบูตแล้ว ให้หยุดบริการเหล่านั้น:
bashsudo systemctl stop bluetooth.service
sudo systemctl stop cups.service
จดบันทึกว่าคุณปิดบริการใดบ้างและเพราะอะไร เพราะข้อมูลนี้สำคัญมากเมื่อมีการตรวจสอบความปลอดภัย
การควบคุมการเข้าถึงและการยืนยันตัวตน
ขั้นที่ 8: ใช้การยืนยันตัวตนสองขั้นตอนสำหรับ SSH
การยืนยันตัวตนสองขั้นตอน (2FA) เพิ่มชั้นความปลอดภัยที่สอง แม้มีคนได้คีย์ส่วนตัว SSH ของคุณไป พวกเขาก็ยังเข้าถึงเซิร์ฟเวอร์ของคุณไม่ได้หากไม่มีปัจจัยที่สอง
ติดตั้ง Google Authenticator สำหรับ TOTP (รหัสผ่านใช้ครั้งเดียวตามเวลา):
bashsudo apt update && sudo apt install libpam-google-authenticator -y
ตั้งค่า 2FA ในฐานะผู้ใช้ของคุณ (ไม่ใช่ root):
bashgoogle-authenticator -t -f -d -w 10 -r 3 -R 30
คำสั่งนี้จะสร้าง QR code ให้สแกนด้วยแอปยืนยันตัวตนของคุณ เก็บรหัสสำรองไว้ในที่ปลอดภัย เพราะนี่คือช่องทางกู้คืนของคุณหากอุปกรณ์ยืนยันตัวตนหาย
แก้ไขการตั้งค่า PAM ของ SSH เพื่อบังคับใช้ 2FA:
bashsudo nano /etc/pam.d/sshd
เพิ่มบรรทัดนี้ก่อน @include common-auth:
textauth required pam_google_authenticator.so nullok
แก้ไขการตั้งค่าดีมอน SSH:
bashsudo nano /etc/ssh/sshd_config
เพิ่มหรือแก้ไข:
textChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
รีสตาร์ต SSH:
bashsudo systemctl restart ssh
ทดสอบการตั้งค่าของคุณด้วยหน้าต่างเทอร์มินัลใหม่ก่อนปิดเซสชันปัจจุบัน
การยืนยันตัวตนสองขั้นตอนช่วยรักษาความปลอดภัยในการเข้าถึงเซิร์ฟเวอร์ Debian
ขั้นที่ 9: เสริมความปลอดภัยนโยบายบัญชีผู้ใช้
นโยบายบัญชีผู้ใช้เริ่มต้นใน Debian มีข้อจำกัดไม่เพียงพอ หากไม่เสริมความปลอดภัย นโยบายรหัสผ่านที่อ่อนแอและกลไกการล็อกบัญชีจะทำให้ระบบเสี่ยงต่อการถูกยึดข้อมูลรับรอง
แก้ไข /etc/login.defs เพื่อบังคับใช้นโยบายรหัสผ่านที่เข้มงวดขึ้น:
bashsudo nano /etc/login.defs
แก้ไขการตั้งค่าสำคัญเหล่านี้:
textPASS_MAX_DAYS 30
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
LOGIN_RETRIES 3
LOGIN_TIMEOUT 60
FAILLOG_ENAB yes
LOG_UNKFAIL_ENAB yes
LOG_OK_LOGINS yes
SYSLOG_SU_ENAB yes
ปิดใช้งานบัญชีผู้ใช้ที่ไม่จำเป็น:
bashsudo passwd -l games
sudo passwd -l news
sudo passwd -l uucp
สร้างการกำหนดค่า sudo ที่เข้มงวด ซึ่งกำหนดให้ต้องใช้รหัสผ่านและบันทึกการใช้งาน sudo:
bashsudo visudo
ตรวจสอบให้แน่ใจว่ามีบรรทัดเหล่านี้:
textDefaults use_pty
Defaults log_input, log_output
Defaults requirepass
%sudo ALL=(ALL:ALL) ALL
การตั้งค่านี้บังคับให้คำสั่ง sudo ทำงานใน pseudo-terminal บันทึกอินพุต/เอาต์พุตทั้งหมด และกำหนดให้ต้องยืนยันด้วยรหัสผ่านเมื่อยกระดับสิทธิ์
การตรวจสอบ การตรวจประเมิน และการตรวจจับการบุกรุก
ขั้นตอนที่ 10: ใช้งานการบันทึกล็อกอย่างครอบคลุมด้วย Auditd
ผู้ดูแลระบบส่วนใหญ่อาศัยเพียง syslog จึงพลาดเหตุการณ์ด้านความปลอดภัยโดยละเอียดที่ auditd บันทึกไว้ auditd ให้ร่องรอยการตรวจสอบโดยละเอียดซึ่งจำเป็นสำหรับการสืบสวนทางนิติวิทยาศาสตร์และการปฏิบัติตามข้อกำหนด
ติดตั้ง auditd:
bashsudo apt update && sudo apt install auditd audispd-plugins -y
กำหนดค่า auditd โดยแก้ไข /etc/audit/rules.d/audit.rules:
bashsudo nano /etc/audit/rules.d/audit.rules
เพิ่มกฎการตรวจสอบที่สำคัญ:
text# Remove any existing rules
-D
# Buffer Size
-b 8192
# Failure Mode
-f 2
# Audit the audit logs
-w /var/log/audit/ -k auditlog
# Audit system administration
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
# Audit system calls
-a always,exit -F arch=b64 -S execve -k exec
-a always,exit -F arch=b32 -S execve -k exec
# Audit file modifications
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
# Make the configuration immutable
-e 2
โหลดกฎการตรวจสอบ:
bashsudo systemctl restart auditd
ดูล็อกการตรวจสอบ:
bashsudo ausearch -m EXECVE --start recent
สร้างรายงานการตรวจสอบ:
bashsudo aureport
auditd สร้างล็อกจำนวนมหาศาล—กำหนดค่าการหมุนเวียนล็อกเพื่อป้องกันปัญหาเนื้อที่ดิสก์เต็ม
ขั้นตอนที่ 11: ติดตั้งเครื่องมือตรวจจับ rootkit และมัลแวร์
ผู้ดูแลระบบหลายคนคิดว่าระบบของตนปลอดมัลแวร์เพราะไม่มีอะไรดูผิดปกติ rootkit ที่ซับซ้อนจะซ่อนการมีอยู่ของมันไว้พร้อมกับคงการเข้าถึงของผู้โจมตีไว้
ติดตั้ง rootkit hunter:
bashsudo apt update && sudo apt install rkhunter -y
sudo rkhunter --update
sudo rkhunter --check --skip-warning
ติดตั้ง chkrootkit เพื่อตรวจหามัลแวร์อีกชั้นหนึ่ง:
bashsudo apt install chkrootkit -y
sudo chkrootkit
ติดตั้ง AIDE (Advanced Intrusion Detection Environment) สำหรับตรวจสอบความสมบูรณ์ของไฟล์:
bashsudo apt install aide aide-common -y
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
sudo aide --check
ตั้งเวลาสแกนรายสัปดาห์ผ่าน cron:
bashsudo nano /etc/cron.d/rootkit-checks
เพิ่ม:
text0 2 * * 0 root /usr/bin/rkhunter --check --skip-warning 2>&1 | mail -s "Weekly rootkit check" [email protected]
0 3 * * 0 root /usr/bin/aide --check 2>&1 | mail -s "Weekly AIDE check" [email protected]
เครื่องมือเหล่านี้แจ้งเตือนคุณเกี่ยวกับ rootkit และมัลแวร์ก่อนที่มันจะฝังตัวถาวรในระบบ
ขั้นตอนที่ 12: เปิดใช้งานและตรวจสอบล็อกของระบบ
ผู้ดูแลระบบมักเปิด syslog ไว้แต่ไม่เคยตรวจดูล็อกจริง ๆ ล็อกจะมีประโยชน์ก็ต่อเมื่อคุณเฝ้าติดตามอย่างจริงจัง
กำหนดค่า rsyslog สำหรับการบันทึกล็อกอย่างครอบคลุม:
bashsudo nano /etc/rsyslog.conf
ตรวจสอบให้แน่ใจว่าเปิดใช้งานโมดูลสำคัญแล้ว:
textmodule(load="imuxsock")
module(load="imklog")
module(load="imtcp")
input(type="imtcp" port="514")
กำหนดค่าการหมุนเวียนล็อกด้วย logrotate:
bashsudo nano /etc/logrotate.d/rsyslog
ตรวจสอบให้แน่ใจว่าหมุนเวียนล็อกอย่างถูกต้อง:
text/var/log/syslog {
daily
rotate 14
compress
delaycompress
notifempty
create 0640 syslog adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
ติดตั้งและกำหนดค่า logwatch สำหรับสรุปล็อกรายวัน:
bashsudo apt install logwatch -y
sudo nano /etc/logwatch/conf/logwatch.conf
กำหนดค่าการส่งอีเมล:
textOutput = mail
Format = html
Email = [email protected]
Hostname = your-server-name
การควบคุมการเข้าถึงและการจัดการสิทธิ์

ขั้นตอนที่ 13: ใช้งานและบังคับใช้การควบคุมการเข้าถึงแบบบังคับ
ระบบสิทธิ์การเข้าถึงมาตรฐานของ Linux (DAC) มีความละเอียดไม่พอที่จะป้องกันไม่ให้แอปพลิเคชันที่ถูกเจาะทำความเสียหายต่อระบบ AppArmor ให้การควบคุมการเข้าถึงแบบบังคับ (MAC) ตามโปรไฟล์ ซึ่งช่วยป้องกันการเคลื่อนที่ในแนวนอนหลังถูกเจาะ
Debian มี AppArmor มาพร้อมค่าเริ่มต้น แต่บ่อยครั้งโหลดโปรไฟล์ไว้เพียงน้อย ตรวจสอบว่า AppArmor ทำงานอยู่:
bashsudo aa-status
ติดตั้งโปรไฟล์ AppArmor เพิ่มเติม:
bashsudo apt install apparmor-profiles apparmor-profiles-extra apparmor-utils -y
โหลดโปรไฟล์ใหม่:
bashsudo systemctl reload apparmor
ตรวจสอบว่าการป้องกันทำงานอยู่:
bashsudo aa-status | grep "profiles in enforce mode"
สร้างโปรไฟล์ AppArmor แบบกำหนดเองสำหรับแอปพลิเคชันที่ละเอียดอ่อน:
bashsudo aa-genprof /usr/bin/your-application
AppArmor จำกัดแอปพลิเคชันให้เข้าถึงเฉพาะทรัพยากรที่กำหนดไว้ ป้องกันไม่ให้เว็บเซิร์ฟเวอร์ที่ถูกเจาะเข้าถึงไฟล์ระบบหรือการกำหนดค่าฐานข้อมูล
ขั้นตอนที่ 14: กำหนดค่าสิทธิ์การเข้าถึงไฟล์และ umask อย่างปลอดภัย
สิทธิ์การเข้าถึงไฟล์โดยค่าเริ่มต้นใน Debian อนุญาตให้อ่านได้โดยไม่จำเป็น การกำหนดค่า umask ที่เหมาะสมป้องกันไม่ให้ไฟล์ที่ละเอียดอ่อนถูกอ่านได้โดยทุกคน
ตรวจสอบ umask ปัจจุบัน:
bashumask
ตั้งค่าเริ่มต้นที่ปลอดภัยใน /etc/profile.d/ สำหรับผู้ใช้ทุกคน:
bashsudo nano /etc/profile.d/secure-umask.sh
เพิ่ม:
textif [ $UID -ge 1000 ]; then
umask 0077
else
umask 0027
fi
ทำให้ไฟล์นี้เรียกใช้งานได้:
bashsudo chmod 644 /etc/profile.d/secure-umask.sh
ตรวจสอบสิทธิ์ไฟล์ปัจจุบันของไฟล์สำคัญที่ผู้ใช้อื่นอ่านได้:
bashsudo find /etc -type f -perm -444 -exec ls -l {} \;
sudo find /home -type f -perm -444 -exec ls -l {} \;
ลบสิทธิ์การอ่านที่ไม่จำเป็น:
bashsudo chmod 600 /etc/ssh/sshd_config
sudo chmod 640 /etc/sudoers
ขั้นตอนที่ 15: ปิด capabilities ของระบบไฟล์ที่ไม่จำเป็น
ระบบ Linux สมัยใหม่ให้สิทธิ์แบบละเอียดแก่โปรแกรม แทนการแบ่งแบบไบนารีระหว่าง root กับ non-root capabilities ที่ไม่จำเป็นบนไบนารีของระบบจะสร้างช่องทางยกระดับสิทธิ์
ระบุ capabilities บนไบนารีของระบบ:
bashgetcap -r /usr/bin 2>/dev/null
getcap -r /usr/sbin 2>/dev/null
ลบ capabilities ที่ไม่จำเป็น (ตัวอย่าง):
bashsudo setcap -r /usr/bin/dumpcap
sudo setcap -r /usr/bin/chsh
บันทึกว่า capabilities ใดจำเป็นสำหรับแอปของคุณ แล้วลบส่วนที่เหลือ แต่ละอย่างล้วนเป็นช่องทางยกระดับสิทธิ์ที่อาจถูกใช้ประโยชน์ได้
การเสริมความปลอดภัยและการบำรุงรักษาอย่างต่อเนื่อง
หลังจากทำตามขั้นตอนการเสริมความปลอดภัยทั้ง 15 ข้อนี้แล้ว ความปลอดภัยจะกลายเป็นกระบวนการต่อเนื่อง:
งานประจำเดือน: ตรวจสอบบันทึกการตรวจสอบเพื่อหาความผิดปกติ ดูรูปแบบการแบนของ Fail2ban ปรับพารามิเตอร์เคอร์เนลตามความจำเป็น และตรวจสอบว่าโปรไฟล์ AppArmor ทำงานอยู่
งานประจำไตรมาส: สแกนหา rootkit แบบเต็มรูปแบบ ตรวจสอบกฎไฟร์วอลล์เพื่อหาข้อยกเว้นที่ไม่จำเป็น ตรวจสอบบัญชีผู้ใช้ที่ไม่มีการใช้งาน และหาบริการที่เลิกใช้แล้วซึ่งปิดได้
งานประจำปี: ตรวจสอบความปลอดภัยอย่างครบถ้วนด้วยเครื่องมืออย่าง Lynis ทบทวนและอัปเดตนโยบายความปลอดภัยทั้งหมด ทดสอบขั้นตอนการกู้คืนจากภัยพิบัติ และอัปเดตแผนรับมือเหตุการณ์
บทสรุป
ความแตกต่างระหว่างเซิร์ฟเวอร์ Debian 12 ที่มีช่องโหว่กับเครื่องที่เสริมความปลอดภัยแล้วอยู่ที่การลงมือทำ 15 ขั้นตอนเหล่านี้ซึ่งผู้ดูแลระบบจำนวนมากมองข้าม ตั้งแต่การอัปเดตความปลอดภัยอัตโนมัติและการเสริมความปลอดภัยของคีย์ SSH ไปจนถึงการปรับพารามิเตอร์เคอร์เนล การบันทึกข้อมูลอย่างครอบคลุม และการตรวจสอบอย่างต่อเนื่อง แต่ละมาตรการจัดการกับเส้นทางโจมตีเฉพาะที่ผู้โจมตีระดับสูงใช้ประโยชน์อยู่ทุกวัน
เริ่มจากขั้นตอนพื้นฐาน ได้แก่ การอัปเดตอัตโนมัติ การบังคับใช้การยืนยันตัวตนด้วยคีย์ SSH การตั้งค่าไฟร์วอลล์ และการเปิดใช้ 2FA จากนั้นค่อยไปสู่การตรวจสอบและตรวจจับการบุกรุก อย่าพยายามทำทุกอย่างพร้อมกัน การเสริมความปลอดภัยเป็นระยะจะช่วยป้องกันข้อผิดพลาดในการตั้งค่าและทำให้คุณเข้าใจแต่ละองค์ประกอบ บันทึกการเปลี่ยนแปลงอย่างละเอียด ทดสอบการตั้งค่าก่อนนำขึ้นใช้งานจริง และหมั่นตรวจสอบอย่างสม่ำเสมอ
เซิร์ฟเวอร์ Debian 12 ของคุณจะไม่มีวันปลอดภัย 100% ความปลอดภัยคือการเดินทางที่ต่อเนื่อง ไม่ใช่จุดหมายปลายทาง แต่การทำตามขั้นตอนการเสริมความปลอดภัยทั้ง 15 ข้อนี้จะกำจัดเป้าหมายง่าย ๆ ที่การโจมตีอัตโนมัติใช้ประโยชน์ และสร้างการป้องกันที่แน่นหนาพอจะต้านทานได้ทุกฝ่าย ยกเว้นคู่ต่อสู้ที่มุ่งมั่นและมีทรัพยากรสูงสุด


