วิธีอัตโนมัติ: สคริปต์เดียวจากบัญชีผู้ใช้จะเตรียมเซิร์ฟเวอร์ทั้งหมดให้พร้อม (เว็บสแตก Apache + PHP, ฐานข้อมูล, เครื่องมือความปลอดภัย, cron) จากนั้น — ติดตั้งแดชบอร์ด, ออก SSL และกรอกใบอนุญาต ใช้งานได้บน Ubuntu/Debian: บน VPS ใหม่จะตั้งค่าทุกอย่างตั้งแต่ต้น, บนเซิร์ฟเวอร์ที่ตั้งค่าไว้แล้ว — เพิ่มเติมเท่านั้น (โปรไฟล์ “เซิร์ฟเวอร์ที่ตั้งค่าแล้ว”, ขั้นตอน 01) คำสั่งทั้งหมดด้านล่างเรียงตามลำดับ เพียงเลื่อนจากบนลงล่าง บน VPS ใหม่ทุกขั้นตอนใช้ได้ตามลำดับ หากเซิร์ฟเวอร์ตั้งค่าไว้แล้วหรือมีแผงควบคุมโฮสติ้งอยู่ สคริปต์จะตั้งใจปล่อยงานบางส่วนไว้ให้คุณทำเอง — ส่วนใดบ้างนั้นสคริปต์จะแจ้งไว้ตอนจบการทำงาน (การอ่านผลลัพธ์อยู่ในขั้นตอน 01)
monitor.example.com — โดเมนของคุณ; 203.0.113.10 — IP จริงของเซิร์ฟเวอร์; /var/www/monitor — รากของแดชบอร์ด (ที่เก็บ public/, assets/, config.php); รหัสผ่านฐานข้อมูลให้ตั้งเอง
jail.local), root-crontab, กฎ UFW, คอนฟิก Apache หากเซิร์ฟเวอร์ ตั้งค่าไว้แล้ว (แดชบอร์ดที่ใช้งานอยู่, เว็บไซต์, อีเมล, jail ของคุณเอง) — ให้เลือกโปรไฟล์ “เซิร์ฟเวอร์ที่ตั้งค่าแล้ว”: มันจะเปลี่ยนแปลงแบบเพิ่มเติมเท่านั้นและไม่แตะไฟร์วอลล์, Fail2ban, อีเมล, SSH และ sysctl ของคุณ เมื่อพบแผงควบคุมโฮสติ้ง สคริปต์จะสลับไปโหมดนี้เอง ก่อนรันครั้งแรกสามารถเปิด การรันแบบทดลอง (ติ๊กในบัญชีผู้ใช้) — มันจะแสดงสิ่งที่จะทำโดยไม่เปลี่ยนแปลงอะไร บนเซิร์ฟเวอร์ที่ใช้งานอยู่ควรทำสแนปช็อต (snapshot) ไว้เผื่อไว้
my.arciveo.com → หัวข้อ “ตั้งค่าเซิร์ฟเวอร์” (ใช้งานได้หลังสมัคร Arcivéo Security Monitor) คำสั่งนี้ผูกกับบัญชีของคุณและมีโทเคนส่วนตัว
สคริปต์จะเตรียมเซิร์ฟเวอร์ทั้งหมด: เว็บสแตก (Apache + PHP), ฐานข้อมูล, เครื่องมือสำหรับ SSL, ชุดเครื่องมือป้องกันครบชุด และงาน cron (Lynis, SMART, debsums, Logwatch, รายงานประจำวัน, อัปเดต ipsum)
1) เลือกระดับการป้องกัน (ในบัญชีผู้ใช้ ก่อนคัดลอกคำสั่ง):
2) รันบนเซิร์ฟเวอร์ในสิทธิ์ root ด้วยคำสั่งจากบัญชีผู้ใช้ — มีลักษณะดังนี้:
3) อ่านผลลัพธ์ตอนจบ — ตรงนั้นบอกว่ามีอะไรเหลือให้คุณทำเอง สคริปต์จบการทำงานด้วยบล็อกการตรวจสอบและรายการ “ขั้นถัดไป — ติดตั้งแดชบอร์ด” บางขั้นตอนสคริปต์ตั้งใจไม่ทำให้: ส่วนใดบ้างขึ้นอยู่กับโปรไฟล์ที่เลือกและสิ่งที่พบบนเซิร์ฟเวอร์ ให้เทียบกับรายการด้านล่าง — ทำเฉพาะข้อที่บรรทัดของมันปรากฏในผลลัพธ์ของคุณเท่านั้น
Control panel detected (…) — เว็บไซต์ถูกสร้างด้วยเครื่องมือของแผงควบคุมโฮสติ้งเอง สคริปต์จึงไม่สร้าง vhost ให้ ดูขั้นตอน 03 กรณี “เซิร์ฟเวอร์ที่มีแผงควบคุมโฮสติ้ง”No vhost created (no domain given) — โปรไฟล์ “เซิร์ฟเวอร์ที่ตั้งค่าแล้ว” โดยไม่ระบุโดเมน: vhost ที่ไม่มีชื่อจะกลายเป็นเว็บไซต์ค่าเริ่มต้นและดักเว็บไซต์อื่นของคุณเอง จึงไม่ถูกสร้างขึ้น ดูขั้นตอน 03 กรณี “สร้าง vhost ด้วยตนเอง”sudo rules NOT written — สคริปต์ระบุไม่ได้ว่าแผงควบคุมทำงานภายใต้บัญชีใด นี่เป็นสถานการณ์ปกติ: ไฟล์ของแผงควบคุมถูกอัปโหลดหลังการตั้งค่าอัตโนมัติ จึงยังไม่มีอะไรให้ตรวจสอบในตอนนั้น หากไม่มีกฎเหล่านี้ โมดูลจะมองไม่เห็นข้อมูลระบบ ดูขั้นตอน 04 บล็อก “sudo สำหรับเว็บเซิร์ฟเวอร์”! Nginx does not read .htaccess — มี Nginx อยู่หน้า Apache และเขียนกฎห้ามลงในคอนฟิกของมันโดยอัตโนมัติไม่สำเร็จ ต้องทำเองให้เรียบร้อย: มิฉะนั้น data/, keys/, database/ และ config.php จะถูกเปิดออกสู่ภายนอกโดยข้าม .htaccess ดูขั้นตอน 03 บล็อก “หากมี Nginx อยู่หน้า Apache”UFW installed but inactive — ไฟร์วอลล์ติดตั้งแล้วแต่ปิดอยู่: บนเซิร์ฟเวอร์ที่ตั้งค่าแล้ว สคริปต์จะไม่เปิดให้เอง เพื่อไม่ให้ตัดการเข้าถึงของคุณ ให้เปิดเอง โดยต้องอนุญาตพอร์ต SSH ของคุณด้วยเสมอ:
Fail2ban installed but not running — ให้เริ่มทำงาน: sudo systemctl enable --now fail2banDatabase server present … but not running — เริ่มระบบฐานข้อมูลก่อนขั้นตอน 04: sudo systemctl enable --now mariadb (หรือ mysql แล้วแต่ว่าติดตั้งตัวใดไว้)Certbot skipped — issue SSL in … — ใบรับรองออกด้วยสวิตช์ Let's Encrypt ในแผงควบคุมโฮสติ้ง คุณจึงไม่ต้องทำขั้นตอน 06All checks passed ข้อที่มีเครื่องหมาย ! ต้องได้รับการดูแล รายละเอียดจะถูกเขียนลงบันทึก ซึ่งสคริปต์พิมพ์พาธไว้ตอนท้ายสุด (Log: …)
เพื่อเปิดแดชบอร์ดที่แอดเดรสอย่าง monitor.example.com และรับ SSL ฟรี โดเมนต้องชี้มาที่เซิร์ฟเวอร์ ในแดชบอร์ดจัดการ DNS (ที่ผู้รับจดทะเบียนหรือผู้ให้บริการโฮสต์) ให้สร้าง A-record:
หลังจากผ่านไปไม่กี่นาที (บางครั้งอาจถึงหนึ่งชั่วโมง) ให้ตรวจสอบว่าโดเมนชี้มาที่เซิร์ฟเวอร์แล้ว:
/var/www/monitor และตั้งค่าเว็บไซต์ Apache ไว้แล้ว (DocumentRoot ชี้ไปที่รากของแผงควบคุม, PHP-FPM, AllowOverride สำหรับ .htaccess) ในผลลัพธ์ของสคริปต์คือบรรทัด vhost … → DocumentRoot … ไม่ต้องสร้างไดเรกทอรีและ vhost แยกต่างหาก — เพียงอัปโหลดไฟล์และตั้งสิทธิ์
กรณี “เซิร์ฟเวอร์ที่มีแผงควบคุมโฮสติ้ง” (ในผลลัพธ์: Control panel detected (…)) เว็บไซต์บนเซิร์ฟเวอร์แบบนี้อยู่ในความดูแลของแผงควบคุม สคริปต์จึงตั้งใจไม่สร้าง vhost ของตัวเอง — เพราะจะถูกเขียนทับทันทีที่แผงควบคุมสร้างคอนฟิกใหม่ ลำดับการทำงานคือ:
public_html ของโดเมนนั้น: นอกจาก index.php, api/, assets/ แล้ว ต้องมี config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/ อยู่ด้วย ไม่ต้องย้ายอะไรออกไปเหนือเว็บรูท: โฟลเดอร์ระบบถูกปิดกั้นด้วยไฟล์ .htaccess จากชุดติดตั้ง ส่วนภายใต้ Nginx ใช้กฎห้ามที่สคริปต์เขียนไว้ในคอนฟิกของโดเมนconfig.php (ขั้นตอน 05) พาธในคำสั่งให้เปลี่ยนเป็น /home/บัญชี/web/โดเมน/public_html และเจ้าของไฟล์ให้เปลี่ยนเป็นผู้ใช้ของโดเมนนั้นแทน www-dataกรณี “สร้าง vhost ด้วยตนเอง” (ในผลลัพธ์: No vhost created (no domain given)) เกิดขึ้นเฉพาะกับโปรไฟล์ “เซิร์ฟเวอร์ที่ตั้งค่าแล้ว” เมื่อไม่ได้ส่งโดเมนเข้าไป วิธีที่ง่ายที่สุดคือรันคำสั่งจากบัญชีผู้ใช้อีกครั้งพร้อมระบุโดเมน:
การรันซ้ำปลอดภัย: สิ่งที่ทำไปแล้วจะไม่ถูกทำซ้ำ แต่หากต้องการสร้าง vhost ด้วยมือ — นี่คือคอนฟิกเดียวกันกับที่ตัวติดตั้งเขียนให้:
ServerName ตรงนี้จำเป็นต้องมี vhost ที่ไม่มีชื่อจะกลายเป็นเว็บไซต์ค่าเริ่มต้นของ Apache และเริ่มตอบแทนโดเมนอื่นบนเซิร์ฟเวอร์เดียวกัน ด้วยเหตุผลเดียวกัน อย่าปิด 000-default.conf บนเซิร์ฟเวอร์ที่ตั้งค่าแล้ว: เว็บไซต์นั้นอาจถูกดัดแปลงไปใช้งานจริงของใครบางคน — บน VPS ใหม่ตัวติดตั้งจะปิดให้เอง ตรงนี้ไม่ต้องทำ
! Nginx does not read .htaccess) Nginx ส่งไฟล์สแตติกจากดิสก์โดยตรงและไม่อ่าน .htaccess — โฟลเดอร์ระบบจึงเปิดออกสู่ภายนอก แม้ Apache จะปิดกั้นไว้อย่างถูกต้องก็ตาม สคริปต์ได้เตรียมไฟล์กฎห้ามไว้ล่วงหน้าแล้ว เพียงนำไปรวมในบล็อก server{} ของเว็บไซต์คุณ แล้วรีโหลด Nginx:
my.arciveo.com → “ดาวน์โหลด” แตกไฟล์บีบอัดก่อนอัปโหลดขึ้นเซิร์ฟเวอร์
อัปโหลดเนื้อหาของชุดติดตั้งไปที่ /var/www/monitor (เพื่อให้ภายในมี public/, assets/, config.php ฯลฯ) — ผ่าน SFTP/SCP (FileZilla / WinSCP) หรือใช้คำสั่ง scp จากคอมพิวเตอร์ของคุณ:
ServerName) ให้ส่งโดเมนเข้าไปในคำสั่งตั้งค่าอัตโนมัติตั้งแต่ขั้นตอน 01: … | sudo bash -s -- monitor.example.com (หรือระบุโดเมนในช่อง “โดเมนแผงควบคุม” ในบัญชีผู้ใช้) หากไม่ได้ส่งโดเมน — แผงควบคุมจะตอบสนองทุกโฮสต์และผ่าน IP ส่วน ServerName นั้น certbot จะกำหนดให้ตอนออก SSL (ขั้นตอน 06) ไม่ต้องติดตั้งใหม่แต่อย่างใด
root หรือผ่าน SFTP ไฟล์จะเป็นของ root และเว็บเซิร์ฟเวอร์ (www-data) จะอ่านไม่ได้ — แผงควบคุมจะเปิดขึ้นมาว่างเปล่าหรือแสดงข้อผิดพลาด 403 (ในบันทึก: .htaccess unreadable / directory not executable) คำสั่งด้านล่างแก้ปัญหานี้ได้:
เปิดสิทธิ์อัปโหลดไฟล์ผ่าน SFTP ให้ตัวเอง หลังคำสั่งด้านบน ไฟล์ทั้งหมดเป็นของ www-data ขณะที่ FileZilla / WinSCP เชื่อมต่อด้วยผู้ใช้ของคุณเอง การอัปโหลดจึงล้มเหลวด้วย SSH_FX_PERMISSION_DENIED (Permission denied) เลือกหนึ่งในสองทางเลือกต่อไปนี้
ทางเลือก A — ACL เฉพาะผู้ใช้ของคุณ (แนะนำ) สิทธิ์เขียนมีเฉพาะคุณคนเดียว เว็บเซิร์ฟเวอร์ยังคงเขียนทับโค้ดของแผงควบคุมไม่ได้:
ทางเลือก B — ผ่านกลุ่ม www-data ง่ายกว่า แต่เว็บเซิร์ฟเวอร์ก็ได้สิทธิ์เขียนไฟล์ของแผงควบคุมด้วย หากมีช่องโหว่ใน PHP โค้ดอาจถูกสับเปลี่ยนได้ ลำดับคำสั่งมีความสำคัญ — config.php และโฟลเดอร์ทำงานจะถูกปิดเป็นลำดับสุดท้าย:
id deploy — ในรายการกลุ่มต้องปรากฏ www-data; ls -ld /var/www/monitor — สิทธิ์ drwxrwsr-x โดยตัวอักษร s แทน x หมายความว่าตั้ง setgid แล้ว
สร้างฐานข้อมูลและผู้ใช้ จากนั้นนำเข้าสคีมา บล็อกที่มีฐานข้อมูลต้องวางลงในเทอร์มินัลทั้งหมด (sudo mysql เข้าเป็น root ผ่าน unix-socket ไม่ต้องใช้รหัสผ่าน root) monitor_db และ monitor_user เป็นชื่อตัวอย่าง จะตั้งชื่อของคุณเองก็ได้ จำชื่อฐานข้อมูล ผู้ใช้ และรหัสผ่านไว้ เพราะต้องกรอกลงใน config.php ในขั้นถัดไป:
admin ให้เองเมื่อเปิดในเบราว์เซอร์ครั้งแรก (จาก database/db.sql) หากฐานข้อมูลว่างเปล่า
หากตารางไม่ถูกสร้างขึ้น (แดชบอร์ดแสดงข้อผิดพลาดการเชื่อมต่อฐานข้อมูล หรือแสดงหน้าว่างแทนฟอร์มเข้าสู่ระบบ) — ให้นำเข้าสคีมาด้วยตนเอง คำสั่งนี้รันที่รากของแดชบอร์ด โดยใช้ค่าจากบล็อกด้านบน:
$DBNAME / $DBUSER / $DBPASS “หายไป” แล้ว (เปิดเซสชันเทอร์มินัลใหม่) — ให้ใส่ค่าลงในคำสั่งด้วยมือ หรือกำหนดใหม่ด้วยสามบรรทัดเดิมจากบล็อกด้านบน
sudo rules NOT written — แปลว่ายังไม่มีอะไรให้ระบุบัญชีของแผงควบคุมได้ (ไฟล์ยังไม่ถูกอัปโหลด) และกฎยังไม่ถูกสร้าง หากไม่มีกฎเหล่านี้ หัวข้ออย่างไฟร์วอลล์, Fail2ban และ CrowdSec จะว่างเปล่า ตอนนี้เมื่อไฟล์อยู่ครบแล้ว ให้รันคำสั่งจากบัญชีผู้ใช้อีกครั้งพร้อมระบุบัญชีอย่างชัดเจน:
www-data ให้เปลี่ยนเป็นผู้ใช้ที่ PHP ของเว็บไซต์คุณทำงานอยู่ (บนแผงควบคุมโฮสติ้งมักเป็นเจ้าของโดเมน) ดูได้ดังนี้:
/etc/sudoers.d/monitor มีอยู่จริง และภายในมีบรรทัดที่ระบุผู้ใช้ของคุณ
config.php ที่รากของแดชบอร์ด (/var/www/monitor/config.php) — เป็นไฟล์เดียวที่ต้องแก้ไขด้วยมือ การตั้งค่าทั้งหมดของแดชบอร์ดถูกกำหนดไว้ในไฟล์นี้ด้วยค่าคงที่ define() เปิดไฟล์นี้ในโปรแกรมแก้ไข:
ใส่ค่าของคุณลงในตำแหน่งที่ไฮไลต์ไว้; ส่วนที่เหลือปล่อยไว้ตามเดิม:
สิ่งที่ต้องเปลี่ยน:
DB_NAME, DB_USER, DB_PASS — ชื่อฐานข้อมูล ผู้ใช้ และรหัสผ่านที่ตรงกันกับที่คุณตั้งไว้ตอนสร้างฐานข้อมูลในขั้นตอน 04 (หากปล่อยเป็นตัวอย่างไว้ — monitor_db / monitor_user) อย่าแก้ DB_HOST และ DB_CHARSETAPP_URL — ที่อยู่แดชบอร์ดแบบเต็มพร้อม https:// ไม่มีสแลชปิดท้ายและไม่มี www ต้องตรงกับโดเมนที่คุณเปิดใช้งานลิขสิทธิ์ (ขั้นตอน 07) มิฉะนั้นคีย์จะถูกปฏิเสธTIMEZONE — เขตเวลาของคุณ (ดูรายการ — timedatectl list-timezones) มีผลเฉพาะกับการแสดงวันที่ของแดชบอร์ดเท่านั้น ไม่มีผลต่อเวลาที่งาน cron ทำงาน (ตรงนั้นใช้เขตเวลาของระบบ)SESSION_LIFETIME — จำนวนวินาทีที่ไม่มีการใช้งานก่อนที่แดชบอร์ดจะขอให้เข้าสู่ระบบใหม่ (ค่าเริ่มต้น 8 ชั่วโมง) เช่น 3600 = 1 ชั่วโมง, 86400 = หนึ่งวันdisplay_errors, log_errors, error_log) — ปล่อยไว้ตามค่าเริ่มต้นบันทึกไฟล์ (Ctrl+O, Enter แล้ว Ctrl+X) และรีสตาร์ท PHP-FPM — มิฉะนั้นการเปลี่ยนแปลงจะไม่มีผลเพราะ OPcache:
640 (ตั้งไว้ในขั้นตอน 03) และการห้ามอย่างชัดเจนใน .htaccess ที่ราก อย่านำไปวางในรีโพซิทอรีสาธารณะและอย่าส่งให้ฝ่ายสนับสนุนพร้อมรหัสผ่านจริง
http:// ได้
Certbot skipped — issue SSL in …) ใบรับรองออกด้วยสวิตช์ Let's Encrypt บนเว็บโดเมนในแผงควบคุมเอง การต่ออายุจึงเป็นหน้าที่ของแผงควบคุมด้วยเช่นกัน
certbot และปลั๊กอินสำหรับ Apache ถูกติดตั้งไว้แล้วโดยการตั้งค่าอัตโนมัติ DNS ของโดเมนควรชี้มาที่เซิร์ฟเวอร์แล้ว (ขั้นตอน 02) ออกใบรับรองในคำสั่งเดียว:
หากต้องการให้แดชบอร์ดเปิดได้ด้วย www. ด้วย — ให้ระบุทั้งสองชื่อในคำสั่งเดียว มิฉะนั้นเบราว์เซอร์จะเตือนเรื่องใบรับรองที่แอดเดรสที่สอง:
Y<VirtualHost *:443> ตั้งค่าการเปลี่ยนเส้นทาง http→https และการต่ออายุอัตโนมัติ ท้ายสุดจะขึ้น Successfully enabled HTTPS
dig +short monitor.example.com คืนค่า IP ของเซิร์ฟเวอร์ และเปิดพอร์ต 80/443 แล้ว (sudo ufw allow 80,443/tcp)
หลังออกใบรับรอง: https://monitor.example.com เปิดได้พร้อมไอคอนแม่กุญแจ, http:// จะเปลี่ยนเส้นทางไปยัง https://
เปิด https://monitor.example.com เข้าสู่ระบบด้วย admin / useradmin แล้วทำตามเช็กลิสต์:
ARCIVEO-… จากบัญชีผู้ใช้ไปเปิดใช้กับโดเมนของคุณ แล้ววางคีย์ใน “การตั้งค่า” → “ลิขสิทธิ์” รายละเอียดpublic/start_db.php หากยังเหลืออยู่: มันให้สร้างฐานข้อมูลใหม่ได้โดยไม่ต้องล็อกอิน ตราบใดที่ไฟล์ยังอยู่ในรูทของแดชบอร์ดหรือใน public/ แดชบอร์ดจะเตือนด้วยแบนเนอร์สีแดงsudo /usr/local/bin/clamav-scan.sh) ใช้ดิสก์และซีพียูอย่างหนัก และอาจใช้เวลาหนึ่งชั่วโมงขึ้นไป — บนเซิร์ฟเวอร์ที่ใช้งานจริงควรรอรอบกลางคืนเวลา 01:30 ส่วนหัวข้อ “ดิสก์ (SMART)”, “ประสิทธิภาพ” และ “อัปเดตความปลอดภัย” จะเติมข้อมูลเอง: ทุก 30 นาที, ทุก 5 นาที และชั่วโมงละครั้ง ตามลำดับ