ค้นหาเว็บไซต์

การตั้งค่าเซิร์ฟเวอร์เริ่มต้นด้วย Ubuntu 20.04/18.04 และ 16.04


บทช่วยสอนนี้จะแนะนำคุณเกี่ยวกับขั้นตอนพื้นฐานแรกที่คุณต้องกำหนดค่าบนเซิร์ฟเวอร์ Ubuntu ที่ติดตั้งใหม่ เพื่อเพิ่มความปลอดภัยและความน่าเชื่อถือสำหรับเซิร์ฟเวอร์ของคุณ

การกำหนดค่าที่อธิบายในหัวข้อนี้เกือบจะเหมือนกันสำหรับระบบเซิร์ฟเวอร์ Ubuntu ทั้งหมด เกี่ยวกับแพลตฟอร์มระบบปฏิบัติการพื้นฐาน ไม่ว่าจะติดตั้ง Ubuntu บนเซิร์ฟเวอร์ Bare Metal ในเครื่องเสมือนส่วนตัวหรือเครื่องเสมือน หมุนออกมาในระบบคลาวด์สาธารณะ VPS

ความต้องการ

  • การติดตั้งเซิร์ฟเวอร์ Ubuntu 20.04
  • การติดตั้งเซิร์ฟเวอร์ Ubuntu 18.04
  • การติดตั้งเซิร์ฟเวอร์ Ubuntu 16.04

อัปเดตและอัปเกรดระบบ Ubuntu

ขั้นตอนแรกที่คุณต้องดูแลในกรณีที่มีการติดตั้งเซิร์ฟเวอร์ Ubuntu ใหม่หรือ Ubuntu VPS ที่ใช้งานใหม่ คือการตรวจสอบให้แน่ใจว่าระบบและส่วนประกอบของระบบทั้งหมด เช่น เคอร์เนล ตัวจัดการแพ็คเกจ apt และแพ็คเกจที่ติดตั้งอื่น ๆ ทั้งหมดได้รับการอัปเดตด้วยเวอร์ชันล่าสุดและแพตช์ความปลอดภัย

หากต้องการอัปเดตเซิร์ฟเวอร์ Ubuntu ให้ลงชื่อเข้าใช้คอนโซลของเซิร์ฟเวอร์ด้วยบัญชีที่มีสิทธิ์ใช้งานรูทหรือโดยตรงในฐานะรูทและรันคำสั่งด้านล่างเพื่อดำเนินการอัปเดตและอัปเกรด

sudo apt update 

หลังจากรันคำสั่ง update คุณจะเห็นจำนวนแพ็คเกจที่พร้อมใช้งานสำหรับกระบวนการอัพเกรดและคำสั่งที่ใช้สำหรับแสดงรายการการอัพเกรดแพ็คเกจ

sudo apt list --upgradable

หลังจากที่คุณได้ดูรายการแพ็คเกจที่พร้อมสำหรับการอัพเกรดแล้ว ให้ออกคำสั่งด้านล่างเพื่อเริ่มกระบวนการอัพเกรดระบบ

sudo apt upgrade

ในการลบแพ็คเกจ deb ที่ดาวน์โหลดในเครื่องทั้งหมดและแคช apt-get อื่น ๆ ทั้งหมด ให้ดำเนินการคำสั่งด้านล่าง

sudo apt autoremove
sudo apt clean

สร้างบัญชีใหม่ใน Ubuntu

ตามค่าเริ่มต้น บัญชีรูทจะถูกปิดการใช้งานอย่างสมบูรณ์ใน Ubuntu เพื่อเป็นมาตรการรักษาความปลอดภัย ในการสร้างบัญชีใหม่ในระบบ ให้เข้าสู่ระบบด้วยผู้ใช้บัญชีที่มีสิทธิ์ใช้งานรูท และสร้างบัญชีใหม่ด้วยคำสั่งด้านล่าง

