ซีรี่ส์ RHCSA: การติดตั้ง การกำหนดค่า และการรักษาความปลอดภัยเว็บและเซิร์ฟเวอร์ FTP - ตอนที่ 9
เว็บเซิร์ฟเวอร์ (หรือที่เรียกว่าเซิร์ฟเวอร์ HTTP) เป็นบริการที่จัดการเนื้อหา (โดยทั่วไปคือหน้าเว็บ แต่เป็นเอกสารประเภทอื่นด้วย) ไปยังไคลเอ็นต์ในเครือข่าย
เซิร์ฟเวอร์ FTP เป็นหนึ่งในทรัพยากรที่เก่าแก่และใช้บ่อยที่สุด (แม้กระทั่งทุกวันนี้) เพื่อให้ไฟล์พร้อมใช้งานกับไคลเอนต์บนเครือข่าย ในกรณีที่ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ เนื่องจาก FTP ใช้ ชื่อผู้ใช้ และ รหัสผ่าน โดยไม่มีการเข้ารหัส
เว็บเซิร์ฟเวอร์ที่มีอยู่ใน RHEL 7 เป็นเวอร์ชัน 2.4 ของ Apache HTTP Server สำหรับเซิร์ฟเวอร์ FTP เราจะใช้ Very Secure Ftp Daemon (หรือที่รู้จักในชื่อ vsftpd) เพื่อสร้างการเชื่อมต่อที่ปลอดภัยโดย TLS
ในบทความนี้ เราจะอธิบายวิธีการติดตั้ง กำหนดค่า และรักษาความปลอดภัยเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ FTP ใน RHEL 7
การติดตั้งเซิร์ฟเวอร์ Apache และ FTP
ในคู่มือนี้ เราจะใช้เซิร์ฟเวอร์ RHEL 7 ที่มีที่อยู่ IP แบบคงที่ 192.168.0.18/24 ในการติดตั้ง Apache และ VSFTPD ให้รันคำสั่งต่อไปนี้:
yum update && yum install httpd vsftpd
เมื่อการติดตั้งเสร็จสิ้น บริการทั้งสองจะถูกปิดใช้งานในตอนแรก ดังนั้นเราจึงจำเป็นต้องเริ่มต้นบริการด้วยตนเองในขณะนี้ และเปิดใช้งานให้เริ่มโดยอัตโนมัติโดยเริ่มด้วยการบูตครั้งถัดไป:
systemctl start httpd
systemctl enable httpd
systemctl start vsftpd
systemctl enable vsftpd
นอกจากนี้ เราต้องเปิดพอร์ต 80 และ 21 ซึ่งเว็บและ ftp daemons กำลังฟังอยู่ ตามลำดับ เพื่อให้สามารถเข้าถึงบริการเหล่านั้นจากภายนอก:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload
เพื่อยืนยันว่าเว็บเซิร์ฟเวอร์ทำงานอย่างถูกต้อง ให้เปิดเบราว์เซอร์ของคุณและป้อน IP ของเซิร์ฟเวอร์ คุณควรเห็นหน้าทดสอบ:
สำหรับเซิร์ฟเวอร์ ftp เราจะต้องกำหนดค่าเพิ่มเติม ซึ่งเราจะดำเนินการภายในไม่กี่นาที ก่อนที่จะยืนยันว่าทำงานได้ตามที่คาดไว้
การกำหนดค่าและการรักษาความปลอดภัย Apache Web Server
ไฟล์การกำหนดค่าหลักสำหรับ Apache อยู่ใน /etc/httpd/conf/httpd.conf
แต่อาจต้องใช้ไฟล์อื่นที่อยู่ภายใน /etc/httpd /conf.d
.
แม้ว่าการกำหนดค่าเริ่มต้นควรจะเพียงพอสำหรับกรณีส่วนใหญ่ แต่ก็เป็นความคิดที่ดีที่จะทำความคุ้นเคยกับตัวเลือกทั้งหมดที่มีอยู่ตามที่อธิบายไว้ในเอกสารอย่างเป็นทางการ
และเช่นเคย ให้สำรองไฟล์การกำหนดค่าหลักก่อนทำการแก้ไข:
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)
จากนั้นเปิดด้วยโปรแกรมแก้ไขข้อความที่คุณต้องการและค้นหาตัวแปรต่อไปนี้:
- ServerRoot: ไดเรกทอรีที่เก็บการกำหนดค่า ข้อผิดพลาด และไฟล์บันทึกของเซิร์ฟเวอร์
- ฟัง: สั่งให้ Apache ฟังที่อยู่ IP และ/หรือพอร์ตเฉพาะ
- รวม: อนุญาตให้รวมไฟล์การกำหนดค่าอื่นๆ ซึ่งต้องมีอยู่ มิฉะนั้น เซิร์ฟเวอร์จะล้มเหลว ตรงข้ามกับคำสั่ง includeOptional ซึ่งจะถูกละเว้นโดยไม่โต้ตอบหากไม่มีไฟล์คอนฟิกูเรชันที่ระบุ
- ผู้ใช้และกลุ่ม: ชื่อของผู้ใช้/กลุ่มที่จะเรียกใช้บริการ httpd
- DocumentRoot: ไดเรกทอรีที่ Apache จะใช้ให้บริการเอกสารของคุณ ตามค่าเริ่มต้น คำขอทั้งหมดจะมาจากไดเร็กทอรีนี้ แต่ลิงก์สัญลักษณ์และนามแฝงอาจใช้เพื่อชี้ไปยังตำแหน่งอื่น
- ชื่อเซิร์ฟเวอร์: คำสั่งนี้จะตั้งชื่อโฮสต์ (หรือที่อยู่ IP) และพอร์ตที่เซิร์ฟเวอร์ใช้เพื่อระบุตัวเอง
มาตรการรักษาความปลอดภัยขั้นแรกจะประกอบด้วยการสร้างผู้ใช้และกลุ่มเฉพาะ (เช่น tecmint/tecmint) เพื่อเรียกใช้เว็บเซิร์ฟเวอร์และเปลี่ยนพอร์ตเริ่มต้นเป็นพอร์ตที่สูงกว่า (< แข็งแกร่ง>9000 ในกรณีนี้):
ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000
คุณสามารถทดสอบไฟล์กำหนดค่าด้วย
apachectl configtest
และหากทุกอย่างตกลง ให้รีสตาร์ทเว็บเซิร์ฟเวอร์
systemctl restart httpd
และอย่าลืมเปิดใช้งานพอร์ตใหม่ (และปิดการใช้งานพอร์ตเก่า) ในไฟร์วอลล์:
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
โปรดทราบว่าเนื่องจากนโยบาย SELinux คุณสามารถใช้ได้เฉพาะพอร์ตที่ส่งคืนมาเท่านั้น
semanage port -l | grep -w '^http_port_t'
สำหรับเว็บเซิร์ฟเวอร์
หากคุณต้องการใช้พอร์ตอื่น (เช่น พอร์ต TCP 8100) คุณจะต้องเพิ่มพอร์ตนั้นลงในบริบทพอร์ต SELinux สำหรับบริการ httpd:
semanage port -a -t http_port_t -p tcp 8100
เพื่อรักษาความปลอดภัยการติดตั้ง Apache ของคุณเพิ่มเติม ให้ทำตามขั้นตอนเหล่านี้:
1. ผู้ใช้ Apache ทำงานเนื่องจากไม่ควรมีสิทธิ์เข้าถึงเชลล์:
usermod -s /sbin/nologin tecmint
2. ปิดการใช้งานรายการไดเรกทอรีเพื่อป้องกันไม่ให้เบราว์เซอร์แสดงเนื้อหาของไดเรกทอรีหากไม่มี index.html อยู่ในไดเรกทอรีนั้น
แก้ไข /etc/httpd/conf/httpd.conf
(และไฟล์การกำหนดค่าสำหรับโฮสต์เสมือน ถ้ามี) และตรวจสอบให้แน่ใจว่าคำสั่ง ตัวเลือก ทั้งที่ด้านบนและ ที่ระดับบล็อกไดเรกทอรี ตั้งค่าเป็น ไม่มี:
Options None
3. ซ่อนข้อมูลเกี่ยวกับเว็บเซิร์ฟเวอร์และระบบปฏิบัติการในการตอบกลับ HTTP แก้ไข /etc/httpd/conf/httpd.conf
ดังนี้:
ServerTokens Prod
ServerSignature Off
ตอนนี้คุณพร้อมที่จะเริ่มให้บริการเนื้อหาจากไดเร็กทอรี /var/www/html ของคุณแล้ว
การกำหนดค่าและการรักษาความปลอดภัยเซิร์ฟเวอร์ FTP
เช่นเดียวกับในกรณีของ Apache ไฟล์การกำหนดค่าหลักสำหรับ Vsftpd (/etc/vsftpd/vsftpd.conf)
ได้รับการแสดงความคิดเห็นอย่างดี และในขณะที่การกำหนดค่าเริ่มต้นควรจะเพียงพอสำหรับแอปพลิเคชันส่วนใหญ่ คุณควรทำความคุ้นเคยกับเอกสารประกอบและ man page (man vsftpd.conf)
เพื่อใช้งานเซิร์ฟเวอร์ ftp ได้อย่างมีประสิทธิภาพมากขึ้น (ฉันเน้นย้ำไม่พอ!)
ในกรณีของเรา นี่คือคำสั่งที่ใช้:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
เมื่อใช้ chroot_local_user=YES
ผู้ใช้ภายในจะถูก (โดยค่าเริ่มต้น) อยู่ในคุก chroot'ed ในโฮมไดเร็กตอรี่ทันทีหลังจากเข้าสู่ระบบ ซึ่งหมายความว่าผู้ใช้ภายในจะไม่สามารถเข้าถึงไฟล์ใด ๆ ที่อยู่นอกโฮมไดเร็กทอรีที่เกี่ยวข้องได้
สุดท้าย หากต้องการอนุญาตให้ ftp อ่านไฟล์ในโฮมไดเร็กตอรี่ของผู้ใช้ ให้ตั้งค่าบูลีน SELinux ต่อไปนี้:
setsebool -P ftp_home_dir on
ตอนนี้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ ftp โดยใช้ไคลเอนต์เช่น Filezilla:
โปรดทราบว่าบันทึก /var/log/xferlog
จะบันทึกการดาวน์โหลดและอัพโหลด ซึ่งสอดคล้องกับรายการไดเรกทอรีด้านบน:
อ่านเพิ่มเติม: จำกัดแบนด์วิดท์เครือข่าย FTP ที่ใช้โดยแอปพลิเคชันในระบบ Linux ด้วย Trickle
สรุป
ในบทช่วยสอนนี้ เราได้อธิบายวิธีการตั้งค่าเว็บและเซิร์ฟเวอร์ ftp เนื่องจากหัวข้อนี้มีเนื้อหามากมาย จึงไม่สามารถครอบคลุมทุกแง่มุมของหัวข้อเหล่านี้ได้ (เช่น โฮสต์เว็บเสมือน) ดังนั้นฉันขอแนะนำให้คุณตรวจสอบบทความที่ยอดเยี่ยมอื่น ๆ ในเว็บไซต์นี้เกี่ยวกับ Apache