คู่มือการชุบแข็งและการรักษาความปลอดภัย Apache Tomcat
เผยแพร่แล้ว: 2015-02-14คู่มือปฏิบัติในการเสริมความแข็งแกร่งและรักษาความปลอดภัยเซิร์ฟเวอร์ Apache Tomcat ด้วยแนวทางปฏิบัติที่ดีที่สุด
Tomcat เป็นหนึ่งในเซิร์ฟเวอร์ Servlet และ JSP Container ที่ได้รับความนิยมมากที่สุด ใช้โดยเว็บไซต์ที่มีการเข้าชมสูงต่อไปนี้:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
แผนภูมิด้านล่างแสดงตำแหน่งทางการตลาดของ Tomcat ในแอปพลิเคชันเซิร์ฟเวอร์ Java

ในทางเทคนิค คุณสามารถใช้ Tomcat เป็นเซิร์ฟเวอร์ส่วนหน้าเพื่อให้บริการคำขอของไซต์ได้โดยตรง อย่างไรก็ตาม ในสภาพแวดล้อมการใช้งานจริง คุณอาจต้องการใช้เว็บเซิร์ฟเวอร์บางตัว เช่น Apache, Nginx เป็น front-end เพื่อกำหนดเส้นทางคำขอไปยัง Tomcat
การใช้เว็บเซิร์ฟเวอร์เพื่อจัดการคำขอให้ประโยชน์ด้าน ประสิทธิภาพ และ ความปลอดภัย หากคุณกำลังใช้ Apache HTTP เป็นเว็บเซิร์ฟเวอร์ส่วนหน้า คุณต้องพิจารณาการรักษาความปลอดภัยด้วยเช่นกัน
การกำหนดค่าเริ่มต้นของ Tomcat อาจเปิดเผยข้อมูลที่ละเอียดอ่อน ซึ่งช่วยให้แฮกเกอร์เตรียมพร้อมสำหรับการโจมตีแอปพลิเคชัน
ต่อไปนี้ได้รับการทดสอบบนสภาพแวดล้อม Tomcat 7.x, UNIX
ผู้ชม
ซึ่งออกแบบมาสำหรับผู้ดูแลระบบมิดเดิลแวร์ การสนับสนุนแอปพลิเคชัน นักวิเคราะห์ระบบ หรือใครก็ตามที่ทำงานหรือกระตือรือร้นที่จะเรียนรู้ Tomcat Hardening and Security
จำเป็นต้องมีความรู้ที่ดีเกี่ยวกับคำสั่ง Tomcat & UNIX
หมายเหตุ
เราต้องการเครื่องมือบางอย่างเพื่อตรวจสอบ HTTP Headers สำหรับการตรวจสอบ มีสองวิธีที่คุณสามารถทำได้
หากกำลังทดสอบแอปพลิเคชัน ที่เชื่อมต่อกับอินเทอร์เน็ต คุณอาจใช้เครื่องมือส่วนหัว HTTP ต่อไปนี้เพื่อตรวจสอบการใช้งาน
- ตัวตรวจสอบส่วนหัว HTTP
- เป้าหมายของแฮ็กเกอร์
และสำหรับ แอปพลิเคชันอินทราเน็ต คุณสามารถใช้ Google Chrome, เครื่องมือสำหรับนักพัฒนา Firefox
ตามแนวทางปฏิบัติที่ดีที่สุด คุณต้อง สำรองข้อมูล ไฟล์ใดๆ ที่คุณกำลังจะแก้ไข
เราจะเรียกโฟลเดอร์การติดตั้ง Tomcat ว่า $tomcat ตลอดแนวทางนี้
มาดูขั้นตอนการชุบแข็งและการรักษาความปลอดภัยกัน
ลบแบนเนอร์เซิร์ฟเวอร์
การลบ Server Banner ออกจาก HTTP Header เป็นสิ่งแรกที่ต้องทำเพื่อเป็นการชุบแข็ง
การมีแบนเนอร์เซิร์ฟเวอร์แสดงผลิตภัณฑ์และเวอร์ชันที่คุณใช้และนำไปสู่ช่องโหว่ของข้อมูลรั่วไหล
โดยค่าเริ่มต้น หน้าที่ให้บริการโดย Tomcat จะแสดงเช่นนี้