บัญชีใหม่นี้จะได้รับสิทธิ์รูทผ่านคำสั่ง sudo และจะถูกใช้เพื่อดำเนินงานด้านการดูแลระบบในระบบ ตรวจสอบให้แน่ใจว่าคุณได้ตั้งรหัสผ่านที่รัดกุมเพื่อปกป้องบัญชีนี้ ปฏิบัติตามข้อความแจ้ง adduser เพื่อตั้งค่ารายละเอียดและรหัสผ่านผู้ใช้

sudo adduser ubuntu_user

หากบัญชีนี้ถูกกำหนดให้กับผู้ดูแลระบบรายอื่น คุณสามารถบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านเมื่อพยายามเข้าสู่ระบบครั้งแรกโดยใช้คำสั่งต่อไปนี้

sudo chage -d0 ubuntu_user

ในตอนนี้ ผู้ใช้ที่เพิ่มใหม่ไม่สามารถทำงานด้านการดูแลระบบผ่านยูทิลิตี้ sudo ได้ หากต้องการให้สิทธิ์ผู้ดูแลระบบแก่บัญชีผู้ใช้ใหม่นี้ คุณควรเพิ่มผู้ใช้ในกลุ่มระบบ “sudo ” โดยใช้คำสั่งด้านล่าง

sudo usermod -a -G sudo ubuntu_user

ตามค่าเริ่มต้น ผู้ใช้ทั้งหมดที่อยู่ในกลุ่ม “sudo” จะได้รับอนุญาตให้ดำเนินการคำสั่งด้วยสิทธิ์รูทผ่านยูทิลิตี้ sudo ต้องใช้คำสั่ง Sudo ก่อนที่จะเขียนคำสั่งที่จำเป็นสำหรับการดำเนินการ ดังที่แสดงในตัวอย่างด้านล่าง

sudo apt install package_name

ทดสอบว่าผู้ใช้ใหม่มีสิทธิ์ใช้งานรูทหรือไม่ โดยเข้าสู่ระบบและเรียกใช้คำสั่ง apt update ที่นำหน้าด้วย sudo

su - ubuntu_user
sudo apt update

กำหนดค่าชื่อโฮสต์ของระบบใน Ubuntu

โดยปกติแล้ว ชื่อโฮสต์ของเครื่องจะถูกตั้งค่าในระหว่างกระบวนการติดตั้งระบบหรือเมื่อมีการสร้าง VPS ในระบบคลาวด์ อย่างไรก็ตาม คุณควรเปลี่ยนชื่อเครื่องของคุณเพื่อให้สะท้อนถึงปลายทางของเซิร์ฟเวอร์ของคุณได้ดีขึ้น หรือเพื่ออธิบายวัตถุประสงค์ขั้นสุดท้ายได้ดีขึ้น

ในบริษัทขนาดใหญ่ เครื่องจักรจะตั้งชื่อตามแผนการตั้งชื่อที่ซับซ้อนเพื่อให้สามารถระบุเครื่องในชั้นวางของศูนย์ข้อมูลได้อย่างง่ายดาย ตัวอย่างเช่น หากเครื่อง Ubuntu ของคุณใช้งานเมลเซิร์ฟเวอร์ ชื่อของเครื่องควรสะท้อนข้อเท็จจริงนี้ และคุณสามารถตั้งค่าชื่อโฮสต์ของเครื่องเป็น mx01.mydomain.lan ได้ เป็นต้น

หากต้องการแสดงรายละเอียดเกี่ยวกับชื่อโฮสต์ของเครื่องของคุณให้รันคำสั่งต่อไปนี้

hostnamectl

หากต้องการเปลี่ยนชื่อเครื่องของคุณ ให้ใช้ คำสั่ง hostnamectl ด้วยชื่อใหม่ที่คุณจะกำหนดค่าให้กับเครื่องของคุณ ดังที่แสดงในข้อความที่ตัดตอนมาด้านล่าง

sudo hostnamectl set-hostname tecmint

ตรวจสอบชื่อใหม่ของระบบของคุณด้วยคำสั่งใดคำสั่งหนึ่งด้านล่าง

hostname
hostname -s
cat /etc/hostname 

ตั้งค่า SSH ด้วย Public Key Authentication ใน Ubuntu

