SSD Nodes Learn
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-07-24

วิธีติดตั้งและตั้งค่า Webmin บน Ubuntu 24.04

คู่มือติดตั้ง Webmin บน Ubuntu 24.04 พร้อมวิธีป้องกันความปลอดภัยด้วย SSH tunnel, Let's Encrypt, 2FA และ Fail2ban เพื่อป้องกันการถูกบุกรุกผ่าน port 10000

สิ่งที่คุณกำลังจะสร้าง

Webmin คือ web control panel ที่เปลี่ยน Linux server ทั้งระบบให้สามารถควบคุมผ่าน web browser ได้ ไม่ว่าจะเป็นการจัดการ users, packages, cron jobs, firewall, Apache, BIND, disks และโมดูลอื่น ๆ อีกกว่าหนึ่งร้อยรายการ โดยสามารถเข้าถึงได้ผ่าน HTTPS บน port 10000 การติดตั้งประกอบด้วยคำสั่งเพียง 3 คำสั่ง และใช้เวลาประมาณ 1 นาที สาเหตุที่คู่มือนี้เน้นเนื้อหาในช่วงครึ่งหลังเป็นหลัก เนื่องจาก Webmin จะเข้าสู่ระบบด้วยสิทธิ์ root และสามารถทำงานทุกอย่างได้เหมือน root หากปล่อยให้ Webmin เปิดทิ้งไว้โดยไม่มีการป้องกันหรือไม่มีการยืนยันตัวตน จะไม่ใช่แค่ "ความเสี่ยงที่ต้องจัดการ" แต่หมายถึงการถูกควบคุม server ทั้งระบบผ่านหน้า login ดังนั้น โปรดติดตั้งให้เสร็จภายใน 10 นาที แล้วใช้เวลาที่เหลือในการตั้งค่าเพื่อให้มั่นใจว่ามีเพียงคุณเท่านั้นที่สามารถเข้าถึงระบบได้

ข้อกำหนดเบื้องต้นและคำเตือนที่สำคัญ

เครื่อง Ubuntu 24.04 KVM VPS ที่ติดตั้งใหม่ โดยมีสิทธิ์ root หรือผู้ใช้ที่มีสิทธิ์ sudo Webmin พัฒนาด้วยภาษา Perl และใช้ทรัพยากรน้อยมาก โดยใช้ RAM เพียง 1 GB ก็เพียงพอแล้ว และขณะไม่ได้ใช้งานจะใช้ทรัพยากรน้อยกว่า 0.25 GB Webmin ทำงานผ่าน TCP port 10000 โดยใช้ web server ในตัว (miniserv.pl) ไม่ได้ใช้ Apache หรือ nginx ดังนั้นจึงไม่จำเป็นต้องติดตั้งซอฟต์แวร์อื่นเพิ่มเติมก่อน

มีสองสิ่งที่ต้องตัดสินใจก่อนเริ่มใช้งาน อย่างแรกคือบัญชีที่จะใช้เข้าสู่ระบบ เนื่องจาก Webmin ตรวจสอบสิทธิ์ผ่านบัญชี Unix โดยใช้ PAM ดังนั้นคุณต้องเข้าสู่ระบบด้วย root หรือผู้ใช้ในกลุ่ม sudo โดยใช้ Unix password ของบัญชีนั้น โดยปกติ Cloud images จะใช้เฉพาะ SSH key และไม่ได้ตั้งรหัสผ่านไว้สำหรับผู้ใช้เริ่มต้น ซึ่ง Webmin ไม่สามารถเข้าสู่ระบบด้วยบัญชีที่ไม่มีรหัสผ่านได้ คุณต้องตั้งรหัสผ่านด้วย sudo passwd youruser ก่อน มิฉะนั้นการเข้าสู่ระบบจะล้มเหลวไม่ว่าจะพิมพ์รหัสผ่านใดก็ตาม

อย่างที่สองคือคำเตือน: อย่าเปิด port 10000 ให้เข้าถึงได้จากอินเทอร์เน็ตโดยตรงโดยไม่มีมาตรการป้องกัน คุณต้องตัดสินใจตั้งแต่ตอนนี้ว่าจะเข้าถึง Webmin ผ่าน SSH tunnel (แนะนำวิธีนี้เพราะไม่มีการเปิดช่องโหว่) หรือจะจำกัดการเข้าถึงเฉพาะ IP ของคุณเท่านั้น การตัดสินใจนี้จะมีผลต่อขั้นตอนทั้งหมดหลังจากนี้ ดังนั้นโปรดอ่านทั้งสองทางเลือกก่อนเริ่มตั้งค่า firewall

