13 Apache Web Server Security ug Hardening Tips


Kitang tanan pamilyar kaayo sa Apache web server, kini usa ka sikat kaayo nga web server nga mag-host sa imong mga web file o sa imong website sa web. Ania ang pipila ka mga link nga makatabang kanimo sa pag-configure sa Apache web server sa imong Linux box.

  1. I-install ang Apache Web Server
  2. I-set up ang Imong Website sa Imong Linux Box

Dinhi sa kini nga panudlo, tabonan nako ang pipila nga mga panguna nga tip aron masiguro ang imong web server. Sa dili pa nimo i-apply kini nga mga pagbag-o sa imong web server, kinahanglan nga adunay pipila ka mga sukaranan sa Apache server.

  1. Dokumentong gamut nga Direktoryo: /var/www/html o /var/www
  2. Main Configuration file: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) ug /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Default nga HTTP Port: 80 TCP
  4. Default nga HTTPS Port: 443 TCP
  5. Sulayi ang imong Configuration file settings ug syntax: httpd -t
  6. Access Log files sa Web Server: /var/log/httpd/access_log
  7. Error Log files sa Web Server: /var/log/httpd/error_log

1. Unsaon pagtago sa Apache Version ug OS Identity gikan sa Errors

Kung imong gi-install ang Apache nga adunay gigikanan o bisan unsang ubang mga installer sa package sama sa yum, gipakita niini ang bersyon sa imong Apache web server nga na-install sa imong server nga adunay ngalan sa Operating system sa imong server sa Errors. Gipakita usab niini ang kasayuran bahin sa mga module sa Apache nga na-install sa imong server.

Sa ibabaw nga hulagway, imong makita nga ang Apache nagpakita sa iyang bersyon sa OS nga na-install sa imong server. Mahimo kini nga usa ka dakong hulga sa seguridad sa imong web server ingon man usab sa imong Linux box. Aron mapugngan ang Apache nga dili ipakita kini nga kasayuran sa kalibutan, kinahanglan namon nga maghimo pipila ka mga pagbag-o sa Apache main configuration file.

Ablihi ang configuration file gamit ang vim editor ug pangitaa ang ServerSignature, kini pinaagi sa default On. Kinahanglan namon nga I-off kini nga pirma sa server ug ang ikaduhang linya nga ServerTokens Prod nagsulti sa Apache nga ibalik lamang ang Apache isip produkto sa header sa pagtubag sa server sa matag hangyo sa panid, Gipugngan niini ang OS, mayor ug menor nga bersyon nga impormasyon.

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

2. I-disable ang Listahan sa Direktoryo

Pinaagi sa default gilista sa Apache ang tanan nga sulud sa direktoryo sa gamut sa Dokumento kung wala ang index file. Palihug tan-awa ang hulagway sa ubos.

Mahimo natong i-off ang listahan sa direktoryo pinaagi sa paggamit sa Options directive sa configuration file alang sa usa ka piho nga direktoryo. Alang niana kinahanglan namon nga maghimo usa ka entry sa httpd.conf o apache2.conf file.

<Directory /var/www/html>
    Options -Indexes
</Directory>

3. Padayon sa pag-update sa Apache Regular

Ang komunidad sa developer sa Apache padayon nga nagtrabaho sa mga isyu sa seguridad ug nagpagawas sa gi-update nga bersyon niini nga adunay bag-ong mga kapilian sa seguridad. Busa Kanunay nga girekomenda nga gamiton ang pinakabag-o nga bersyon sa Apache isip imong web server.

Aron masusi ang bersyon sa Apache: Mahimo nimong susihon ang imong kasamtangan nga bersyon gamit ang httpd -v command.

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

Mahimo nimong i-update ang imong bersyon gamit ang mosunod nga sugo.

# yum update httpd
# apt-get install apache2

Girekomenda usab nga ipadayon ang imong Kernel ug OS nga na-update sa pinakabag-o nga stable nga pagpagawas kung wala ka nagpadagan sa bisan unsang piho nga aplikasyon nga magamit lamang sa piho nga OS o Kernel.

4. I-disable ang Dili Kinahanglan nga mga Module

Kanunay nga maayo nga gamay ang mga kahigayonan nga mahimong biktima sa bisan unsang pag-atake sa web. Mao nga girekomenda nga i-disable ang tanan nga mga module nga wala gigamit karon. Mahimo nimong ilista ang tanan nga gihugpong nga mga module sa web server, gamit ang pagsunod sa mando.

# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
....

Sa ibabaw mao ang lista sa mga modules nga gi-enable sa default apan kasagaran dili kinahanglan: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Aron ma-disable ang partikular nga module, mahimo nimong isulod ang \# sa sinugdanan sa kana nga linya ug i-restart ang serbisyo.

5. Dagan ang Apache isip bulag nga Gumagamit ug Grupo

Uban sa usa ka default nga pag-install ang Apache nagpadagan sa proseso niini sa wala’y tiggamit o daemon. Alang sa mga hinungdan sa seguridad girekomenda nga ipadagan ang Apache sa kaugalingon nga dili pribilihiyo nga account. Pananglitan: http-web.

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

Karon kinahanglan nimo nga sultihan ang Apache nga modagan uban niining bag-ong tiggamit ug aron mahimo kini, kinahanglan namon nga maghimo usa ka entry sa /etc/httpd/conf/httpd.conf ug i-restart ang serbisyo.

Ablihi ang /etc/httpd/conf/httpd.conf gamit ang vim editor ug pangitaa ang keyword nga User ug Group ug didto kinahanglan nimong ipiho ang username ug groupname nga gamiton.

User http-web
Group http-web

6. Gamita ang Allow ug Deny to Restrict access to Directories

Mahimo natong pugngan ang pag-access sa mga direktoryo nga adunay Allow ug Deny nga mga kapilian sa httpd.conf file. Dinhi niini nga panig-ingnan, atong masiguro ang gamut nga direktoryo, alang niana pinaagi sa pagtakda sa mosunod sa httpd.conf file.

<Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>

  1. Mga Opsyon “Wala” – Kini nga opsyon dili motugot sa mga tiggamit sa bisan unsang opsyonal nga mga bahin.
  2. Order deny, allow – Kini ang han-ay diin ang “Deny” ug “Allow” nga mga direktiba iproseso. Dinhi kini magdumili una ug motugot sa sunod.
  3. Deny from all – Kini mobalibad sa hangyo gikan sa tanan ngadto sa root directory, walay maka-access sa root directory.

7. Gamita ang mod_security ug mod_evasive nga mga Module sa Pag-secure sa Apache

Kining duha ka modules nga mod_security ug mod_evasive sikat kaayo nga modules sa Apache sa termino sa seguridad.

Diin ang mod_security naglihok isip firewall para sa among mga web application ug nagtugot kanamo sa pagmonitor sa trapiko sa tinuod nga panahon. Nakatabang usab kini kanamo nga mapanalipdan ang among mga website o web server gikan sa mga pag-atake sa brute force. Mahimo nimong i-install lang ang mod_security sa imong server sa tabang sa imong default nga mga installer sa package.

$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
# yum install mod_security
# /etc/init.d/httpd restart

Ang mod_evasive epektibo kaayo, nagkinahanglan kini og usa ka hangyo aron maproseso ug maproseso kini pag-ayo. Gipugngan niini ang mga pag-atake sa DDOS gikan sa paghimo sa daghang kadaot. Kini nga bahin sa mod_evasive makapahimo niini sa pagdumala sa HTTP brute force ug Dos o DDos nga pag-atake. Kini nga module nakamatikod sa mga pag-atake sa tulo ka mga pamaagi.

  1. Kon daghan kaayong mga hangyo ang moabot sa samang panid sa pipila ka higayon matag segundo.
  2. Kung adunay bata nga nagproseso nga mosulay sa paghimo og labaw sa 50 ka dungan nga mga hangyo.
  3. Kung adunay IP nga nagsulay pa sa paghimo ug bag-ong mga hangyo kung kini temporaryo nga gi-blacklist.

Ang mod_evasive mahimong ma-install direkta gikan sa gigikanan. Dinhi, kami adunay usa ka giya sa Pag-install ug pag-setup sa kini nga mga module nga makatabang kanimo sa pag-set up niini nga mga module sa Apache sa imong kahon sa Linux.

  1. Panalipod sa Apache gamit ang Mod_Security ug Mod_evasive

8. I-disable ang pagsunod sa Apache sa Symbolic Links

Sa kasagaran ang Apache nagsunod sa mga symlink, mahimo natong i-off kini nga feature gamit ang FollowSymLinks nga adunay Options nga direktiba. Ug aron mahimo kini kinahanglan namon nga himuon ang mosunud nga entry sa main configuration file.

Options -FollowSymLinks