ในการเพิ่มระดับความปลอดภัยของระบบของเซิร์ฟเวอร์ Ubuntu คุณควรตั้งค่าการตรวจสอบสิทธิ์คีย์สาธารณะ SSH สำหรับบัญชีในเครื่อง ในการสร้างคู่คีย์ SSH คีย์สาธารณะและคีย์ส่วนตัวซึ่งมีการระบุความยาวของคีย์ เช่น 2048 บิต ให้ดำเนินการคำสั่งต่อไปนี้ที่คอนโซลเซิร์ฟเวอร์ของคุณ

ตรวจสอบให้แน่ใจว่าคุณเข้าสู่ระบบกับผู้ใช้ที่คุณกำลังตั้งค่าคีย์ SSH

su - ubuntu_user
ssh-keygen -t RSA -b 2048

ขณะที่สร้างคีย์ คุณจะได้รับแจ้งให้เพิ่ม ข้อความรหัสผ่าน เพื่อรักษาความปลอดภัยให้กับคีย์ คุณสามารถป้อนข้อความรหัสผ่านที่รัดกุมหรือเลือกที่จะปล่อยให้ข้อความรหัสผ่านว่างไว้ได้หากคุณต้องการทำงานอัตโนมัติผ่านเซิร์ฟเวอร์ SSH

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

ssh-copy-id remote_user@remote_server

คุณควรจะสามารถเข้าสู่ระบบโดยอัตโนมัติผ่าน SSH ไปยังเซิร์ฟเวอร์ระยะไกลโดยใช้วิธีการตรวจสอบสิทธิ์คีย์สาธารณะ คุณไม่จำเป็นต้องเพิ่มรหัสผ่านผู้ใช้ระยะไกลในขณะที่ใช้การตรวจสอบสิทธิ์คีย์สาธารณะ SSH

หลังจากที่คุณเข้าสู่ระบบเซิร์ฟเวอร์ระยะไกลแล้ว คุณสามารถเริ่มดำเนินการคำสั่งได้ เช่น คำสั่ง w เพื่อแสดงรายการผู้ใช้ที่เข้าสู่ระบบระยะไกลด้วย ssh ดังที่แสดงในภาพหน้าจอด้านล่าง

พิมพ์ exit ในคอนโซลเพื่อปิดเซสชัน SSH ระยะไกล

ssh remote_user@remote_server
w
exit

หากต้องการดูเนื้อหาของคีย์ SSH สาธารณะของคุณเพื่อติดตั้งคีย์ลงในเซิร์ฟเวอร์ SSH ระยะไกลด้วยตนเอง ให้ออกคำสั่งต่อไปนี้

cat ~/.ssh/id_rsa.pub

เซิร์ฟเวอร์ SSH ที่ปลอดภัยใน Ubuntu

เพื่อรักษาความปลอดภัย SSH daemon คุณควรเปลี่ยนหมายเลขพอร์ต SSH เริ่มต้นจาก 22 เป็นพอร์ตสุ่ม ซึ่งสูงกว่า 1024 และไม่อนุญาตให้เข้าถึง SSH ระยะไกลไปยังบัญชีรูทผ่านทาง รหัสผ่านหรือคีย์โดยการเปิดไฟล์การกำหนดค่าหลักของเซิร์ฟเวอร์ SSH และทำการเปลี่ยนแปลงต่อไปนี้

sudo vi /etc/ssh/sshd_config

ขั้นแรก ค้นหาบรรทัดที่มีความคิดเห็น #Port22 และเพิ่มบรรทัดใหม่ข้างใต้ (แทนที่หมายเลขพอร์ตการฟังตามลำดับ):

Port 2345

อย่าปิดไฟล์ เลื่อนลงและค้นหาบรรทัด #PermitRootLogin ใช่ ยกเลิกการใส่เครื่องหมายบรรทัดโดยลบเครื่องหมาย # (แฮชแท็ก) ออกจากจุดเริ่มต้นของบรรทัดและ แก้ไขบรรทัดให้มีลักษณะเหมือนที่แสดงในข้อความที่ตัดตอนมาด้านล่าง