ติดตั้ง Webmin จาก repository อย่างเป็นทางการ

Webmin มีการเผยแพร่ apt repository ที่มีการลงลายเซ็นดิจิทัล สคริปต์การติดตั้งจะเพิ่ม repository และ GPG signing key เพื่อให้การรัน apt upgrade ในอนาคตสามารถดึง Webmin ได้เหมือนกับ package อื่นๆ และคุณจะได้รับการอัปเดตที่มีการตรวจสอบสิทธิ์ แทนที่จะเป็นการดาวน์โหลด .deb ที่ไม่สามารถอัปเดตตัวเองได้

curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.sh

สคริปต์จะแสดงสิ่งที่กำลังจะดำเนินการและถาม Setup repository? (y/N) — ให้ตอบ y เมื่อเสร็จสิ้นแล้ว ให้ติดตั้ง package ต่อไปนี้ flag --install-recommends จะทำการดึง dependencies ของ Perl และ SSL ที่จำเป็น เพื่อป้องกันไม่ให้ module ต่างๆ เกิดข้อผิดพลาด missing-library ในภายหลัง

sudo apt-get install --install-recommends webmin

Webmin เคยเปลี่ยนชื่อสคริปต์นี้มาก่อน ซึ่งคู่มือรุ่นเก่าจะอ้างถึง setup-repos.sh ดังนั้นหาก URL เดิมส่งคืนค่า 404 ให้คัดลอกคำสั่งแบบ one-liner ล่าสุดจาก webmin.com/download แทนการระบุชื่อไฟล์ การติดตั้งที่ถูกต้องจะสิ้นสุดด้วยบรรทัดลักษณะ Webmin install complete. You can now login to https://your-host:10000/ as root บริการจะถูกเปิดใช้งานและกำลังทำงานอยู่ โดยมีไฟล์ config อยู่ที่ /etc/webmin บันทึกการร้องขอ (requests) จะถูกเก็บไว้ที่ /var/webmin/miniserv.log และบันทึกการเข้าสู่ระบบที่ล้มเหลวจะถูกส่งไปยัง syslog — สำหรับ Ubuntu 24.04 จะถูกส่งไปยัง systemd journal

ตรวจสอบให้แน่ใจว่าบริการทำงานและกำลังรอรับการเชื่อมต่อ (listening) ก่อนเปิดเว็บเบราว์เซอร์:

sudo systemctl status webmin --no-pager
sudo ss -tlnp | grep 10000

คุณต้องเห็นสถานะเป็น active (running) และมีบรรทัดที่แสดงว่า miniserv.pl ผูกอยู่กับ 0.0.0.0:10000 — ที่อยู่ดังกล่าวจะเปลี่ยนเป็น 127.0.0.1:10000 เมื่อคุณใช้งานผ่าน tunnel ตามวิธีด้านล่าง หาก ss ไม่แสดงข้อมูลใดๆ บนพอร์ต 10000 แสดงว่า Webmin ไม่ได้เริ่มทำงาน ให้ตรวจสอบ journalctl -u webmin -n 50 ก่อนดำเนินการต่อ

การเข้าสู่ระบบครั้งแรก และการแจ้งเตือนเรื่องใบรับรอง

เปิดเบราว์เซอร์ไปที่ https://YOUR_SERVER_IP:10000 เมื่อเริ่มใช้งานระบบใหม่จะเกิดเหตุการณ์ 2 อย่างดังนี้

หาก ufw ทำงานอยู่ — โดยปกติ Ubuntu จะไม่ได้เปิดใช้งานไว้ แต่ผู้ให้บริการหลายรายอาจเปิดใช้งานไว้ล่วงหน้า — หน้าเว็บจะไม่โหลดเลย ซึ่งมีรายละเอียดในส่วนของข้อผิดพลาดด้านล่าง หากพอร์ตเปิดอยู่ เบราว์เซอร์จะแสดงหน้าแจ้งเตือนการบล็อก: "Your connection is not private" พร้อมรหัส NET::ERR_CERT_AUTHORITY_INVALID ใน Chrome หรือ SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" ใน Firefox สิ่งนี้เป็นเรื่องปกติและไม่ใช่การถูกบุกรุก Webmin ได้สร้าง self-signed certificate ขึ้นในขณะติดตั้ง (/etc/webmin/miniserv.pem) และเนื่องจากไม่มี certificate authority รับรอง เบราว์เซอร์จึงไม่เชื่อถือใบรับรองนี้โดยอัตโนมัติ การเชื่อมต่อยังคงมีการเข้ารหัสอยู่ เพียงแต่ไม่มีการรับรองความถูกต้อง ให้คลิกผ่านไปก่อน (เลือก Advanced แล้วเลือก Proceed) เนื่องจากเราจะทำการเปลี่ยนใบรับรองนี้ให้ถูกต้องในขั้นตอนถัดไป

