เปลี่ยน Apache httpd“ เซิร์ฟเวอร์:” ส่วนหัว HTTP


33

หนึ่งในส่วนหัว HTTP ที่Apachehttpdส่งกลับมาพร้อมกับข้อมูลการตอบกลับคือ "เซิร์ฟเวอร์" ตัวอย่างเช่นเครื่องเว็บเซิร์ฟเวอร์ของฉันเป็น Arch Linux ที่ค่อนข้างทันสมัย มันส่งกลับส่วนหัวคล้ายคล้ายต่อไปนี้:

HTTP/1.1 404 Not Found
Date: Thu, 10 Apr 2014 17:19:27 GMT
Server: Apache/2.4.9 (Unix)
Content-Length: 1149
Connection: close
Content-Type: text/html

ฉันมีServerSignature offใน/etc/httpd/conf/httpd.confแต่ "เซิร์ฟเวอร์:" ส่วนหัวยังคงปรากฏ ฉันได้ทดลองกับ mod_headers ฉันเปิดใช้งานแล้วและฉันลองทำบางสิ่ง:

<IfModule headers_module>
Header set ProcessingTime "%D"
Header set Server BigJohn
</IfModule>

หลังจากหยุดและเริ่ม httpdด้วยการกำหนดค่าข้างต้นส่วนหัว HTTP จะมีบางอย่างที่เหมือนProcessingTime: 1523กัน แต่บรรทัดส่วนหัว "เซิร์ฟเวอร์:" ยังคงไม่เปลี่ยนแปลง ดังนั้นฉันจึงรู้ว่า "mod_headers" ได้รับการติดตั้งและเปิดใช้งานและทำงานได้ แต่ไม่ใช่ตามที่ฉันต้องการ

ฉันเห็นสิ่งที่เรียกว่า "mod_security" อ้างว่าทำสิ่งนี้ แต่ฉันไม่ต้องการให้ส่วนที่เหลือทั้งหมดของกระเป๋าที่ mod_security ดำเนินการอยู่

UPDATE:

เมื่อคุณได้รับการmod_securityติดตั้งแล้วคุณจะต้องมีเพียงไม่กี่คำสั่ง:

<IfModule security2_module>
SecRuleEngine on
ServerTokens Full
SecServerSignature "Microsoft-IIS/6.0"
</IfModule>

นั่นคือmod_security2.7.7


3
คุณรีสตาร์ท apache ตั้งแต่เปลี่ยนไฟล์ conf หรือไม่? นอกจากนี้ฉันไม่เคยเห็นไฟล์ชื่อ 'httpd.com' ซึ่งมักเรียกว่า 'httpd.conf'
Michael Ozeryansky

@MichaelOzeryansky - ขอบคุณที่ติดตามการสะกดคำผิด เป็น "httpd.conf" ฉันจะหยุดและเริ่ม httpd หลังจากเปลี่ยน httpd.conf
Bruce Ediger

คำตอบ:


12

ส่วนหัว ID เซิร์ฟเวอร์ / โทเค็นถูกควบคุมโดย "คำสั่ง " ServerTokens " (ให้บริการโดยmod_core) นอกเหนือจากการแก้ไขซอร์สโค้ด Apache HTTPD หรือการใช้mod_securityโมดูลไม่มีวิธีอื่นใดที่จะครบถ้วนปราบปรามส่วนหัวของเซิร์ฟเวอร์ประจำตัวประชาชน

กับ mod_securityวิธีการนี้คุณสามารถปิดการใช้งานคำสั่ง / ฟังก์ชั่นของโมดูลทั้งหมดในmodsecurity.confไฟล์และใช้ประโยชน์จากคำสั่ง ID ส่วนหัวของเซิร์ฟเวอร์โดยไม่มี "สัมภาระ" เพิ่มเติม


มันใช้งานได้ดีขอบคุณมาก ฉันต้องทราบว่า mod_security ไม่ใช่แพ็คเกจปกติของ Arch Linux มี PKGBUILD ใน AUR แต่ไม่ได้อัปเดตตั้งแต่ปี 2011 (จนถึงวันที่ 12 เมษายน 2014) และอ้างอิงถึง mod_security รุ่นเก่าจริงๆ เช่นเคย distro ของคุณอาจแตกต่างกันไป
Bruce Ediger

25

mod_security นั้นยอดเยี่ยม แต่คุณไม่ต้องการมันเพื่อให้บรรลุเป้าหมาย

หลังจาก mods ทั้งหมดรวมอยู่ในhttpd.confคุณสามารถยกเลิกการตั้งค่าส่วนหัวที่คุณเลือก

Header unset Server

ServerSignature Off
ServerTokens Prod

http://httpd.apache.org/docs/2.4/mod/core.html#serversignature


2
mod_sec เป็นสิ่งจำเป็นสำหรับข้อความที่กำหนดเองเพื่อซ่อนสมบูรณ์ทำงาน Apache มิฉะนั้นการแก้ปัญหาของคุณเป็นสิ่งที่ดีและง่าย :)
intika