PermitRootLogin no

หลังจากนั้น ให้รีสตาร์ทเซิร์ฟเวอร์ SSH เพื่อใช้การตั้งค่าใหม่และทดสอบการกำหนดค่าโดยพยายามเข้าสู่ระบบจากเครื่องระยะไกลไปยังเซิร์ฟเวอร์นี้ด้วยบัญชีรูทผ่านหมายเลขพอร์ตใหม่ ควรจำกัดการเข้าถึงบัญชีรูทผ่าน SSH

sudo systemctl restart sshd

นอกจากนี้ ให้เรียกใช้ netstat หรือ คำสั่ง ss และกรองเอาต์พุตผ่านคำสั่ง grep เพื่อแสดงหมายเลขพอร์ตการฟังใหม่สำหรับเซิร์ฟเวอร์ SSH

sudo ss -tlpn| grep ssh
sudo netstat -tlpn| grep ssh

มีสถานการณ์ที่คุณอาจต้องการยกเลิกการเชื่อมต่อ SSH ระยะไกลทั้งหมดที่สร้างขึ้นในเซิร์ฟเวอร์ของคุณโดยอัตโนมัติหลังจากไม่มีการใช้งานช่วงระยะเวลาหนึ่ง

เพื่อเปิดใช้งานคุณสมบัตินี้ ให้ดำเนินการคำสั่งด้านล่าง ซึ่งจะเพิ่มตัวแปร bash TMOUT ไปยังไฟล์ที่ซ่อน .bashrc ของบัญชีของคุณ และบังคับใช้การเชื่อมต่อ SSH ทุกรายการที่สร้างด้วยชื่อของ ผู้ใช้จะถูกตัดการเชื่อมต่อหรือออกจากระบบหลังจากไม่มีการใช้งานเป็นเวลา 5 นาที

echo 'TMOUT=300' >> .bashrc

เรียกใช้คำสั่ง tail เพื่อตรวจสอบว่ามีการเพิ่มตัวแปรที่ส่วนท้ายของไฟล์ .bashrc อย่างถูกต้องหรือไม่ การเชื่อมต่อ SSH ที่ตามมาทั้งหมดจะถูกปิดโดยอัตโนมัติหลังจากไม่มีการใช้งานเป็นเวลา 5 นาทีนับจากนี้เป็นต้นไป

tail .bashrc

ในภาพหน้าจอด้านล่าง เซสชัน SSH ระยะไกลจากเครื่อง drupal ไปยังเซิร์ฟเวอร์ Ubuntu ผ่านบัญชี ubuntu_user หมดเวลาและออกจากระบบอัตโนมัติหลังจากผ่านไป 5 นาที

กำหนดค่าไฟร์วอลล์ Ubuntu UFW

เซิร์ฟเวอร์ทุกเครื่องต้องการไฟร์วอลล์ที่ได้รับการกำหนดค่าอย่างดีเพื่อรักษาความปลอดภัยระบบในระดับเครือข่าย เซิร์ฟเวอร์ Ubuntu ใช้แอปพลิเคชัน UFW เพื่อจัดการกฎ iptables บนเซิร์ฟเวอร์

ตรวจสอบสถานะของแอปพลิเคชั่นไฟร์วอลล์ UFW ใน Ubuntu โดยออกคำสั่งด้านล่าง

sudo systemctl status ufw
sudo ufw status

โดยปกติแล้ว ไฟร์วอลล์ดีมอน UFW จะเปิดใช้งานและทำงานในเซิร์ฟเวอร์ Ubuntu แต่กฎจะไม่ถูกนำมาใช้ตามค่าเริ่มต้น ก่อนที่จะเปิดใช้งานนโยบายไฟร์วอลล์ UFW ในระบบของคุณ ขั้นแรกคุณควรเพิ่มกฎใหม่เพื่ออนุญาตให้การรับส่งข้อมูล SSH ผ่านไฟร์วอลล์ผ่านพอร์ต SSH ที่เปลี่ยนแปลง สามารถเพิ่มกฎได้โดยดำเนินการคำสั่งด้านล่าง