Ug, kung adunay bisan unsang partikular nga user o website nga kinahanglan ang FollowSymLinks nga mahimo, mahimo ra namon isulat ang usa ka lagda sa .htaccess nga file gikan sa kana nga website.

# Enable symbolic links
Options +FollowSymLinks

Mubo nga sulat: Aron makahimo sa pagsulat pag-usab sa mga lagda sulod sa .htaccess nga file AllowOverride All kinahanglan nga anaa sa nag-unang configuration sa tibuok kalibutan.

9. I-off ang Server Side Includes ug CGI Execution

Mahimo natong i-off ang server side naglakip sa (mod_include) ug CGI execution kung dili gikinahanglan ug aron mahimo kini kinahanglan natong usbon ang main configuration file.

Options -Includes
Options -ExecCGI

Mahimo namon kini alang sa usa ka partikular nga direktoryo usab nga adunay tag nga Direktoryo. Dinhi Sa kini nga pananglitan, gipalong namon ang mga Naglakip ug Cgi file nga mga pagpatay alang sa /var/www/html/web1 nga direktoryo.

<Directory "/var/www/html/web1">
Options -Includes -ExecCGI
</Directory>

Ania ang pipila ka ubang mga kantidad nga mahimong i-on o i-off gamit ang direktiba sa Opsyon.

  1. Mga Opsyon Tanan - Aron mahimo ang Tanan nga mga kapilian sa usa ka higayon. Kini ang default nga kantidad, Kung dili nimo gusto nga ipiho ang bisan unsang mga kantidad nga klaro sa Apache conf file o .htaccess.
  2. Mga Opsyon NaglakipNOEXEC – Kini nga opsyon nagtugot sa server side nga naglakip nga walay pagtugot sa usa ka command o cgi files.
  3. Mga Opsyon nga MultiViews – Gitugotan ang sulod nga negotiated multiview nga adunay mod_negotiation module.
  4. Mga Opsyon SymLinksIfOwnerMatch – Parehas kini sa FollowSymLinks. Apan, mosunod lang kini kung ang tag-iya parehas sa taliwala sa link ug sa orihinal nga direktoryo diin kini gisumpay.

10. Limitahan ang Gidak-on sa Gihangyo

Sa default wala'y limitasyon ang Apache sa kinatibuk-ang gidak-on sa HTTP request ie unlimited ug kung tugutan nimo ang dagkong mga hangyo sa web server posible nga mahimo kang biktima sa Denial of service attacks. Mahimo natong Limitahan ang gidak-on sa mga hangyo sa usa ka direktiba sa Apache nga LimitRequestBody nga adunay tag nga direktoryo.

Mahimo nimong itakda ang kantidad sa mga byte gikan sa 0 (walay limitasyon) hangtod sa 2147483647 (2GB) nga gitugotan sa usa ka lawas sa hangyo. Mahimo nimong itakda kini nga limitasyon sumala sa mga panginahanglanon sa imong site, Pananglit adunay usa ka site diin gitugotan nimo ang mga pag-upload ug gusto nimo limitahan ang gidak-on sa pag-upload alang sa usa ka partikular nga direktoryo.

Dinhi niini nga pananglitan, ang user_uploads usa ka direktoryo nga adunay mga file nga gi-upload sa mga tiggamit. Nagbutang kami ug limitasyon nga 500K alang niini.

<Directory "/var/www/myweb1/user_uploads">
   LimitRequestBody 512000
</Directory>

11. Panalipdi ang mga pag-atake sa DDOS ug Pagpagahi