มาซ่อนรายละเอียดผลิตภัณฑ์และเวอร์ชันจากส่วนหัวของเซิร์ฟเวอร์
- ไปที่โฟลเดอร์ $tomcat/conf
- แก้ไข server.xml โดยใช้ vi
- เพิ่มการติดตามไปยัง
Connector port
Server =” “
อดีต: -
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- บันทึกไฟล์และรีสตาร์ท Tomcat ตอนนี้ เมื่อคุณเข้าถึงแอปพลิเคชัน คุณควรเห็นค่าว่างสำหรับส่วนหัวของเซิร์ฟเวอร์

การเริ่มต้น Tomcat ด้วย Security Manager
ตัวจัดการความปลอดภัยปกป้องคุณจากแอปเพล็ตที่ไม่น่าเชื่อถือที่ทำงานอยู่ในเบราว์เซอร์ของคุณ
การรัน Tomcat ด้วยตัวจัดการความปลอดภัยนั้นดีกว่าการรันโดยไม่มีตัวจัดการ Tomcat มีเอกสารที่ยอดเยี่ยมเกี่ยวกับ Tomcat Security Manager
ข้อดีของสิ่งนี้คือคุณไม่จำเป็นต้องเปลี่ยนไฟล์การกำหนดค่าใดๆ เป็นเพียงวิธีที่คุณเรียกใช้ไฟล์ startup.sh
สิ่งที่คุณต้องทำคือเริ่ม tomcat ด้วยอาร์กิวเมนต์ –security
[root@geekflare bin]# ./startup.sh -security Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Using Security Manager Tomcat started. [root@geekflare bin]#
เปิดใช้งาน SSL/TLS
การให้บริการคำขอทางเว็บผ่าน HTTPS เป็นสิ่งสำคัญในการปกป้องข้อมูลระหว่างไคลเอนต์และ Tomcat เพื่อให้เว็บแอปพลิเคชันของคุณสามารถเข้าถึงได้ผ่าน HTTPS คุณต้องใช้ใบรับรอง SSL
สมมติว่าคุณมีที่เก็บคีย์พร้อมใบรับรองแล้ว คุณสามารถเพิ่มบรรทัดด้านล่างใน server.
xml ในส่วน Connector port
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
เปลี่ยนชื่อไฟล์ Keystore และรหัสผ่านของคุณ
หากคุณต้องการความช่วยเหลือเกี่ยวกับกระบวนการเก็บคีย์และ CSR โปรดอ่านคู่มือนี้
บังคับใช้ HTTPS
ใช้ได้เฉพาะเมื่อคุณเปิดใช้งาน SSL เท่านั้น ถ้าไม่เช่นนั้นจะทำให้แอปพลิเคชันเสียหาย
เมื่อคุณเปิดใช้งาน SSL แล้ว จะเป็นการดีที่จะบังคับให้เปลี่ยนเส้นทางคำขอ HTTP ทั้งหมดไปยัง HTTPS เพื่อการสื่อสารที่ปลอดภัยระหว่างผู้ใช้กับแอปพลิเคชันเซิร์ฟเวอร์ Tomcat
- ไปที่โฟลเดอร์ $tomcat/conf
- แก้ไข
web.xml
โดยใช้vi
- เพิ่มการติดตามก่อน
</web-app>
ไวยากรณ์
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
- บันทึกไฟล์และรีสตาร์ท Tomcat
เพิ่มการตั้งค่าสถานะ Secure & HttpOnly ให้กับคุกกี้
เป็นไปได้ที่จะขโมยหรือจัดการเซสชันแอปพลิเคชันเว็บและคุกกี้โดยไม่ต้องมีคุกกี้ที่ปลอดภัย เป็นแฟล็กที่ฉีดเข้าไปในส่วนหัวการตอบสนอง

ทำได้โดยการเพิ่มบรรทัดด้านล่างในส่วน session-config
ของไฟล์ web.xml
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
ภาพหน้าจอการกำหนดค่า:

บันทึกไฟล์และรีสตาร์ท Tomcat เพื่อตรวจสอบส่วนหัวการตอบสนอง HTTP
เรียกใช้ Tomcat จากบัญชีที่ไม่มีสิทธิพิเศษ
เป็นการดีที่จะใช้ผู้ใช้ที่ไม่มีสิทธิพิเศษแยกต่างหากสำหรับ Tomcat แนวคิดในที่นี้คือการปกป้องบริการอื่นๆ ที่ทำงานอยู่ในกรณีที่บัญชีใดบัญชีหนึ่งถูกบุกรุก
- สร้างผู้ใช้ UNIX สมมติว่า tomcat
useradd tomcat
- หยุด Tomcat ถ้าทำงาน
- เปลี่ยนความเป็นเจ้าของ $tomcat เป็นผู้ใช้ tomcat
chown -R tomcat:tomcat tomcat/
เริ่ม Tomcat และตรวจสอบให้แน่ใจว่ากำลังทำงานกับผู้ใช้ Tomcat
ลบแอปพลิเคชันเริ่มต้น/ไม่ต้องการออก
ตามค่าเริ่มต้น Tomcat มาพร้อมกับเว็บแอปพลิเคชันต่อไปนี้ ซึ่งอาจจำเป็นหรือไม่จำเป็นในสภาพแวดล้อมที่ใช้งานจริง
คุณสามารถลบออกได้เพื่อรักษาความสะอาดและหลีกเลี่ยงความเสี่ยงด้านความปลอดภัยที่ทราบด้วยแอปพลิเคชันเริ่มต้นของ Tomcat
- ROOT – หน้าต้อนรับเริ่มต้น
- เอกสาร – เอกสาร Tomcat
- ตัวอย่าง – JSP และเซิร์ฟเล็ตสำหรับการสาธิต
- ผู้จัดการ ผู้จัดการโฮสต์ – การบริหาร Tomcat
มีอยู่ในโฟลเดอร์ $tomcat/webapps
[root@geekflare webapps]# ls -lt drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT [root@geekflare webapps]#
เปลี่ยนพอร์ต SHUTDOWN และ Command
ตามค่าเริ่มต้น Tomcat ถูกกำหนดค่าให้ปิดบนพอร์ต 8005
คุณรู้หรือไม่ว่าคุณสามารถปิดอินสแตนซ์ของ tomcat โดยทำ telnet to IP: port และออกคำสั่ง SHUTDOWN
Chandans # telnet localhost 8005 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SHUTDOWN Connection closed by foreign host. Chandans #
อันตราย!
คุณเห็นไหมว่าการกำหนดค่าเริ่มต้นทำให้เกิดความเสี่ยงด้านความปลอดภัยสูง
ขอแนะนำให้เปลี่ยนพอร์ตการปิดระบบของ Tomcat และคำสั่งเริ่มต้นเป็นสิ่งที่คาดเดาไม่ได้
- แก้ไขสิ่งต่อไปนี้ใน server.xml
<Server port="8005" shutdown="SHUTDOWN">
8005 – เปลี่ยนเป็นพอร์ตอื่นที่ไม่ได้ใช้งาน
การปิดระบบ – เปลี่ยนเป็นบางสิ่งที่ซับซ้อน
อดีต-
<Server port="8867" shutdown="NOTGONNAGUESS">
แทนที่ค่าเริ่มต้น 404, 403, 500 หน้า
การมีหน้าเริ่มต้นสำหรับข้อผิดพลาดที่ไม่พบ ห้าม เซิร์ฟเวอร์จะเปิดเผยรายละเอียดเวอร์ชัน
ลองดูที่หน้า 404 เริ่มต้น

เพื่อบรรเทา คุณสามารถสร้างหน้าข้อผิดพลาดทั่วไปและกำหนดค่า web.xml เพื่อเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดทั่วไป
- ไปที่ $tomcat/webapps/$application
- สร้างไฟล์ error.jsp โดยใช้
vi
editor
<html> <head> <title>หน้าแสดงข้อผิดพลาด</title> </head> <ร่างกาย> ผิดพลาด! </body> </html>
- ไปที่โฟลเดอร์ $tomcat/conf
- เพิ่มสิ่งต่อไปนี้ในไฟล์ web.xml ให้แน่ใจว่าคุณเพิ่มก่อน
</web-app>
ไวยากรณ์
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>403</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page>
- รีสตาร์ทเซิร์ฟเวอร์ Tomcat เพื่อทดสอบ

ดีขึ้นมาก!
คุณสามารถทำได้สำหรับ java.lang.Exception
เช่นกัน สิ่งนี้จะช่วยในการไม่เปิดเผยข้อมูลเวอร์ชันของ Tomcat หากมีข้อยกเว้น java lang
เพียงเพิ่มการติดตามใน web.xml
และรีสตาร์ทเซิร์ฟเวอร์ Tomcat
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
ฉันหวังว่าคำแนะนำข้างต้นจะช่วยให้คุณมีแนวคิดในการรักษาความปลอดภัย Tomcat หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการดูแลระบบ Tomcat ลองดูหลักสูตรออนไลน์นี้
เรียนรู้วิธีกำหนดค่า WAS เพื่อหยุดถามรหัสผ่านระหว่างการปิดระบบที่นี่