sudo ufw allow 2345/tcp

หลังจากที่คุณอนุญาตการรับส่งข้อมูล SSH แล้ว คุณสามารถเปิดใช้งานและตรวจสอบแอปพลิเคชันไฟร์วอลล์ UFW ด้วยคำสั่งต่อไปนี้

sudo ufw enable
sudo ufw status

หากต้องการเพิ่มกฎไฟร์วอลล์ใหม่สำหรับบริการเครือข่ายอื่น ๆ ที่ติดตั้งบนเซิร์ฟเวอร์ของคุณในภายหลัง เช่น เซิร์ฟเวอร์ HTTP, เมลเซิร์ฟเวอร์ หรือบริการเครือข่ายอื่น ๆ ให้ใช้ตัวอย่างคำสั่งไฟร์วอลล์ด้านล่างนี้เป็นแนวทาง

sudo ufw allow http  #allow http traffic
sudo ufw allow proto tcp from any to any port 25,443  # allow https and smtp traffic

หากต้องการแสดงรายการกฎไฟร์วอลล์ทั้งหมดให้รันคำสั่งด้านล่าง

sudo ufw status verbose

ตั้งเวลาเซิร์ฟเวอร์ Ubuntu

หากต้องการควบคุมหรือสอบถามนาฬิกาเซิร์ฟเวอร์ Ubuntu และการตั้งค่าเวลาอื่น ๆ ที่เกี่ยวข้อง ให้ดำเนินการคำสั่ง timedatectl โดยไม่มีอาร์กิวเมนต์

หากต้องการเปลี่ยนการตั้งค่าเขตเวลาของเซิร์ฟเวอร์ ขั้นแรกให้ดำเนินการ คำสั่ง timedatectl ด้วยอาร์กิวเมนต์ list-timezones เพื่อแสดงรายการเขตเวลาที่มีอยู่ทั้งหมด จากนั้นจึงตั้งค่าเขตเวลาของระบบของคุณตามที่แสดงในข้อความที่ตัดตอนมาด้านล่าง

sudo timedatectl 
sudo timedatectl list-timezones 
sudo timedatectl set-timezone Europe/Vienna

ไคลเอนต์ systemd daemon systemd-timesyncd ใหม่สามารถใช้ได้ใน Ubuntu เพื่อมอบเวลาที่แม่นยำสำหรับเซิร์ฟเวอร์ของคุณผ่านเครือข่าย และซิงโครไนซ์เวลากับเซิร์ฟเวอร์เพียร์เวลาส่วนบน

หากต้องการใช้คุณลักษณะใหม่ของ Systemd ให้แก้ไขไฟล์การกำหนดค่า systemd-timesyncd daemon และเพิ่มเซิร์ฟเวอร์ NTP ทางภูมิศาสตร์ที่ใกล้เคียงที่สุดกับบรรทัดคำสั่ง NTP ดังที่แสดงในข้อความที่ตัดตอนมาด้านล่าง:

sudo nano /etc/systemd/timesyncd.conf

เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์ timesyncd.conf:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

หากต้องการเพิ่มเซิร์ฟเวอร์ NTP ทางภูมิศาสตร์ที่ใกล้ที่สุด โปรดดูรายการเซิร์ฟเวอร์โครงการพูล NTP ตามที่อยู่ต่อไปนี้: http://www.pool.ntp.org/en/

หลังจากนั้น ให้รีสตาร์ท Systemd timesync daemon เพื่อให้สอดคล้องกับการเปลี่ยนแปลง และตรวจสอบสถานะของ daemon โดยการรันคำสั่งด้านล่าง หลังจากรีสตาร์ท daemon จะเริ่มซิงค์เวลากับเพียร์เซิร์ฟเวอร์ ntp ใหม่

sudo systemctl restart systemd-timesyncd.service 
sudo systemctl status systemd-timesyncd.service

ปิดการใช้งานและลบบริการที่ไม่จำเป็นใน Ubuntu