เข้าสู่ระบบด้วย root หรือ sudo user พร้อมรหัสผ่าน Unix เพื่อเข้าสู่หน้าแดชบอร์ด System Information ข้อผิดพลาดที่พบบ่อยคือการพิมพ์ http:// แทนที่จะเป็น https:// โดย miniserv จะตอบกลับผ่าน HTTP บนพอร์ตดังกล่าวด้วยข้อความ "This web server is running in SSL mode. Try the URL https://..." วิธีแก้ไขคือการเปลี่ยน http เป็น https ในแถบที่อยู่ (address bar)

การตัดสินใจด้านความปลอดภัย: คุณจะเข้าถึง Webmin ด้วยวิธีใด?

ส่วนที่สำคัญที่สุดคือส่วนนี้ แผงควบคุมที่มีสิทธิ์เทียบเท่า root ไม่ควรเปิดเผยต่ออินเทอร์เน็ตสาธารณะเพื่อรับการพยายามเข้าสู่ระบบจากเครื่องสแกนทั่วโลก คุณมี 2 ทางเลือกที่ปลอดภัย โดยเรียงลำดับตามความเหมาะสม

การใช้ SSH tunnel ใน Option B เป็นวิธีที่ดีกว่า เพราะไม่มีการเปิดเผยข้อมูลใดๆ เลย ส่วนการใช้ IP allowlist ใน Option A นั้นยอมรับได้หากคุณใช้ IP แบบ static การไม่เลือกใช้ทั้งสองวิธีคือข้อผิดพลาดที่คู่มือนี้ต้องการป้องกัน หากคุณต้องการเข้าถึง Webmin ผ่านเครือข่ายส่วนตัวมากกว่าวิธีข้างต้น ให้ติดตั้งเครื่องไว้หลัง self-hosted WireGuard VPN และกำหนดค่า Webmin ให้ผูกกับ tunnel address แทนการใช้ public address

Option A: จำกัดการเข้าถึง Webmin เฉพาะ IP ของคุณ

ในหน้าควบคุม ให้เปิด Webmin จากนั้นไปที่ Webmin Configuration แล้วเลือก IP Access Control เลือกตัวเลือก "Only allow from listed addresses" และระบุ Public IP ของคุณ ซึ่งสามารถตรวจสอบได้โดยการรันคำสั่ง curl ifconfig.me บน laptop ของคุณ จากนั้นกด Save ระบบ Webmin จะเขียนค่านี้ลงในบรรทัด allow= ในไฟล์ /etc/webmin/miniserv.conf และทำการ restart บริการใหม่

ข้อควรระวัง: หาก IP ของบ้านคุณเป็นแบบ dynamic และมีการเปลี่ยนแปลง หรือคุณพิมพ์ที่อยู่ผิด คุณจะถูกล็อกไม่ให้เข้าใช้งาน ระบบจะแสดงข้อความ "Access denied for <your IP>" และไม่ปรากฏหน้าฟอร์ม Login ซึ่งทำให้ไม่สามารถเข้าใช้งานผ่านทางเว็บได้ คุณสามารถแก้ไขปัญหานี้ได้ผ่านทาง server console ด้วย SSH หรือ VNC ของผู้ให้บริการ:

sudo nano /etc/webmin/miniserv.conf
# find the line that begins  allow=
# correct your IP, or delete the whole line to allow all again
sudo systemctl restart webmin

การลบบรรทัด allow= ออก จะเป็นการคืนค่าให้สามารถเข้าถึงได้อย่างอิสระ ดังนั้นควรใช้เฉพาะในกรณีที่ต้องการกู้คืนระบบเท่านั้น และเมื่อเข้าได้แล้ว ให้รีบตั้งค่าที่ถูกต้องทันที