สิ่งนี้ไม่มีผลกับฉันโดยใช้ Apache 2.2 (patched) บน Centos 6
jph

1
ใน Apache 2.4 มีรายงานว่าเป็นข้อผิดพลาดทางไวยากรณ์: คำสั่งไม่ถูกต้อง 'ส่วนหัว' อาจถูกสะกดผิดหรือกำหนดโดยโมดูลที่ไม่รวมอยู่ในการกำหนดค่าเซิร์ฟเวอร์
Raptor

3
@Raptor คุณต้องติดตั้งmod_headersด้วยsudo a2enmod headers
Ortomala Lokni

1
Header unset Serverไม่ทำงานใน Apache 2.2 และ 2.4 ส่วนหัวของคำตอบยังคงมีServer: Apache
Maris B.

13

เพียงอัปเดตสิ่งนี้สำหรับผู้ที่ยังคงมองหาอยู่ ฉันมีปัญหาในการรับบรรทัดเซิร์ฟเวอร์ในส่วนหัว HTTP เปลี่ยนแปลง คำแนะนำนี้ควรใช้กับดิสทริบิวชัน distros ของเดเบียนด้วย systemd และ Apache 2.4.7 โดยเฉพาะฉันใช้ Ubuntu Server LTS 14.04.03 คำแนะนำบางอย่างที่ฉันพบคือต้องทำ

grep -Ri servertokens /etc/apache2

สิ่งนี้ทำให้ฉันไปที่ /etc/apache2/conf-available/security.conf โดยที่ทั้ง ServerTokens และ ServerSignature ถูกระบุ ดังนั้นการเปลี่ยนแปลงใด ๆ ที่ฉันทำกับ /etc/apache2/apache2.conf จึงถูกเขียนทับโดยคำสั่งที่ระบุไว้ใน security.conf แล้ว

ฉันเพียงแค่เปลี่ยนคำสั่งใน security.conf และ Apache เริ่มทำงานตามที่ฉันต้องการ

ServerTokens Prod
ServerSignature Off

ในหัวข้อ Header unset Server ฉันพบรายงานข้อผิดพลาดที่ Apache devs บอกว่าเป็นปัญหาที่จะไม่แก้ไข เห็นได้ชัดว่ามันเป็นประเด็นทางปรัชญาแม้จะมีข้อกำหนดสำหรับ HTTP / 1.1, RFC 2616 ที่เขียนโดย Tim Berners-Lee บางส่วนกล่าวว่าแท็กเซิร์ฟเวอร์เป็นตัวเลือก

ฉันต้องการตั้งค่าแท็กเซิร์ฟเวอร์เป็น "ไม่ทราบ" เพื่อให้ Qualys ของเราสแกนมีความสุข ดังนั้นฉันจึงติดตั้ง mod_security ตอนนี้เรียกว่า libapache2-modsecurity ตามบทเรียนการสอน DigitalOceanนี้ ขอให้โชคดีฉันหวังว่าฉันจะช่วยให้คุณผู้อ่านทุกคนในอนาคต


1

ฉันได้ทดสอบบางอย่างบน Oracle HTTP Server 11.1.1.9 (ซึ่งสร้างขึ้นบน Apache 2.2.22) ที่เหมาะกับฉันในระดับหนึ่ง ..

การตั้งค่า "ServerTokens" เป็น "none" ดูเหมือนว่าจะลบค่า "Server" ถึงแม้ว่าส่วนหัวของตัวเองจะถูกส่งในการตอบสนอง แต่ตอนนี้มันมีค่า null

เซิร์ฟเวอร์บอกว่าไม่มี

ส่วนหัวการตอบสนองจะมีลักษณะเช่นนี้:

HTTP / 1.1 200 ตกลง

วันที่: จันทร์, 28 ธันวาคม 2558 07:02:45 GMT

เซิร์ฟเวอร์:

ปรับเปลี่ยนครั้งล่าสุด: วันอาทิตย์, 27 ธันวาคม 2558 07:29:13 GMT

.

.


2
บนหุ้น Apache 2.2 จาก Centos 6 repos การตั้งค่า "none" ทำให้ Apache ส่งออกข้อมูลทั้งหมด ตัวอย่างเช่น: "เซิร์ฟเวอร์: Apache / 2.2.15 (CentOS) DAV / 2 PHP / 5.3.3 mod_ssl / 2.2.15 OpenSSL / 1.0.1e-fips Phusion_Passenger / 4.0.59 mod_perl / 2.0.4 Perl / v5.10.1"
jph

เห็นด้วยคุณไม่สามารถใช้noneกับ Apache ล่าสุด:ServerTokens takes 1 argument: 'Prod(uctOnly)', 'Major', 'Minor', 'Min(imal)', 'OS', or 'Full'
vladkras
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.