คู่มือการชุบแข็งและการรักษาความปลอดภัย 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-market-share
ที่มา: Plumbr

ในทางเทคนิค คุณสามารถใช้ 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-server-header

มาซ่อนรายละเอียดผลิตภัณฑ์และเวอร์ชันจากส่วนหัวของเซิร์ฟเวอร์

  • ไปที่โฟลเดอร์ $tomcat/conf
  • แก้ไข server.xml โดยใช้ vi
  • เพิ่มการติดตามไปยัง Connector port
 Server =” “

อดีต: -

 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
  • บันทึกไฟล์และรีสตาร์ท Tomcat ตอนนี้ เมื่อคุณเข้าถึงแอปพลิเคชัน คุณควรเห็นค่าว่างสำหรับส่วนหัวของเซิร์ฟเวอร์
tomcat-removed-server-header

การเริ่มต้น 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>

ภาพหน้าจอการกำหนดค่า:

แมวตัวผู้-httponly

บันทึกไฟล์และรีสตาร์ท 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 เริ่มต้น

tomcat-default-404-page

เพื่อบรรเทา คุณสามารถสร้างหน้าข้อผิดพลาดทั่วไปและกำหนดค่า 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 เพื่อทดสอบ
tomcat-custom-error

ดีขึ้นมาก!

คุณสามารถทำได้สำหรับ 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 เพื่อหยุดถามรหัสผ่านระหว่างการปิดระบบที่นี่