การไม่เปิดรับการเชื่อมต่อจาก public interface เป็นวิธีที่ดีกว่าการทำ allowlist ให้ตั้งค่า miniserv ให้ bind เฉพาะกับ loopback แล้วเข้าถึงผ่าน SSH tunnel ที่มีการเข้ารหัสซึ่งคุณเชื่อถืออยู่แล้ว

แก้ไขไฟล์ /etc/webmin/miniserv.conf โดยเพิ่มหรือเปลี่ยนบรรทัดนี้:

bind=127.0.0.1

Restart ด้วยคำสั่ง sudo systemctl restart webmin ขณะนี้ Webmin จะไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต การทำ port scan ที่พอร์ต 10000 จะไม่พบข้อมูลใดๆ และการตรวจสอบด้วย ss ก่อนหน้านี้จะแสดงว่า service ถูก bind ไว้ที่ 127.0.0.1:10000 จากเครื่อง laptop ของคุณ ให้เปิด tunnel ดังนี้:

ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IP

เปิด session นี้ค้างไว้แล้วเข้าใช้งานผ่าน https://localhost:10000 ข้อมูลจะถูกส่งผ่าน SSH ซึ่งมีการยืนยันตัวตนด้วย key และมีการเข้ารหัสไว้แล้ว คุณจึงสามารถยอมรับ self-signed certificate ได้อย่างปลอดภัย เนื่องจากชั้นของ SSH เป็นผู้ป้องกันหลัก เมื่อปิด SSH session แล้ว Webmin จะไม่สามารถเข้าถึงได้อีกต่อไป ไม่ต้องทำ allowlist ไม่ต้องเปิดเผยพอร์ต และไม่ต้องเพิ่มขั้นตอนการทำ hardening ให้กับ service อื่นๆ

หากคุณตั้งค่า bind=127.0.0.1 และลืมเปิด tunnel การเข้าถึงจากระยะไกลจะหยุดลงทันที ซึ่งถือเป็นฟีเจอร์ที่ทำงานตามปกติไม่ใช่ข้อผิดพลาด หากต้องการกู้คืนให้ทำเช่นเดียวกับ Option A คือเข้าผ่าน console เพื่อลบบรรทัด bind หรือตั้งค่า bind=0.0.0.0 แล้วทำการ restart วิธีนี้เป็นรูปแบบการใช้งาน tunnelling เช่นเดียวกับที่คุณใช้เพื่อเข้าถึง a remote development box running Claude Code in tmux โดยใช้เพียง SSH session เดียว ทุกอย่างจะมีความเป็นส่วนตัว และไม่มี service อื่นเปิดรอรับการเชื่อมต่อบน public interface

การเปลี่ยนใบรับรอง self-signed เป็นใบรับรองจริง

หากคุณเปิดใช้งาน Webmin ผ่าน hostname ตาม Option A คุณสามารถกำจัดคำเตือนจาก browser ได้โดยใช้ใบรับรอง Let's Encrypt ของจริง คุณต้องมี DNS name เช่น panel.example.com ที่มี A record ชี้มายัง server และต้องมีระบบที่ตอบสนองต่อ port-80 HTTP challenge ในระหว่างการตรวจสอบ (validation)

Webmin มีฟังก์ชันนี้ติดตั้งมาให้แล้ว: ไปที่ Webmin, จากนั้น Webmin Configuration, จากนั้น SSL Encryption, และเลือกแท็บ Let's Encrypt ให้ระบุ hostname และกำหนด "website root directory" ไปยัง path ที่ให้บริการผ่าน port 80 สำหรับโดเมนนั้น แล้วกด request จากนั้น Webmin จะดำเนินการขอใบรับรอง อัปเดตบรรทัด certfile= และ keyfile= ใน miniserv.conf ให้โดยอัตโนมัติ และจะทำการต่ออายุใบรับรองให้ก่อนหมดอายุ เมื่อรีโหลดหน้าเว็บ สัญลักษณ์รูปกุญแจจะแสดงสถานะปกติ