Aw, tinuod nga dili nimo hingpit nga mapanalipdan ang imong web site gikan sa mga pag-atake sa DDos. Ania ang pipila ka mga direktiba nga makatabang kanimo nga makontrol kini.

  1. TimeOut : Kini nga direktiba nagtugot kanimo sa pagtakda sa gidugayon sa panahon nga ang server maghulat alang sa pipila ka mga panghitabo nga makompleto sa dili pa kini mapakyas. Ang default nga kantidad niini mao ang 300 ka segundo. Maayo nga ipaubos kini nga kantidad sa mga site nga naa sa mga pag-atake sa DDOS. Kini nga bili hingpit nga nagdepende sa matang sa hangyo nga imong makuha sa imong website. Mubo nga sulat: Mahimong maghatag kini og mga problema sa umaabot nga mga CGI script.
  2. MaxClients : Kini nga direktiba nagtugot kanimo sa pagtakda sa limitasyon sa mga koneksyon nga dungan nga isilbi. Ang matag bag-ong koneksyon ipila pagkahuman niini nga limitasyon. Anaa kini sa Prefork ug Worker pareho sa MPM. Ang default nga bili niini kay 256.
  3. KeepAliveTimeout : Kini ang gidugayon sa panahon nga ang server maghulat alang sa sunod nga hangyo sa dili pa isira ang koneksyon. Default nga bili kay 5 ka seg.
  4. LimitRequestFields : Nagtabang kini kanamo sa pagtakda og limitasyon sa gidaghanon sa mga field sa header sa HTTP request nga dawaton gikan sa mga kliyente. Ang default nga kantidad niini mao ang 100. Girekomenda nga ipaubos kini nga kantidad kung ang mga pag-atake sa DDos mahitabo ingon usa ka sangputanan sa daghang mga header sa hangyo sa http.
  5. LimitRequestFieldSize : Makatabang kini kanamo sa pagtakda og limitasyon sa gidak-on sa HTTP Request header.

12. I-enable ang Apache Logging

Gitugotan ka sa Apache nga mag-log nga independente sa imong pag-log sa OS. Maalamon ang pagpagana sa pag-log sa Apache, tungod kay naghatag kini og dugang nga impormasyon, sama sa mga sugo nga gisulod sa mga tiggamit nga nakig-interact sa imong Web server.

Aron mahimo kini kinahanglan nimo nga ilakip ang mod_log_config module. Adunay tulo ka nag-unang mga direktiba nga may kalabotan sa pag-log nga magamit sa Apache.

  1. TransferLog: Paghimo og log file.
  2. LogFormat : Pagpiho ug custom nga pormat.
  3. CustomLog : Paghimo ug pag-format og log file.

Mahimo usab nimo kini gamiton alang sa usa ka partikular nga website nga imong gibuhat Virtual hosting ug alang niana kinahanglan nimo nga ipiho kini sa seksyon sa virtual host. Pananglitan, ania ang akong website virtual host configuration uban sa logging enabled.

<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

13. Pagsiguro sa Apache gamit ang SSL Certificates

Katapusan, apan dili ang labing gamay nga mga sertipiko sa SSL, mahimo nimong masiguro ang imong tanan nga komunikasyon sa usa ka naka-encrypt nga paagi sa Internet gamit ang sertipiko sa SSL. Ibutang ta nga ikaw adunay usa ka website diin ang mga tawo mag-log in pinaagi sa pagpamatuod sa ilang mga kredensyal sa Login o ikaw adunay usa ka E-Commerce nga website diin ang mga tawo naghatag sa ilang mga detalye sa bangko o mga detalye sa Debit/Credit card aron makapalit og mga produkto, pinaagi sa default ipadala sa imong web server kining mga detalye sa yano nga teksto format apan kung mogamit ka og mga sertipiko sa SSL sa imong mga website, ang Apache nagpadala sa tanan niini nga impormasyon sa naka-encrypt nga teksto.

Mahimo ka makapalit mga sertipiko sa SSl gikan sa Daghang lainlaing mga taghatag sa SSL sama sa namecheap.com. Kung nagdagan ka usa ka gamay kaayo nga negosyo sa web ug dili gusto nga mopalit usa ka sertipiko sa SSL mahimo ka gihapon mag-assign sa usa ka sertipiko nga gipirmahan sa Kaugalingon sa imong website. Gigamit sa Apache ang mod_ssl module aron suportahan ang sertipiko sa SSL.

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

Sa higayon nga ang imong sertipiko nahimo ug napirmahan. Karon kinahanglan nimo nga idugang kini sa configuration sa Apache. Ablihi ang main configuration file gamit ang vim editor ug idugang ang mosunod nga mga linya ug i-restart ang serbisyo.

<VirtualHost 172.16.25.125:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/example.com.crt
        SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
        SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
        ServerAdmin [email 
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog /var/log/httpd/example.com-error_log
        CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>

Ablihi ang imong browser, i-type ang https://example.com, ug imong makita ang bag-ong sertipiko nga gipirmahan sa kaugalingon.

Kini ang pipila ka mga tip sa seguridad nga imong magamit aron masiguro ang pag-install sa imong Apache web server. Para sa mas mapuslanong mga tip ug ideya sa seguridad, tan-awa ang opisyal nga online nga dokumentasyon sa Apache HTTP Server.