Ubah Apache httpd "Server:" HTTP header

33

Salah satu tajuk HTTP yang dikirimkan kembali oleh Apachehttpd dengan data respons adalah "Server". Sebagai contoh, mesin server web saya relatif Arch Linux terbaru. Ini mengirim kembali header mirip dengan yang berikut:

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

Saya sudah ServerSignature offmasuk /etc/httpd/conf/httpd.conf, tetapi tajuk "Server:" masih muncul. Saya telah bereksperimen dengan mod_headers . Saya sudah mengaktifkannya, dan saya sudah mencoba beberapa hal:

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

Setelah berhenti dan mulai httpddengan konfigurasi di atas, header HTTP menyertakan sesuatu seperti ProcessingTime: 1523, tetapi baris header "Server:" tetap tidak berubah. Jadi saya tahu bahwa "mod_headers" diinstal dan diaktifkan, dan berfungsi, tetapi tidak seperti yang saya inginkan.

Saya melihat bahwa sesuatu yang disebut "mod_security" mengklaim untuk melakukan ini, tetapi saya tidak ingin semua bagasi yang dibawa mod_security bersamanya.

MEMPERBARUI:

Setelah Anda mod_securitymenginstal, Anda hanya perlu beberapa arahan:

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

Itu untuk mod_security2.7.7

Bruce Ediger
sumber
3
Sudahkah Anda me-restart apache sejak mengubah file conf? Juga saya belum pernah melihat file yang disebut 'httpd.com', biasanya ini disebut 'httpd.conf'.
Michael Ozeryansky
@MichaelOzeryansky - terima kasih telah menangkap kesalahan ejaannya. Ini adalah "httpd.conf" Saya berhenti dan mulai httpd setelah mengubah httpd.conf.
Bruce Ediger

Jawaban:

12

Header ID server / token dikendalikan oleh direktif " ServerTokens " (disediakan oleh mod_core). Selain memodifikasi kode sumber Apache HTTPD, atau menggunakan mod_securitymodul, tidak ada cara lain untuk sepenuhnya menekan header ID server.

Dengan mod_securitypendekatan ini, Anda dapat menonaktifkan semua arahan / fungsi modul dalam modsecurity.conffile, dan hanya memanfaatkan arahan ID header server tanpa "bagasi" tambahan.

Chipster
sumber
Ini berhasil, terima kasih banyak. Saya harus mencatat bahwa mod_security bukan salah satu paket Arch Linux yang biasa. Ada PKGBUILD di AUR, tetapi belum diperbarui sejak 2011 (per 12 April 2014) dan merujuk pada versi mod_security yang sangat lama. Seperti biasa, distro Anda dapat bervariasi.
Bruce Ediger
25

mod_security sangat bagus, tetapi Anda tidak benar-benar membutuhkannya untuk mencapai tujuan Anda.

setelah semua mod disertakan, httpd.confAnda dapat dengan mudah menghapus header pilihan Anda.

Header unset Server

ServerSignature Off
ServerTokens Prod

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

Matt Ryan
sumber
2
mod_sec diperlukan untuk teks khusus untuk menyembunyikan sepenuhnya apache kerja jika tidak solusi Anda baik dan sederhana :)
intika
Ini tidak berpengaruh bagi saya menggunakan Apache 2.2 (ditambal) pada Centos 6.
jph
1
Di Apache 2.4, dilaporkan sebagai kesalahan Sintaks: Perintah 'Header' tidak valid, mungkin salah eja atau ditentukan oleh modul yang tidak termasuk dalam konfigurasi server
Raptor
3
@Raptor Anda harus menginstal mod_headers dengansudo a2enmod headers
Ortomala Lokni
1
Header unset Servertidak berfungsi di Apache 2.2 dan 2.4. Header respons masih berisiServer: Apache
Maris B.
13

Hanya memperbarui ini untuk orang yang masih mencari. Saya mengalami masalah saat mengubah baris Server di header HTTP. Nasihat ini harus bekerja untuk distro cabang Debian dengan systemd dan Apache 2.4.7. Secara khusus, saya menggunakan Ubuntu Server LTS 14.04.03. Beberapa saran yang saya temukan adalah melakukan

grep -Ri servertokens /etc/apache2

Ini membawa saya ke /etc/apache2/conf-available/security.conf di mana ServerTokens dan ServerSignature ditentukan. Oleh karena itu, setiap perubahan yang saya lakukan pada /etc/apache2/apache2.conf sedang ditimpa oleh arahan yang telah ditentukan dalam security.conf.

Saya hanya mengubah arahan dalam security.conf dan Apache mulai bekerja seperti yang saya inginkan.

ServerTokens Prod
ServerSignature Off

Pada topik Header unset Server, saya menemukan laporan bug di mana Apache devs mengatakan itu adalah masalah tidak akan diperbaiki. Tampaknya bagi mereka itu adalah masalah filosofis, meskipun spesifikasi untuk HTTP / 1.1, RFC 2616 sebagian ditulis oleh Tim Berners-Lee, mengatakan bahwa tag Server adalah opsional.

Saya benar-benar ingin mengatur tag Server ke "Tidak Dikenal" untuk membuat pemindaian Qualys kami bahagia. Jadi, saya menginstal mod_security, sekarang disebut libapache2-modsecurity, mengikuti tutorial DigitalOcean ini . Semoga beruntung, saya harap saya membantu untuk Anda semua pembaca masa depan.

slmaq
sumber
1

Saya telah menguji sesuatu pada Oracle HTTP Server 11.1.1.9 (yang dibangun di atas Apache 2.2.22) yang bekerja untuk saya, sampai batas tertentu ..

Mengatur "ServerTokens" ke "tidak ada" tampaknya menghapus nilai header "Server", meskipun header itu sendiri terus dikirim dalam respons, tetapi sekarang memiliki nilai nol.

ServerTokens tidak ada

Header respons akan terlihat seperti ini:

HTTP / 1.1 200 OK

Tanggal: Senin, 28 Des 2015 07:02:45 GMT

Server:

Terakhir Diubah: Minggu, 27 Des 2015 07:29:13 GMT

.

.

Mohab Elsayed
sumber
2
Pada stok Apache 2.2, dari repositori Centos 6, menetapkan nilai "tidak ada" menyebabkan Apache mengeluarkan semua data. Contohnya: "Server: 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
setuju, Anda tidak dapat menggunakan nonedi Apache terbaru:ServerTokens takes 1 argument: 'Prod(uctOnly)', 'Major', 'Minor', 'Min(imal)', 'OS', or 'Full'
vladkras