ข้อจำกัดเพียงอย่างเดียวคือ: server ของ Webmin ทำงานบน port 10000 ไม่ใช่ port 80 ดังนั้นการทำ http-01 challenge จึงจำเป็นต้องมี web server จริง เช่น Apache หรือ nginx ที่คอยตอบสนองต่อ panel.example.com บน port 80 หรือต้องใช้การตรวจสอบผ่าน DNS แทน สำหรับเครื่องที่ติดตั้งเฉพาะ Webmin และไม่มีบริการใดบน port 80 การขอใบรับรองจะล้มเหลวด้วย validation error จนกว่าคุณจะทำให้ Let's Encrypt สามารถเข้าถึง challenge file ได้ กลไกการทำงาน ทั้ง DNS records, port-80 challenge และการต่ออายุใบรับรอง มีหลักการเดียวกับการออกใบรับรองสำหรับเว็บไซต์ทั่วไป หากต้องการศึกษาข้อมูลเพิ่มเติม คู่มือการใช้ Let's Encrypt TLS certificates ด้วย Certbot และ nginx จะอธิบายขั้นตอนการตรวจสอบและขั้นตอนการตั้งค่า DNS อย่างละเอียด หากคุณใช้วิธี SSH-tunnel คุณสามารถข้ามส่วนนี้ไปได้เลย เนื่องจากใบรับรอง self-signed สามารถใช้งานได้ตามปกติเมื่อใช้งานผ่าน SSH และใบรับรองจริงที่ออกให้สำหรับ panel.example.com จะแสดงคำเตือนเรื่อง name-mismatch เฉพาะเมื่อคุณเข้าใช้งานผ่าน https://localhost:10000 เท่านั้น

เปิดใช้งานการยืนยันตัวตนแบบสองปัจจัย

การใช้เพียงรหัสผ่านไม่เพียงพอต่อการป้องกัน root panel ดังนั้นควรเพิ่มปัจจัยที่สอง ให้ไปที่ Webmin, จากนั้น Webmin Configuration, จากนั้น Two-Factor Authentication เลือกผู้ให้บริการแบบ Google Authenticator ซึ่งเป็นมาตรฐาน TOTP จึงสามารถใช้งานร่วมกับ Authy, 1Password หรือแอป authenticator อื่นๆ ได้ แล้วกดบันทึก Webmin จะติดตั้ง Perl module ขนาดเล็กที่จำเป็น (Authen::OATH และตัวสร้าง QR code) และเปิดใช้งานฟีเจอร์นี้ ขั้นตอนนี้เพียงอย่างเดียวจะยังไม่ช่วยป้องกันบัญชีใดๆ

จากนั้นแต่ละบัญชีจะต้องลงทะเบียนอุปกรณ์ของตนเอง เมื่อเปิดใช้งาน 2FA แล้ว ให้ไปที่ Webmin, จากนั้น Webmin Users เลือกบัญชีที่ต้องการ แล้วเลือก Enable Two-Factor For User ระบบ Webmin จะแสดง QR code ให้ใช้แอปสแกน QR code นั้น และกรอกรหัสที่สร้างขึ้นหนึ่งรหัสเพื่อยืนยัน หลังจากนั้น การเข้าสู่ระบบจะถามหารหัส token 6 หลักหลังจากกรอกรหัสผ่าน ควรทำการลงทะเบียนให้เรียบร้อยก่อนออกจากระบบ หากเปิดใช้งาน 2FA ไว้แต่บัญชีของคุณยังไม่ได้สแกนรหัส คุณยังสามารถยกเลิกข้อกำหนดนี้ผ่านทาง console ได้ แต่การลงทะเบียนให้เสร็จสิ้นก่อนจะสะดวกกว่ามาก

เพิ่ม Fail2ban เพื่อป้องกันการโจมตีแบบ brute-force logins

แม้จะเป็น endpoint สำหรับการ login ที่มีการจำกัดสิทธิ์ แต่ควรมีการลงโทษเมื่อมีการพยายามเข้าสู่ระบบผิดพลาดซ้ำๆ Webmin จะรายงานการ login ที่ล้มเหลวไปยัง syslog ในรูปแบบ webmin[12345]: Invalid login as root from 10.0.0.9 หรือ Non-existent login as ... สำหรับ username ที่ไม่มีบัญชีใน Unix หากเป็น Ubuntu 24.04 บรรทัดเหล่านี้จะถูกบันทึกไว้ใน systemd journal เนื่องจาก image มาตรฐานไม่มี /var/log/auth.log ทั้งนี้ Fail2ban มี filter webmin-auth มาตรฐานที่รองรับบรรทัดทั้งสองรูปแบบนี้ และ jail ด้านล่างนี้จะตั้งค่า backend = systemd ด้วยตนเอง จึงไม่จำเป็นต้องใช้ custom regex หรือระบุ log path เอง

สร้าง /etc/fail2ban/jail.d/webmin.local:

