ทุกวันนี้ การเพิ่มเซิร์ฟเวอร์บนโฮสติ้งนั้นใช้เวลาเพียงไม่กี่นาทีและคลิกเมาส์ไม่กี่ครั้ง แต่ทันทีหลังจากเปิดตัว เขาพบว่าตัวเองอยู่ในสภาพแวดล้อมที่ไม่เป็นมิตร เพราะเขาเปิดรับอินเทอร์เน็ตทั้งหมดเหมือนเด็กสาวไร้เดียงสาในดิสโก้ร็อคเกอร์ สแกนเนอร์จะค้นหาได้อย่างรวดเร็วและตรวจจับบอทที่เขียนสคริปต์อัตโนมัตินับพันตัวที่ค้นหาเครือข่ายเพื่อหาช่องโหว่และการกำหนดค่าที่ผิดพลาด มีบางสิ่งที่คุณควรทำทันทีหลังจากเปิดตัวเพื่อให้แน่ใจว่ามีการป้องกันขั้นพื้นฐาน
Содержание
ผู้ใช้ที่ไม่ใช่รูท คีย์แทนรหัสผ่าน SSH ไฟร์วอลล์ Fail2Ban อัปเดตความปลอดภัยอัตโนมัติ การเปลี่ยนพอร์ตเริ่มต้น
ผู้ใช้ที่ไม่ใช่รูท
ขั้นตอนแรกคือการสร้างผู้ใช้ที่ไม่ใช่รูทด้วยตัวคุณเอง ประเด็นอยู่ที่ผู้ใช้ root
สิทธิพิเศษในระบบและหากคุณอนุญาตให้เขาดูแลระบบจากระยะไกล คุณจะทำงานครึ่งหนึ่งให้กับแฮ็กเกอร์ โดยทิ้งชื่อผู้ใช้ที่ถูกต้องไว้ให้เขา
ดังนั้น คุณต้องสร้างผู้ใช้รายอื่น และปิดใช้งานการดูแลระบบระยะไกลผ่าน SSH สำหรับรูท
ผู้ใช้ใหม่เริ่มต้นโดยคำสั่ง useradd
:
useradd [options] <username>
จากนั้นเพิ่มรหัสผ่านด้วยคำสั่ง passwd
:
passwd <username>
สุดท้าย ผู้ใช้รายนี้จำเป็นต้องเพิ่มลงในกลุ่มที่มีสิทธิ์ดำเนินการคำสั่งยกระดับ sudo
. ขึ้นอยู่กับการกระจาย Linux กลุ่มเหล่านี้อาจเป็นกลุ่มที่แตกต่างกัน ตัวอย่างเช่น ใน CentOS และ Red Hat ผู้ใช้จะถูกเพิ่มลงในกลุ่ม wheel
:
usermod -aG wheel <username>
ใน Ubuntu จะถูกเพิ่มเข้าในกลุ่ม sudo
:
usermod -aG sudo <username>
คีย์แทนรหัสผ่าน SSH
การบังคับเดรัจฉานหรือการรั่วไหลของรหัสผ่านเป็นเวกเตอร์การโจมตีมาตรฐาน ดังนั้นจึงเป็นการดีที่สุดที่จะปิดใช้งานการตรวจสอบรหัสผ่านใน SSH (Secure Shell) และใช้การตรวจสอบสิทธิ์ด้วยคีย์แทน
มีโปรแกรมต่าง ๆ สำหรับการนำโปรโตคอล SSH ไปใช้ เช่น
sudo apt install openssh-client
การติดตั้งเซิร์ฟเวอร์:
sudo apt install openssh-server
การเริ่มต้น SSH daemon (sshd) บนเซิร์ฟเวอร์ Ubuntu:
sudo systemctl start sshd
เริ่ม daemon โดยอัตโนมัติในทุกการบู๊ต:
sudo systemctl enable sshd
ควรสังเกตว่าส่วนเซิร์ฟเวอร์ของ OpenSSH รวมถึงส่วนไคลเอนต์ นั่นคือผ่าน openssh-server
คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์อื่นได้ ยิ่งไปกว่านั้น จากเครื่องไคลเอนต์ของคุณ คุณสามารถเริ่มอุโมงค์ SSH จากเซิร์ฟเวอร์ระยะไกลไปยังโฮสต์ของบุคคลที่สาม จากนั้นโฮสต์ของบุคคลที่สามจะถือว่าเซิร์ฟเวอร์ระยะไกลเป็นแหล่งที่มาของคำขอ คุณลักษณะที่มีประโยชน์มากสำหรับการปกปิดระบบของคุณ ดูบทความสำหรับรายละเอียด
ในเครื่องไคลเอนต์ การติดตั้งเซิร์ฟเวอร์เต็มรูปแบบมักจะไม่สมเหตุสมผล เพื่อป้องกันความเป็นไปได้ของการเชื่อมต่อระยะไกลกับคอมพิวเตอร์ (เพื่อวัตถุประสงค์ด้านความปลอดภัย)
ดังนั้น สำหรับผู้ใช้ใหม่ของคุณ ก่อนอื่นคุณต้องสร้างคีย์ SSH บนคอมพิวเตอร์ที่คุณจะเข้าถึงเซิร์ฟเวอร์:
ssh-keygen -t rsa
รหัสสาธารณะถูกเก็บไว้ในไฟล์ .pub
และดูเหมือนสตริงของอักขระสุ่มที่ขึ้นต้นด้วย ssh-rsa
.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
จากนั้น สร้างไดเร็กทอรี SSH บนเซิร์ฟเวอร์ในไดเร็กทอรีโฮมของผู้ใช้ จากภายใต้รูท และเพิ่มคีย์สาธารณะ SSH ลงในไฟล์ authorized_keys
โดยใช้โปรแกรมแก้ไขข้อความเช่น Vim:
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys
vim /home/user_name/.ssh/authorized_keys
สุดท้าย ตั้งค่าการอนุญาตที่ถูกต้องสำหรับไฟล์:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys
และเปลี่ยนความเป็นเจ้าของให้กับผู้ใช้รายนี้:
chown -R username:username /home/username/.ssh
ในฝั่งไคลเอ็นต์ คุณต้องระบุตำแหน่งของรหัสลับสำหรับการตรวจสอบสิทธิ์:
ssh-add DIR_PATH/keylocation
ตอนนี้คุณสามารถเข้าสู่เซิร์ฟเวอร์โดยใช้ชื่อผู้ใช้โดยใช้คีย์นี้:
ssh [username]@hostname
หลังจากการอนุญาต คุณสามารถใช้คำสั่ง scp เพื่อคัดลอกไฟล์ ยูทิลิตี
ขอแนะนำให้ทำสำเนาสำรองของคีย์ส่วนตัวหลายชุด เพราะหากคุณปิดใช้งานการตรวจสอบรหัสผ่านและทำหาย คุณจะไม่มีทางเข้าสู่เซิร์ฟเวอร์ของคุณเองได้เลย
ตามที่กล่าวไว้ข้างต้น ใน SSH คุณต้องปิดใช้งานการตรวจสอบสิทธิ์สำหรับรูท (นี่คือเหตุผลที่เราเริ่มต้นผู้ใช้ใหม่)
บน CentOS/Red Hat เราพบบรรทัด PermitRootLogin yes
ในไฟล์คอนฟิก /etc/ssh/sshd_config
และเปลี่ยน:
PermitRootLogin no
บน Ubuntu ให้เพิ่มบรรทัด PermitRootLogin no
ไปยังไฟล์ปรับแต่ง 10-my-sshd-settings.conf
:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
หลังจากตรวจสอบว่าผู้ใช้ใหม่กำลังตรวจสอบสิทธิ์ด้วยคีย์ของตน คุณสามารถปิดใช้งานการตรวจสอบรหัสผ่านเพื่อลดความเสี่ยงของการรั่วไหลของรหัสผ่านหรือการบังคับที่ดุร้าย ตอนนี้ในการเข้าถึงเซิร์ฟเวอร์ ผู้โจมตีจะต้องได้รับรหัสส่วนตัว
บน CentOS/Red Hat เราพบบรรทัด PasswordAuthentication yes
ในไฟล์คอนฟิก /etc/ssh/sshd_config
และเปลี่ยนดังนี้:
PasswordAuthentication no
บน Ubuntu ให้เพิ่มบรรทัด PasswordAuthentication no
เพื่อยื่น 10-my-sshd-settings.conf
:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
สำหรับคำแนะนำในการเปิดใช้งานการยืนยันตัวตนแบบสองปัจจัยผ่าน SSH โปรดดู
ไฟร์วอลล์
ไฟร์วอลล์ทำให้แน่ใจว่าทราฟฟิกบนพอร์ตที่คุณอนุญาตโดยตรงเท่านั้นที่จะไปยังเซิร์ฟเวอร์ สิ่งนี้ป้องกันการใช้ประโยชน์จากพอร์ตที่เปิดใช้งานโดยไม่ได้ตั้งใจกับบริการอื่น ๆ ซึ่งช่วยลดพื้นที่การโจมตีได้อย่างมาก
ก่อนติดตั้งไฟร์วอลล์ คุณต้องแน่ใจว่า SSH รวมอยู่ในรายการการยกเว้น และจะไม่ถูกบล็อก มิฉะนั้นหลังจากเริ่มไฟร์วอลล์แล้ว เราจะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้
การแจกจ่าย Ubuntu มาพร้อมกับไฟร์วอลล์ที่ไม่ซับซ้อน (
การอนุญาต SSH ในไฟร์วอลล์บน Ubuntu:
sudo ufw allow ssh
บน CentOS/Red Hat ให้ใช้คำสั่ง firewall-cmd
:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
หลังจากขั้นตอนนี้ คุณสามารถเริ่มไฟร์วอลล์ได้
บน CentOS/Red Hat ให้เริ่มบริการ systemd สำหรับไฟร์วอลล์:
sudo systemctl start firewalld
sudo systemctl enable firewalld
บน Ubuntu เราใช้คำสั่งต่อไปนี้:
sudo ufw enable
Fail2Ban
บริการ
การติดตั้ง Fail2Ban บน CentOS และ Red Hat:
sudo yum install fail2ban
การติดตั้งบน Ubuntu และ Debian:
sudo apt install fail2ban
ปล่อย:
systemctl start fail2ban
systemctl enable fail2ban
โปรแกรมมีไฟล์การกำหนดค่าสองไฟล์: /etc/fail2ban/fail2ban.conf
и /etc/fail2ban/jail.conf
. มีการระบุข้อจำกัดการแบนในไฟล์ที่สอง
คุกสำหรับ SSH เปิดใช้งานโดยค่าเริ่มต้นด้วยการตั้งค่าเริ่มต้น (5 ครั้ง, เว้น 10 นาที, แบน 10 นาที)
[ค่าเริ่มต้น] เพิกเฉยคำสั่ง = bantime = 10m findtime = 10m maxretry = 5
นอกจาก SSH แล้ว Fail2Ban ยังสามารถปกป้องบริการอื่นๆ บนเว็บเซิร์ฟเวอร์ nginx หรือ Apache
อัปเดตความปลอดภัยอัตโนมัติ
อย่างที่คุณทราบ พบช่องโหว่ใหม่ ๆ ในทุกโปรแกรมอย่างต่อเนื่อง หลังจากเผยแพร่ข้อมูลแล้ว ช่องโหว่จะถูกเพิ่มเข้าไปในชุดช่องโหว่ยอดนิยม ซึ่งแฮ็กเกอร์และวัยรุ่นใช้เป็นจำนวนมากเมื่อสแกนเซิร์ฟเวอร์ทั้งหมดติดต่อกัน ดังนั้นการติดตั้งการอัปเดตความปลอดภัยทันทีที่ปรากฏขึ้นจึงเป็นสิ่งสำคัญมาก
บนเซิร์ฟเวอร์ Ubuntu การอัปเดตความปลอดภัยอัตโนมัติจะเปิดใช้งานตามค่าเริ่มต้น ดังนั้นจึงไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม
บน CentOS/Red Hat คุณต้องติดตั้งแอปพลิเคชัน
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
ตรวจสอบตัวจับเวลา:
sudo systemctl status dnf-automatic.timer
การเปลี่ยนพอร์ตเริ่มต้น
SSH ได้รับการพัฒนาในปี 1995 เพื่อแทนที่ telnet (พอร์ต 23) และ ftp (พอร์ต 21) ดังนั้นผู้เขียนโปรแกรม Tatu Iltonen
โดยปกติแล้ว ผู้โจมตีทุกคนจะทราบว่าพอร์ต SSH ใดทำงานอยู่ และสแกนพอร์ตดังกล่าวไปพร้อมกับพอร์ตมาตรฐานที่เหลือเพื่อค้นหาเวอร์ชันของซอฟต์แวร์ เพื่อตรวจสอบรหัสผ่านรูทมาตรฐาน และอื่นๆ
การเปลี่ยนพอร์ตมาตรฐาน - ทำให้ยุ่งเหยิง - หลายครั้งช่วยลดปริมาณการรับส่งข้อมูลขยะ ขนาดของบันทึกและโหลดบนเซิร์ฟเวอร์ และยังลดพื้นผิวการโจมตีด้วย แม้ว่าบางคน
ในทางทฤษฎี การเปลี่ยนพอร์ตดีฟอลต์ขัดต่อหลักปฏิบัติของสถาปัตยกรรมแบบเปิด แต่ในทางปฏิบัติ ปริมาณการรับส่งข้อมูลที่เป็นอันตรายจะลดลงจริง ๆ ดังนั้นนี่จึงเป็นมาตรการที่ง่ายและมีประสิทธิภาพ
หมายเลขพอร์ตสามารถกำหนดค่าได้โดยการเปลี่ยนคำสั่ง Port 22
ในไฟล์คอนฟิก -p <port>
в -p <port>
.
พารามิเตอร์ -p <port>
สามารถใช้ระบุหมายเลขพอร์ตเมื่อเชื่อมต่อด้วยคำสั่ง ssh
ในลินุกซ์ ใน scp
ใช้พารามิเตอร์ -P <port>
(ป.). คำสั่งบรรทัดคำสั่งแทนที่ค่าใด ๆ ในไฟล์คอนฟิกูเรชัน
หากมีเซิร์ฟเวอร์หลายตัว การกระทำเหล่านี้เกือบทั้งหมดเพื่อปกป้องเซิร์ฟเวอร์ Linux สามารถทำได้โดยอัตโนมัติในสคริปต์ แต่ถ้ามีเซิร์ฟเวอร์เพียงเครื่องเดียว จะเป็นการดีกว่าที่จะควบคุมกระบวนการด้วยตนเอง
เป็นโฆษณา
สั่งซื้อและเริ่มต้นได้ทันที!
ที่มา: will.com