Debian Wheezy Webserver

18 Feb 2014 - Lesezeit: 6 Minuten

Da es immer wieder vor kommt, dass man einen Webserver installieren muss, habe ich hier mal alle bei mir so üblichen Schritte zusammengefasst. Dabei behandle ich nur die grobe allgemeine Instalaltion wie ich sie gern habe. Nicht mehr! Folgende Punkte sollen erreicht werden:

Debian Stable System mit der Option auf Testing Pakete
Apache2 Webserver (MPM-Worker) mit ein paar wichtigen Modulen
PHP als FastCGI
MySQL Datenbank
FTP Server
Ein paar Sicherheitsallgemeinheiten
1. Grundinstallation

Bei der Grundinstallation achte ich darauf, dass wirklich nichts ausser dem SSH-Server installiert wird. Alles andere wird per default nicht so gemacht wie ich es mir wünsche. Daher nehme ich nur die Konfiguration der Festplatte, des Netzwerkes und der Paketquellen mit.

2. Paketquellen anpassen

Ich nehme direkt zu Beginn den Testing-Zweig in die Paketquellen mit auf:

nano /etc/apt/sources.list

# Testing-Pakete
deb http://security.debian.org/ testing/updates main
deb http://ftp.de.debian.org/debian/ testing main

Anschließend werden werden die Prioritäten angepasst:

nano /etc/apt/preferences.d/priority

Package: *
Pin: release n=wheezy
Pin-Priority: 990

3. Software installieren

aptitude install apache2 apache2-mpm-worker libapache2-mod-fcgid php5-cgi php5-mysql php5-xcache php5-sqlite php5-mcrypt php5-json php5-gd php5-fpm php5-curl mysql-server

aptitude install -t testing vsftpd

4. Software Konfigurieren

Apache2: Module aktivieren

a2enmod rewrite mem_cache fcgid deflate alias

a2dismod php5_cgi

service apache2 restart

usermog www-data -G ftp

FastCGI:

nano /etc/apache2/mods-enabled/fcgid.conf

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
FcgidConnectTimeout 20
FcgidIOTimeout 60
FcgidMaxRequestsPerProcess 400
FcgidIdleTimeout 60
FcgidMinProcessesPerClass 0
</IfModule>

VsFTPD: Konfiguration erstellen

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=0022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
idle_session_timeout=600
data_connection_timeout=120
nopriv_user=ftp
ftpd_banner=Willkommen zum FTP-Server
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES #Dieser Punkt ist der Grund weshalb wir testing installiert haben
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

Wichtig ist, das wir die zukünftig verwendeten Shells auch aktivieren, da ansonsten der vsftpd streikt. In der Datei /etc/vsftpd.chroot_list werden alle Benutzer eingetragen die NICHT gechrooted werden sollen.

echo "/bin/false" >> /etc/shells

Fail2ban

nano /etc/fail2ban/jail.conf

[ssh]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 2

[vsftpd]

enabled = false
port = ftp,ftp-data,ftps,ftps-data
filter = vsftpd
logpath = /var/log/vsftpd.log
maxretry = 3

Mailserver

Da Debian ja ohnehin schon mit einem Mailserver daher kommt können wir diesen für einfache Aufgaben auch nutzen. In diesem Fall möchte ich einfach einen Mailversand über einen Smarthos realisieren.

dpkg-reconfigure exim4-config

5. Benutzer anlegen

useradd webuser -c "Benutzer fuer dasWebsystem via FTP" -d /var/www/webseite.de -m -s /bin/false -U

usermod -G ftp && passwd webuser

6. Webseite einrichten

Zunächst einmal legen wir eine virtuelle Konfigurationsdatei an:

nano /etc/apache2/sites-enabled/webseite.de

<VirtualHost webseite:80>
ServerName webseite.de
ServerAdmin webmaster@webseite.de
DocumentRoot /var/www/webseite.de/httpdocs/
<Directory /var/www/webseite.de/httpdocs>
Options +ExecCGI
AddHandler fcgid-script .php
FCGIWrapper /usr/bin/php-cgi .php
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/webseite.de_error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/webseite.de_access.log combined
</VirtualHost>

Nun müssen wir noch die Verzeichnisse anlegen. Dies geschieht unterhalb des Homeverzeichnisses des Benutzers:

mkdir /var/www/webseite.de/httpdocs && chown :ftp /var/www/webseite.de/httpdocs

Fazit

Was haben wir bisher erreicht?

Wir haben einen zügigen Webserver
PHP mit Hilfe von FastCGI ausführt.
Der FTP-Server bietet die Möglichkeit Chrootfreie Benutzer zuzulassen
Systembenutzer können sich via FTP auf dem Server einloggen und landen in Ihrem Homeverzeichnis
Unterhalb des Homeverzeichnisses gibt es ein httpdocs Order der die Webseiten vorhalten wird
MySQL speichert seine Tabellen freundlicherweise in einzelnen InnoDB Dateien