[webmin-auth]
enabled  = true
port     = 10000
filter   = webmin-auth
backend  = systemd
maxretry = 4
bantime  = 1h

Reload ด้วย sudo systemctl restart fail2ban จากนั้นตรวจสอบว่า jail ทำงานแล้ว:

sudo fail2ban-client status webmin-auth

คุณจะเห็นรายชื่อ jail โดยมีจำนวนการ ban เริ่มต้นที่ศูนย์ (หากใช้ journal backend จะไม่มีบรรทัด File list:) เพื่อทดสอบการทำงานทั้งหมด ให้ลอง login ผิดพลาดด้วยตนเองจาก network อื่นหลายๆ ครั้ง จากนั้นรันคำสั่ง status อีกครั้งเพื่อดูค่า Currently banned ที่เพิ่มขึ้น หากค่าไม่เพิ่มขึ้น ให้ตรวจสอบว่า IP ที่ใช้ทดสอบไม่ได้อยู่ใน ignoreip ของ Fail2ban และให้รัน journalctl SYSLOG_IDENTIFIER=webmin บน server เพื่อยืนยันว่ามีการเขียนบรรทัด Invalid login จริง หากยังไม่ได้ติดตั้ง Fail2ban บนเครื่องนี้ สามารถดูวิธีติดตั้งและ jail สำหรับ SSH ที่ควรใช้งานควบคู่กันได้ใน คู่มือ Fail2ban on Ubuntu 24.04 for SSH

จำกัดสิทธิ์การเข้าถึงของผู้ใช้งาน Webmin แต่ละคน

ผู้ใช้งานไม่จำเป็นต้องมีสิทธิ์ root ในทุกส่วนของระบบ ให้ไปที่ Webmin จากนั้นเลือก Webmin Users เพื่อสร้างบัญชีผู้ใช้งานใหม่ และกำหนดสิทธิ์ให้เข้าถึงได้เฉพาะโมดูลที่จำเป็นเท่านั้น ตัวอย่างเช่น กำหนดให้เจ้าหน้าที่สำรองข้อมูลเข้าถึงได้เฉพาะโมดูล cron และ filesystem การแก้ไขข้อมูลผู้ใช้งานจะแสดงรายการโมดูลทั้งหมดในรูปแบบ checklist หากยกเลิกการเลือกโมดูลใด โมดูลนั้นจะถูกนำออกจากเมนูของผู้ใช้งานและระบบจะบล็อก URL ที่เกี่ยวข้อง วิธีนี้เป็นการป้องกันแบบ Defence in depth ซึ่งช่วยป้องกันความเสียหายได้ แม้เซสชัน Webmin ที่มีสิทธิ์ต่ำจะถูกขโมยไป แต่จะไม่สามารถแก้ไข /etc/shadow ได้หากโมดูล Users ไม่ได้อยู่ในรายการสิทธิ์ของผู้ใช้งานคนนั้น

การรักษา Webmin ให้เป็นเวอร์ชันล่าสุด

เนื่องจากคุณติดตั้งผ่าน apt repository ทำให้ sudo apt update && sudo apt upgrade ดึง Webmin เวอร์ชันใหม่มาพร้อมกับส่วนประกอบอื่นของระบบ โปรดติดตั้ง patch ทันที เนื่องจาก control panel เป็นเป้าหมายหลักในการโจมตี Webmin สามารถอัปเดตด้วยตนเองผ่านทาง Webmin, จากนั้นเลือก Webmin Configuration, แล้วเลือก Upgrade Webmin อย่างไรก็ตาม การใช้ apt บน Ubuntu มีความเหมาะสมกว่า เพราะช่วยให้เวอร์ชันของซอฟต์แวร์สอดคล้องกับระบบจัดการแพ็กเกจอื่น ๆ การอัปเดตนี้ไม่ใช่ทางเลือก แต่เป็นสิ่งที่จำเป็น เนื่องจาก CVE ของ Webmin ในอดีตหลายรายการเป็นช่องโหว่แบบ remote-code-execution ซึ่งความแตกต่างระหว่างระบบที่ "ได้รับการแก้ไขแล้ว" กับระบบที่ "ถูกเจาะ" ขึ้นอยู่กับความเร็วในการอัปเดตของผู้ดูแลระบบ

Failure modes, with the strings you will see