หากต้องการรับรายการบริการเครือข่าย TCP และ UDP ทั้งหมดที่ทำงานตามค่าเริ่มต้นในเซิร์ฟเวอร์ Ubuntu ของคุณ ให้ดำเนินการคำสั่ง ss หรือ netstat

sudo netstat -tulpn
OR
sudo ss -tulpn

เริ่มต้นด้วยการเปิดตัว Ubuntu 16.10 ขณะนี้ตัวแก้ไข DNS เริ่มต้นได้รับการควบคุมโดยบริการ systemd-resolved ตามที่เปิดเผยโดยเอาต์พุตของ netstat หรือ >คำสั่งเอสเอส

คุณควรตรวจสอบสถานะบริการ systemd-resolved โดยการเรียกใช้คำสั่งต่อไปนี้

sudo systemctl status systemd-resolved.service

บริการ แก้ไขโดยระบบ เชื่อมโยงกับอินเทอร์เฟซเครือข่ายที่เปิดใช้งานทั้งหมด และรับฟังบนพอร์ต 53 และ 5355 TCP และ UDP

การเรียกใช้ DNS daemon แก้ไขโดยระบบ บนเซิร์ฟเวอร์ที่ใช้งานจริงอาจเป็นอันตรายได้ เนื่องจากการโจมตี DDOS จำนวนมากที่ดำเนินการโดยแฮกเกอร์ที่เป็นอันตรายต่อเซิร์ฟเวอร์ DNS ที่ไม่ปลอดภัย

หากต้องการหยุดและปิดใช้งานบริการนี้ ให้ดำเนินการคำสั่งต่อไปนี้

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

ตรวจสอบว่าบริการถูกหยุดหรือปิดใช้งานโดยออกคำสั่ง ss หรือ netstat พอร์ตการฟังที่แก้ไขโดย systemd, 53 และ 5355 TCP และ UDP ไม่ควรแสดงรายการในเอาต์พุตคำสั่ง netstat หรือ ss ดังที่แสดงด้านล่าง

นอกจากนี้ คุณควรรีบูตเครื่องเพื่อปิดใช้งานบริการ daemon ที่แก้ไขโดยระบบทั้งหมดอย่างสมบูรณ์ และกู้คืนไฟล์เริ่มต้น /etc/resolv.conf

sudo ss -tulpn
sudo netstat -tulpn
sudo systemctl reboot

แม้ว่าคุณได้ปิดการใช้งานบริการเครือข่ายที่ไม่ต้องการให้ทำงานในเซิร์ฟเวอร์ของคุณแล้ว แต่ยังมีบริการอื่นๆ ที่ติดตั้งและทำงานอยู่ในระบบของคุณ เช่น กระบวนการ lxc และบริการ snapd สามารถตรวจพบบริการเหล่านี้ได้อย่างง่ายดายผ่านคำสั่ง ps, top หรือ pstree

sudo ps aux
sudo top
sudo pstree

ในกรณีที่คุณจะไม่ใช้การจำลองเสมือนคอนเทนเนอร์ LXC ในเซิร์ฟเวอร์ของคุณหรือเริ่มติดตั้งซอฟต์แวร์ที่บรรจุผ่านตัวจัดการแพ็คเกจ Snap คุณควรปิดการใช้งานและลบบริการเหล่านี้โดยสมบูรณ์โดยออกคำสั่งด้านล่าง

sudo apt autoremove --purge lxc-common lxcfs
sudo apt autoremove --purge snapd

นั่นคือทั้งหมด! ขณะนี้เซิร์ฟเวอร์ Ubuntu พร้อมสำหรับการติดตั้งซอฟต์แวร์เพิ่มเติมที่จำเป็นสำหรับบริการเครือข่ายหรือแอปพลิเคชันแบบกำหนดเอง เช่น การติดตั้งและกำหนดค่าเว็บเซิร์ฟเวอร์ เซิร์ฟเวอร์ฐานข้อมูล บริการแชร์ไฟล์ หรือแอปพลิเคชันเฉพาะอื่น ๆ