InhaltsverzeichnisApache2Apache mit HTTPS unter Debian mittels openssl betreiben
Um den Zugriff auf Webseiten des Apache-Webservers über HTTPS zu gewähren, muss der Apache mit SSL-Unterstützung eingerichtet werden. apt-get install apache2 openssl libapache2-mod-evasive
Es wird dann zunächst ein selbst signiertes Zertifikat erstellt mit folgendem Befehl : openssl req -newkey rsa:4096 -new -x509 -nodes -sha512 -days 3650 -keyout pcnr0433.key -out pcnr0433.pem Dabei werden verschiedene Infos abgefragt. Der Common Name muss unbedingt auf den Hostnamen lauten. Country Name : DE State : NRW Locality Name: Stolberg Organization Name: Meine Firma Organizational Name : IT-Abteilung Common Name: pcnr0433.domäne.de Email Address: admin@domain.de
Es wurden die Dateien pcnr0433.crt und pcnr0433.key erstellt. openssl req -out pcnr0433.csr -key pcnr0433.key -new
es wurde eine Datei pcnr0433.csr erstellt.
openssl x509 -in pcnr0433.cer -out pcnr0433.pem –inform der
Die Datei pcnr0433.pem wird in das Verzeichnis /etc/ssl/certs/ kopiert. cp pcnr0433.pem /etc/ssl/certs/ ; cp pcnr0433.key /etc/ssl/private/ Die Rootzertifikatkette muss vom CA-Server geholt werden und von *.p7b(windows) nach *.pem(linux) konvertiert werden: openssl pkcs7 -inform der -in myCAchain.p7b -out myCAchain.pem -print_certs
Diese Datei ist wichtig, damit Firefox nicht über fehlende Ausstellerinfos meckert. ... ServerAdmin hausnetz@firma.de ErrorLog /var/log/apache2/error-ssl.log CustomLog /var/log/apache2/access-ssl.log LogLevel warn SSLEngine on SSLCertificateFile /etc/ssl/certs/pcnr0433.pem SSLCertificateKeyFile /etc/ssl/private/pcnr0433.key SSLCertificateChainFile /etc/ssl/certs/myCAchain.pem ... Jetzt wird die Seite hinzugefügt,dass SSL-Modul aktiviert und der Apache neu gestartet: a2ensite default-ssl a2enmod ssl /etc/init.d/apache2 restart invoke-rc.d apache2 force-reload
Danach sollte der Server nach abnicken der Zertifikatswarnung unter https://pcnr0433 erreichbar sein. altes SSL-Zertifikat erneuern
wenn das alte Zertifikat nach ein paar Jahren abgelaufen ist muss es erneuert werden. rcapache2 stop cd /etc/apache2/ssl/ mv pcnr0433.csr pcnr0433.csr.org mv pcnr0433.pem pcnr0433.pem.org jetzt neue CSR-Datei mit altem Key generieren: openssl req -new -key pcnr0433.key -out pcnr0433.csr -newkey rsa:2048
dann die CSR-Datei bei der CA einreichen und die neu generierte CER-Datei in das alte Verzeichnis reinkopieren. openssl x509 -inform der -in pcnr0433.cer -out pcnr0433.pem #in suse muss die Datei als crt-datei konvertiert und nach /etc/apache2/ssl.crt kopiert werden: #openssl x509 -inform PEM -in pcnr0433.pem -out pcnr0433.crt anschließend den apache wieder neu starten und Zertifikat im Browser testen. rcapache2 start
fertig
Apache mit HTTPS unter Debian mittels GNUTLS betreiben
der momentane Vorteil ist, dass GNUTLS schon TLS1.2 unterstützt. apt-get install apache2 libapcache2-mod-evasive libapache2-mod-gnutls gnutls-bin dann SSL-Unterstützung abschalten: a2dismod ssl dann GNUTLS-Unterstützung einschalten: a2enmod gnutls dann Standard-GNUTLS-Seite aktivieren: a2ensite default-tls
dann die Datei GnuTLSPriorities NORMAL nach: GnuTLSPriorities SECURE256:!ANON-DH:!MD5 oder wer kein TLSv1.2 kann, bleibt draussen: GnuTLSPriorities SECURE256:!VERS-SSL3.0:!VERS-TLS1.0:!VERS-TLS1.2!ANON-DH:!MD5 dann Apache einmal neustarten: /etc/init.d/apache2 restart
schon fertig → https://meinServer
HTTP-Zugriff abschalten
Wer anschließend den unverschlüsselten HTTP-Zugriff auf Port 80 abschalten will kann das so versuchen: a2dissite 000-default
(der genaue Name steht in ... #NameVirtualHost *:80 #Listen 80 ... Als Abschluß muss der Apache neu gestartet werden: /etc/init.d/apache2 restart
Ein HTTP-Verzeichnis gegen ein Active Directory authentifizieren1. Möglichkeit : über ein Perlmodul
Gegeben ist ein Debian-Rechner ohne Winbind, Kerberos, Samba. apt-get install libapache2-authenntlm-perl
Das Zielverzeichnis muss angelegt und vorher berechtigt werden: mkdir /tmp/ntlmtest touch /tmp/ntlmtest/testdatei chown -R www-data:www-data /tmp/ntlmtest/ Die Apachekonfigurationsdatei /etc/apache2/conf.d/ntlm.conf muss erstellt und konfiguriert werden: Alias /ntlmtest /tmp/ntlmtest <Directory /tmp/ntlmtest> PerlAuthenHandler Apache2::AuthenNTLM AuthType ntlm AuthName Basic require valid-user PerlAddVar ntdomain "MYNTDOMAIN mydomaincontr1 mydomaincontr2" PerlAddVar defaultdomain MYNTDOMAIN PerlSetVar splitdomainprefix 1 Options Indexes Multiviews FollowSymlinks Order allow,deny allow from all </Directory> Anschließend muss der Apachedienst seine Konfiguration noch neu einlesen: /etc/init.d/apache2 reload eventuell noch ein : a2enmod perl
Jetzt sollte der Zugriff auf http://server/ntlmtest möglich sein. einzelnen Domänenbenutzern(hier user1 user2 administrator) Zugriff gewährenDie Apachekonfigurationsdatei muss wie folgt konfiguriert werden: Alias /ntlmtest /tmp/ntlmtest <Directory /tmp/ntlmtest> PerlAuthenHandler Apache2::AuthenNTLM AuthType ntlm AuthName Basic require user user1 user2 user3 administrator PerlAddVar ntdomain "MYNTDOMAIN mydomaincontr1 mydomaincontr2" PerlAddVar defaultdomain MYNTDOMAIN PerlSetVar splitdomainprefix 1 Options Indexes Multiviews FollowSymlinks Order allow,deny allow from all </Directory> Benutzern einer Domänengruppe(hier MyNTGroup1) Zugriff gewähren
Die Gruppe Alias /ntlmtest /tmp/ntlmtest <Directory /tmp/ntlmtest> PerlAuthenHandler Apache2::AuthenNTLM AuthType ntlm AuthName Basic require valid-user PerlAddVar requiregroup MyNTGroup1 PerlAddVar ntdomain "MYNTDOMAIN mydomaincontr1 mydomaincontr2" PerlAddVar defaultdomain MYNTDOMAIN PerlSetVar splitdomainprefix 1 Options Indexes Multiviews FollowSymlinks Order allow,deny allow from all </Directory> 2. Möglichkeit : über die allgemeine PAM-Authentifizierung des Rechners
apt-get install apache2 libapache2-mod-authnz-pam
Das Verzeichnis /tmp/ntlmtest soll für authentifizierte Domänenbenutzer freigegeben werden. chown -R www-data:wwwdata /tmp/ntlmtest Dann wird die Datei /etc/apache2/sites-enabled/000-default editiert: NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost ...
Beispiel: Alias /ntlmtest/ "/tmp/ntlmtest/" <Directory "/tmp/ntlmtest/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny allow from all AuthType Basic AuthName "allgemeine PAM-Authentifizierung fuer ntlmtest" AuthPAM_Enabled On AuthPAMService AuthBasicProvider Pam Require user pitti platsch doedel administrator </Directory> ... </VirtualHost>
Beispiel: Alias /install/ "/tmp/install/" <Directory "/tmp/install/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny allow from all AuthType Basic AuthName "allgemeine PAM-Authentifizierung für Install-Verzeichnis" AuthPAMService apache AuthUserFile /dev/null AuthBasicProvider PAM Require group PCAdmins </Directory> ... </VirtualHost> 3. Möglichkeit : über LDAP
schlechteste Methode da das Passwort in Klartext lesbar ist! apt-get install libaprutil1-ldap libldap-2.4-2 a2enmod authnz_ldap ldap
erstelle eine Datei Alias /loganalyzer /usr/share/loganalyzer #LDAPVerifyServerCert Off #keine Überprüfung des Zertifikats #LDAPTrustedMode SSL <Location /loganalyzer> AuthName "Authentifizierung mit LDAP" AuthType Basic AuthBasicProvider ldap AuthLDAPBindDN 'benutzer@domain' AuthLDAPBindPassword 'geheim' AuthLDAPURL 'ldaps://mydc.my.dom.ain/OU=Abteilungen,DC=dom,DC=ain?sAMAccountName?sub?(objectClass=*)' <RequireAll> #nur für eine Gruppe,(hier ohne Anführungszeichen!): Require ldap-group CN=meineLDAPGruppe,OU=Gruppen,DC=dom,DC=ain #ansonsten: #Require valid-user </RequireAll> </Location> dann noch ein Apacheneustart: /etc/init.d/apache2 restart —- Ein HTTP-Verzeichnis gegen ein Active Directory und gegen die lokalen Benutzer authentifizieren
Ich möchte eine Webseite gegen die lokalen Benutzer des Webservers und gegen ein AD gemischt authentifizieren. apt-get install libapache2-mod-authnz-external pwauth a2enmod authnz_external
Lege jetzt eine Datei AddExternalAuth pwauth /usr/sbin/pwauth SetExternalAuthMethod pwauth pipe
Ändere jetzt die Verzeichniskonfigurationsseite (Bsp. <Location /svn/meinRepo> ... AuthExternal pwauth AuthBasicProvider external ... </Location>
Starte den Apache jetzt neu und versuche Dich mit einem lokalen und einem AD-Account an der Webseite anzumelden. /etc/init.d/apache2 restart
Apache als Proxy betreiben
Schnell mal seinen eigenen Proxy einrichten(ohne Authentifizierung!) apt-get install libapache2-mod.proxy-html
aktiviere das Modul mit: a2enmod proxy a2enmod proxy_http
erstelle eine Datei touch /etc/apache2/sites-available/proxy
füge folgenden Inhalt in diese Datei: Listen 3128 <VirtualHost meinServername:3128> ProxyRequests On #ProxyVia On <Proxy *> Order allow,deny Allow from all </Proxy> </VirtualHost>
aktiviere die Site: a2ensite proxy
starte den Apache neu durch: /etc/init.d/apache2 restart Jetzt kann der Server als HTTP-Proxy von jedem PC ohne Authentifizierung über den Port 3128 benutzt werden. Überwachung des Apache
Moduleinstallierbare Module anzeigen : aptitude search libapache2
Apache 2.4 mit PAM-Authentifizierung
PAM-Modul apt-get install pwauth a2enmod authnz_external AuthPAM_Enabled on
ersetzen durch: AddExternalAuth pwauth /usr/sbin/pwauth SetExternalAuthMethod pwauth pipe weiteres zu Apache
Einfache Umleitung einer Website: Redirect 301 /alt http://neuerServer/neu/
a2enmod rewrite
Eintrag z.B. in die Konfigurationdatei <VirtualHost *:80> ... RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] ...
Danach den Server neustarten: /etc/init.d/apache2 restart
oder einfach die Datei <meta http-equiv="refresh" content="0; url=https://meinserver/">
a2enmod deflate
Datei <IfModule mod_deflate.c> # Compress HTML, CSS, JavaScript, Text, XML and fonts AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml #diese Dateien bitte nicht komprimieren: SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:docx|xlsx|pptx|pdf|rpm|deb)$ no-gzip dont-vary <IfModule mod_headers.c> Header append Vary User-Agent </IfModule> </IfModule>
danach ist ein Apacheneustart erforderlich a2enmod headers
Danach Eintrag z.B. in die Konfigurationdatei <VirtualHost Meinserver.dom.ain:443> ... # ein Jahr gültig : 60*60*24*365 Header always set Strict-Transport-Security "max-age=31536000 ; includeSubDomains" ...
Danach den Server neustarten: /etc/init.d/apache2 restart
... SSLCipherSuite HIGH:!aNULL:!MD5:!RC4 # bei altem Apache 2.2(squeeze) Verschlüsselung auf DHE und zur Not AES256(IE) konfigurieren: # SSLCipherSuite DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-SHA # SSLProtocol +TLSv1 SSLHonorCipherOrder On ...
Danach den Server neustarten: /etc/init.d/apache2 restart oder noch härter(!): ... SSLCipherSuite EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA ...
ProxyRequests On ProxyVia On ProxyPass /suse/ http://neuerserver/suse/ ProxyPassRevers /suse/ http://neuerserver/suse/ <Proxy *> Order allow,deny Allow from all </Proxy>
a2enmod proxy a2enmod proxy_http /etc/init.d/apache2 restart
Apachekonfiguration prüfen: apachectl -S
oder apache2ctl configtest
logresolve </var/log/apache2/access.log >/var/log/apache2/accessdns.log
echo QUIT | openssl s_client -connect localhost:443 | sed -ne '/BEGIN CERT/,/END CERT/p' | \ openssl x509 -noout -text | grep -A2 Validity
SetEnvIfNoCase Request_URI \.(?:gif|GIF|jpe?g|JPE?G|png|PNG)$ no-gzip dont-vary
htpasswd -bnBC 10 "" geheim | tr -d ':' Fehler
Fehler: die eigene Web-Seite wird nicht gecached sondern immer wieder neu vom Webserver ausgeliefert. Header unset Expires: Header set Pragma: "cache" Header set Cache-Control: "public, must-revalidate"
Danach sollten die Dateien vom Firmenproxy und eigenem Browser gecached werden. Cannot allocate memory: Could not run external authenticator ...
Lösung Ermittle die maximale Anzahl von geöffneten Dateien des Benutzers su www-data - ulimit -n exit
Dort sollte standardmäßig 1024 ausgegeben werden. session required pam_limits.so
dann editiere die Datei www-data soft nofile 8128 www-data hard nofile 8128
Überprüfe die gemachten Einstellung nochmal wie oben. /etc/init.d/apache2 reload
AddType application/vnd.ms-outlook .hol
weiteresRootzertifikatkette von p7b(windows) nach pem(linux) konvertieren: openssl pkcs7 -inform der -in myca.p7b -out myca.pem -print_certs #eventuell in firefox als benutzer importieren: #certutil -A -i myca.pem -n "MyCA" -t "C,," -d .mozilla/firefox/<MEINPROFIL.default> |