"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. แสดงขึ้นเมื่อโหลดหน้าเว็บครั้งแรก สาเหตุเกิดจาก self-signed certificate ที่ Webmin สร้างขึ้นขณะติดตั้งไม่มี trusted issuer การแจ้งเตือนนี้ไม่ใช่การโจมตี ช่องทางการสื่อสารมีการเข้ารหัสแล้ว เพียงแต่ไม่ได้รับการรับรองความถูกต้อง วิธีแก้ไข: ให้กดข้ามคำเตือนไปก่อน จากนั้นจึงติดตั้ง Let's Encrypt certificate ของจริง หรือยอมรับการเชื่อมต่อหากคุณเข้าถึง Webmin ผ่าน SSH tunnel

"This web server is running in SSL mode. Try the URL https://..." คุณพิมพ์ http://server:10000 เนื่องจาก miniserv รองรับเฉพาะ TLS บนพอร์ตดังกล่าวและแจ้งให้ทราบผ่านข้อความ plain text วิธีแก้ไข: เปลี่ยน http เป็น https ใน address bar

Page times out — ERR_CONNECTION_TIMED_OUT / "This site can't be reached". คำขอส่งไปไม่ถึง Webmin สำหรับ Ubuntu สาเหตุเกือบทั้งหมดเกิดจาก ufw ทำการ drop port 10000 ตรวจสอบได้ด้วย sudo ufw status หากไม่พบ port 10000 ในรายการ ให้เปิดพอร์ตด้วย sudo ufw allow 10000/tcp หรือวิธีที่ดีกว่าคือปล่อยให้ปิดไว้แล้วใช้ SSH tunnel จาก Option B ข้อควรระวัง: timeout หมายถึง firewall ทำการ drop packet โดยไม่ตอบสนอง ในขณะที่ ERR_CONNECTION_REFUSED หมายถึงพอร์ตสามารถเข้าถึงได้แต่ Webmin ไม่ได้ทำงานอยู่ ให้ตรวจสอบที่ sudo systemctl status webmin

"Access denied for <your IP>." คุณตั้งค่า IP Access Control ไว้ใน Option A และ IP ปัจจุบันของคุณไม่ได้อยู่ในรายการที่อนุญาต เช่น IP เปลี่ยนแปลงเนื่องจากเป็น dynamic IP หรือพิมพ์ผิด คุณไม่สามารถแก้ไขผ่าน browser ได้ วิธีแก้ไขจาก console: แก้ไขบรรทัด allow= ใน /etc/webmin/miniserv.conf โดยการแก้ไขให้ถูกต้องหรือลบออก แล้วรันคำสั่ง sudo systemctl restart webmin

"Login failed. Please try again." ทั้งที่ใช้ข้อมูลประจำตัวที่ถูกต้อง บัญชีผู้ใช้ไม่มี Unix password ซึ่งเป็นค่ามาตรฐานใน cloud images ที่ใช้เฉพาะ key-only เนื่องจาก Webmin ตรวจสอบสิทธิ์ผ่าน PAM โดยอ้างอิงจาก Unix password และผู้ใช้รายนั้นไม่มีรหัสผ่านดังกล่าว วิธีแก้ไข: รันคำสั่ง sudo passwd youruser บน server แล้วจึงเข้าสู่ระบบ หาก /var/webmin/miniserv.log แสดงผลเป็น Non-existent login as ... แสดงว่าคุณพิมพ์ชื่อผู้ใช้ที่ไม่ใช่ Unix account

สำหรับการดูแลเซิร์ฟเวอร์จำนวนมาก การใช้ automation จะมีประสิทธิภาพมากกว่าการใช้ control panel บนทุกเครื่อง: เริ่มต้นได้ที่ your first Ansible playbook

FAQ

การเปิด Webmin ให้เข้าถึงได้ผ่านอินเทอร์เน็ตสาธารณะมีความปลอดภัยหรือไม่?

การเปิด Webmin ให้เข้าถึงผ่านอินเทอร์เน็ตเปรียบเสมือนการเปิด root shell ที่มีหน้าล็อกอิน เนื่องจาก Webmin มีความสามารถดังกล่าว การใช้งานจะมีความปลอดภัยเพียงพอต่อเมื่อมีการป้องกันหลายชั้น ได้แก่ การใช้ certificate ที่ถูกต้อง, การยืนยันตัวตนแบบ two-factor authentication, การใช้ Fail2ban และการจำกัดด้วย IP allowlist หรือวิธีที่ดีที่สุดคือไม่เปิดให้เข้าถึงผ่านสาธารณะเลย วิธีที่เสี่ยงน้อยที่สุดคือการผูก Webmin ไว้กับ 127.0.0.1 และเข้าใช้งานผ่าน SSH tunnel เพื่อไม่ให้ port 10000 ตอบสนองต่อการเชื่อมต่อจากอินเทอร์เน็ตสาธารณะ

วิธีแก้ไขคำเตือนเรื่อง Webmin certificate ทำอย่างไร?

คำเตือน (NET::ERR_CERT_AUTHORITY_INVALID) เกิดจาก Webmin ใช้ self-signed certificate ที่ติดตั้งมาพร้อมกับระบบ คุณสามารถขอ certificate จริงได้โดยไปที่ Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt โดยใช้ DNS name ที่ชี้ไปยังเซิร์ฟเวอร์ และต้องมีบริการที่รองรับการตรวจสอบผ่าน port-80 หากคุณเข้าใช้งาน Webmin ผ่าน SSH tunnel ไปยัง localhost เท่านั้น คำเตือนนี้จะไม่มีอันตราย เนื่องจาก SSH ทำการเข้ารหัสและยืนยันตัวตนการเชื่อมต่ออยู่แล้ว คุณสามารถยอมรับ self-signed certificate ได้อย่างปลอดภัย

วิธีจำกัดให้ Webmin เข้าถึงได้เฉพาะ IP ของฉันเท่านั้นทำอย่างไร?

ไปที่ Webmin, Webmin Configuration, IP Access Control เลือก "Only allow from listed addresses" และระบุ public IP ของคุณจาก curl ifconfig.me โดย Webmin จะเก็บข้อมูลนี้ไว้ในบรรทัด allow= ของ /etc/webmin/miniserv.conf โปรดระวังกรณีใช้ IP บ้านแบบ dynamic หาก IP เปลี่ยนแปลง คุณจะถูกล็อกไม่ให้เข้าใช้งาน และต้องแก้ไขบรรทัด allow= ผ่านทาง server console ดังนั้นการใช้ static address หรือวิธี SSH-tunnel จึงมีความน่าเชื่อถือมากกว่าในทางปฏิบัติ

ทำไมการล็อกอินจึงล้มเหลวแม้จะใช้รหัสผ่านที่ถูกต้องแล้ว?

Webmin ใช้ PAM ในการตรวจสอบสิทธิ์เทียบกับรหัสผ่าน Unix ของคุณ โดยปกติแล้ว cloud images มักจะใช้เฉพาะ SSH key และไม่ได้ตั้งรหัสผ่านไว้สำหรับ account เริ่มต้น ทำให้ PAM ไม่มีข้อมูลสำหรับตรวจสอบและปฏิเสธการล็อกอิน ให้รันคำสั่ง sudo passwd youruser บนเซิร์ฟเวอร์เพื่อตั้งรหัสผ่านแล้วจึงล็อกอินใหม่ หากพบบรรทัด Non-existent login as ... ใน /var/webmin/miniserv.log แสดงว่าชื่อผู้ใช้ดังกล่าวไม่ใช่ Unix account จริง

Webmin มีข้อดีอย่างไรเมื่อเทียบกับการใช้ SSH ปกติ?

Webmin คือชั้นการทำงานที่ช่วยให้ค้นหาคำสั่งและจัดการระบบได้สะดวกขึ้น Webmin มีประโยชน์อย่างมากในการเรียกดู log files, การจัดการผู้ใช้และ cron, การแก้ไขกฎ firewall รวมถึงการตรวจสอบสถานะของ disk และ service โดยไม่ต้องจดจำทุกคำสั่ง ซึ่งเหมาะสำหรับผู้ดูแลระบบที่ใช้งานเป็นครั้งคราวหรือทีมที่มีทักษะหลากหลาย ส่วนการใช้ SSH ปกติจะทำงานได้เร็วกว่า สามารถเขียนสคริปต์ได้ และมีช่องโหว่ให้โจมตี (attack surface) น้อยกว่าสำหรับการทำงานทั่วไป ผู้ดูแลระบบจำนวนมากจึงใช้งานทั้งสองอย่าง โดยใช้ SSH สำหรับงานประจำวัน และใช้ Webmin ที่ผูกไว้กับ localhost ผ่าน tunnel สำหรับงานที่ต้องการการคลิกผ่านหน้าจอเป็นครั้งคราว

#webmin#ubuntu#control-panel#server-management#security#self-hosting