Einige Dienste installiert - Schritt für Schritt
ich habe mir heute einen Tag lang Zeit genommen, um meinen 1&1 Rootserver neu zu installieren - da habe ich mir gedacht, bei der Gelegenheit kann ich auch gleich alles dokumentieren... Das ganze soll eigentlich kein HowTo sein, ich beschreibe nicht den Zweck jeder Einstellung, die ich vorgenommen habe, es ist vielmehr wirklich eine Dokumentation - vielleicht hilft es dem einen oder anderen. Wichtig ist noch, dass alles in Hinblick auf Benutzung mit Confixx gemacht wurde, wer das nicht verwenden will, muss einige Ã?nderungen vornehmen. Die Links, die erwähnt werden, befinden sich ganz unten. Dass ich keine Haftung übernehme wenn ihr euch dabei etwas zerschiesst, sollte klar sein - bei den einzelnen Schritten bitte auch selbst etwas mitdenken ;-)
Da ich selbst noch mehr oder weniger in der Lernphase stecke, wird nicht alles 100%ig stimmen und schon gar nicht perfekt sein - hier bitte ich dann die Pro's um nützliche Tipps
Inhalt:
1. Allgemeines
2. OS: Debian
3. Remote-Zugang: SSH2 über PubKey-Auth
4. Webserver: Apache 1.3 mit PHP4
5. Webserver-SSL: Apache-SSL
6. Datenbank: MySQL
7. Datenbankverwaltung: PhpMyAdmin
8. FTP-Server: ProFTPd
9. Mailserver: Postfix über SMTP-Auth
... eventuell irgendwann mehr
1. Allgemeines
Ich habe mich dafür entschieden meinen Server mit Debian 3.0 Woody (=stable) laufen zu lassen und, wo möglich, keine selbstkompilierten Pakete einzusetzen. Du musst für dich selbst entscheiden ob du das auch willst, da es einige Nachteile (bspw. AWstats nicht die neueste Version) bringt - dafür gibt's keine Probleme bei Updates.
Ich gehe davon aus, dass du die Grundlegenden Kommandos unter Unix verstehst und dich mit VIM auskennst, das ist der Standardeditor bei Linux. Wenn nicht, findest du bei Link (1) eine gute Anleitung dazu. Es ist von Vorteil VIM anstatt VI zu nutzen, da dort die Zeilennummer immer angegeben wird (k.a. ob vi das auch kann...).
Ã?nderungen an Dateien gebe ich der Grösse und Einfachheit wegen über das Kommando diff an. Ich geb zu, die Ausgabe ist erstmal ziemlich verwirrend, aber wenn du das System verstanden hast, ist's ziemlich einfach.
Beispiel:
Code: Select all
meriadoc:/etc/apache# diff httpd.conf.old httpd.conf
52c52
< ServerType standalone
---
> ServerType inetd
295a296
> ServerAdmin postmaster@yourdomain.de
995d995
< #NameVirtualHost 12.34.56.78
Dass heisst nun folgendes:
in Zeile 52 (c für change) wurde "standalone" in "inetd" geändert
in Zeile 295 (a für add) wurde "ServerAdmin postmaster@yourdomain.de" hinzugefügt
in Zeile 995 (d für delete) wurde "#NameVirtualHost 12.34.56.78" gelöscht
Ich nutze folgende "Platzhalter", die durch deine Daten ersetzt werden müssen:
IP-Adresse: 217.160.123.123
Domain: yourdomain.de
Standarduser: foobar
Homeverzeichnis: /home/foobar/
Host: p11111111
Noch etwas zu den Nameservern, ich lasse keinen DNS bei mir laufen, ich gehe davon aus, dass die Einträge für "yourdomain.de" "www.yourdomain.de" "mail.yourdomain.de" und ein MX auf "mail.yourdomain.de" stehen.
Informationen wie du einen NS installierst findest du bei Link (2) und hier in der FAQ.
2. OS: Debian
Um nicht das Rad neu zu erfinden, empfehle ich dir das geniale Debian-Install-Script vom Debianserverhowto, du findest die Anleitung bei Link (3).
Partitioniert habe ich wie folgt:
Code: Select all
/ ( 400 MB)
swap ( 256 MB)
/boot ( 20 MB)
/usr ( 2000 MB)
/home ( 15000 MB)
/tmp ( 500 MB)
/var ( -> rest)
Die Antworten zu den Fragen des Scripts stehen ebenfalls in der Anleitung.
Nachdem die Installation durchgelaufen ist, stellen wir im Configmenu von Puretec den Boot-Modus wieder auf "Normales System" und starten den Server neu:
Code: Select all
shutdown -r now
Nach 1-2 Minuten sollte der Server wieder per SSH erreichbar sein. Wir loggen uns also mit dem User, den wir bei der Installation erstellt haben ein und werden hoffentlich mit
Code: Select all
Linux p11111111.pureserver.info 2.4.18-bf2.4 #1 Sun Jun 8 23:58:27 UTC 2003 i686 unknown
Most of the programs included with the Debian GNU/Linux system are
freely redistributable; the exact distribution terms for each program
are described in the individual files in /usr/share/doc/*/copyright
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
foobar@p11111111:~$
auf unserem Debianserver begrüsst ;)
Als erstes sollten wir nun einige Dienste, die auf dem Server nichts zu suchen haben deinstallieren und einige deaktivieren. Dazu wechseln wir erst noch zu root:
Code: Select all
foobar@p11111111:/$ su
p11111111:/# apt-get --purge remove analog at bind9-host fdutils lpr nfs-common pcmcia-cs pidentd portmap ppp
Auf die Frage "Do you want to remove /var/spool/lpd?" antworten wir mit y.
Nun brauchen wir aber noch einen zusätzlichen Dienst und einige Tools, die wir nun installieren:
Code: Select all
p11111111:/# apt-get install bzip2 nmap xinetd
"Do you want to convert /etc/inetd.conf file to /etc/xinetd.conf ?" No
Die Inetd.conf brauchen wir nicht mehr, da wir xinetd einsetzen.
Code: Select all
p11111111:/# rm /etc/inetd.conf
Mit Nmap checken wir nun die offenen ports ab:
Code: Select all
p11111111:/# nmap 217.160.123.123
Hier sollte nun folgendes erscheinen:
Code: Select all
p11111111:/# nmap 217.160.123.123
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Interesting ports on p11111111.pureserver.info.pureserver.info (217.160.123.123):
(The 1552 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
80/tcp open http
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
Wenn gewünscht können wir nun noch unseren Hostnamen ändern:
Code: Select all
p11111111:/# hostname yourdomain.de
Somit wäre die Basisinstallation geschafft, beginnen wir mit der Konfiguration...
3. Remote-Zugang: SSH2 über PubKey-Auth
Als erstes sichern wir den Remote-Zugang ab. Du solltest dich nie direkt als Root einloggen, sondern zuerst als Standarduser "foobar" und dann, wenn wirklich nötig, per "su" zu Root wechseln. Momentan wird das Passwort für den Zugang per SSH zwar schon verschlüsselt, eine grössere Sicherheit bietet aber die Authentifizierung über Public Keys. Dabei werden zwei Schlüssel generiert, einen Private und einen Public. Letzteren kopiert man dann auf den Server und der Zugang ist nur noch für den Besitzer des Private-Keys möglich.
Der Private-Key sollte nie über eine ungesicherte Leitung geschickt werden, am besten gar nicht, darum erstellen wir ihn lokal und übertragen nur den Public-Key.
Unter Windows:
1. PuttyGen starten (herunterladen von Link (4))
2. "SSH2 RSA" auswählen
3. "Generate"
4. Wild mit der Maus herumfahren ;)
5. Wenn du jedesmal beim Verbinden zum Server nach einer Passphrase gefragt werden willst, kannst du diese unter "Key passphrase:" und "Confirm passphrase:" eintragen.
Es ist sehr zu empfehlen, eine gute Passphrase zu wählen, sollte jemand den Key bekommen hat er ansonsten ohne weiteres Zugang zum System
6. "Save private key" -> bspw. "id_rsa.PPK"
7. Wähle die komplette Zeichenfolge im Feld "Public Key for pasting into OpenSSH authorized_keys2 file" aus und kopiere sie (CTRL-C)
8. Weiter zu -> "Auf dem Rootserver"
Unter Linux:
1. Konsole öffnen
2. Key erzeugen:
Code: Select all
ssh-keygen -t rsa
3. Pfad zum Speicherort angeben (bspw. /home/foobar/.ssh/id_rsa)
4. Passphrase (wenn gewünscht)
5. Passphrase wiederholen
Es ist sehr zu empfehlen, eine gute Passphrase zu wählen, sollte jemand den Key bekommen hat er ansonsten ohne weiteres Zugang zum System
6. Es sind nun 2 Dateien erstellt worden, eine mit der Endung .pub, diese zeigen wir jetzt an:
Code: Select all
cat /home/foobar/.ssh/id_rsa.pub
8. Wähle die Zeichenfolge aus, damit ist sie in der Zwischenablage
9. Weiter zu -> "Auf dem Rootserver"
Auf dem Rootserver:
1. Wenn wir noch als Root eingeloggt sind, wechseln wir wieder zu dem normalen user:
Code: Select all
p11111111:/# exit
1. Nun erstellen wir in das Verzeichnis ".ssh" und legen darin eine Datei an, in die der Public-Key eingetragen wird:
Code: Select all
foobar@p11111111:/$ mkdir ~/.ssh
foobar@p11111111:/$ cd ~/.ssh
foobar@p11111111:/$ touch authorized_keys
foobar@p11111111:/$ chmod 600 authorized_keys
foobar@p11111111:/$ vi authorized_keys
Nun wechseln wir in den InsertModus ( :i ) und fügen den Public-Key ein, normalerweise geht das mit der Rechten Maustaste. Wenn man den Key mit Hilfe von PuttyGen erstellt hat, hat man eventuell Zeilenumbrüche in der Zeichenkette, diese muss man entfernen ( J ). Nochmal kontrollieren ob der Key richtig übernommen wurde und danach das File abspeichern ( :wq )
Als Root ändern wir die Datei /etc/ssh/sshd_config wie folgt ab:
Code: Select all
30c30
< PermitRootLogin yes
---
> PermitRootLogin no
35c35
< #AuthorizedKeysFile %h/.ssh/authorized_keys
---
> AuthorizedKeysFile %h/.ssh/authorized_keys
SSH-Config neu laden:
Code: Select all
/etc/init.d/ssh reload
bevor wir nun komplett die Passwort-Authentifizierung abschalten, testen wir unseren Key, starten also eine zweite Session mit dem Server:
Unter Windows:
1. Putty starten
2. IP des Servers eintragen, Port 22, SSH auswählen
3. Unter Menupunkt "Connection" -> "Auto-login username" deinen am Anfang erstellten User eintragen bspw. "foobar"
4. Unter Menupunkt "SSH" -> "2 only" auswählen
5. Unter Menupunkt "Auth" -> "Private key file for authentication:" Den Private Key, den wir vorher erstellt haben auswählen (bspw. "C:id_rsa.PPK")
6. "Open" anklicken
Unter Linux:
1. Konsole öffnen
Code: Select all
ssh -i /home/foobar/.ssh/id_rsa foobar@217.160.123.123
User, Homeverzeichnis und IP natürlich anpassen ;)
Windows & Linux:
Wenn du eine Passphrase angegeben hast, solltest du nun danach gefragt werden, ansonsten sollte direkt der Prompt des Rootservers erscheinen. Wenn das nicht der Fall sein sollte, bitte nochmals alle Schritte durchgehen, denn wenn du nun weitermachst, sperrst du dich ohne funktionierenden Key selbst aus dem Server aus!
Wenn alles funktioniert hat, folgende Ã?nderung in /etc/ssh/sshd_config vornehmen:
Code: Select all
55c55
< PasswordAuthentication yes
---
> PasswordAuthentication no
SSH-Config neu laden:
Code: Select all
/etc/init.d/ssh reload
Einloggen über Passwort ist nun nicht mehr möglich. Nun können wir mit der Konfiguration des Webservers beginnen.
4. Webserver: Apache 1.3 mit PHP4
Code: Select all
p11111111:/# apt-get install php4
Do you want me to run the apacheconfig script now [y/N] ? y
Save these changes to the configuration files? [Y/n] y
Restart Apache now? [Y/n] Y
Folgende Einstellungen in der /etc/apache/httpd.conf vornehmen:
Code: Select all
< # LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
---
> LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
296c296
< ServerAdmin webmaster@yourdomain.de
---
> ServerAdmin you@yourdomain.de
310c310
< #ServerName new.host.name
---
> ServerName www.yourdomain.de
397c397
< DirectoryIndex index.html index.htm index.shtml index.cgi
---
> DirectoryIndex index.html index.php index.htm index.shtml index.shtm index.cgi index.phtml index.phtm index.pl index.php4
543c543
< ServerSignature On
---
> ServerSignature Off
757,758c757,758
< #AddType application/x-httpd-php .php
< #AddType application/x-httpd-php-source .phps
---
> AddType application/x-httpd-php .php .php4
> AddType application/x-httpd-php-source .phps
und Apache neu starten:
Code: Select all
p11111111:/# /etc/init.d/apache stop
p11111111:/# /etc/init.d/apache start
Wenn gewünscht, Testfile in /var/www/testfile.php erstellen mit folgendem Inhalt:
Code: Select all
<?php echo phpinfo(); ?>
und über http://www.yourdomain.de/testfile.php aufrufen. Nun sollte eine Informationsseite über PHP erscheinen.
5. Webserver-SSL: Apache-SSL
Für einen sicheren Webzugang installieren wir, Apache-SSL, wenn du lieber nur einen Apachen laufen lassen willst, kannst du bei Link (5) nachsehen wie man das macht ;)
Code: Select all
p11111111:/# apt-get install apache-ssl
Nachdem wir die Daten für den Key angegeben haben ändern wir folgendes in der /etc/apache-ssl/httpd.conf:
Code: Select all
243c243
< # LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
---
> LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
300c300
< ServerAdmin webmaster@yourdomain.de
---
> ServerAdmin you@yourdomain.de
314c314
< #ServerName new.host.name
---
> ServerName yourdomain.de
401c401
< DirectoryIndex index.html index.htm index.shtml index.cgi
---
> DirectoryIndex index.html index.php index.htm index.shtml index.shtm index.cgi index.phtml index.phtm index.pl index.php4
547c547
< ServerSignature On
---
> ServerSignature Off
761,762c761,762
< #AddType application/x-httpd-php .php
< #AddType application/x-httpd-php-source .phps
---
> AddType application/x-httpd-php .php .php4
> AddType application/x-httpd-php-source .phps
und Apache-SSL neu starten:
Code: Select all
p11111111:/# /etc/init.d/apache-ssl stop
p11111111:/# /etc/init.d/apache-ssl start
Nun sollte euer Host unter https://www.yourdomain.de erreichbar sein.
6. Datenbank: MySQL
Nun geht's weiter mit der MySQL-DB.
Code: Select all
p11111111:/# apt-get install mysql-server
Wenn ihr wollt, das alle Datenbanken mitgelöscht werden, wenn ihr den MySQL-Server deinstalliert müsst ihr hier mit "Yes" antworten... Ich empfehle "No".
Remove all databases after "purging" the mysql-server package? No
Should MySQL start on boot? Yes
Nun setzen wir ein Passwort für den MySQL-Root User:
Code: Select all
p11111111:/# mysqladmin -u root password neuespasswort
7. Datenbankverwaltung: PhpMyAdmin
Um die Datenbanken zu verwalten und auch anderen Usern zugänglich zu machen installieren wir PhpMyAdmin:
Code: Select all
p11111111:/# apt-get install phpmyadmin
Bei der Auswahl des Servers empfehle ich Apache-SSL.
Folgende Ã?nderung in der /etc/phpmyadmin/config.inc.php vornehmen:
Code: Select all
47c47
< $cfgServers[1]['auth_type'] = 'http'; // Authentication method (config, http or cookie based)?
---
> $cfgServers[1]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?
Unter https://www.yourdomain.de/phpmyadmin sollte man nun bereits zu einer Authentifizierung für PhpMyAdmin aufgefordert werden.
8. FTP-Server: ProFTPd
Für den normalen Filetransfer verwenden wir den FTP-Server ProFTPd:
Code: Select all
p11111111:/# apt-get install proftpd
Edit configuration file ? Yes
Run proftpd from inetd or standalone? Inetd
Enable anonymous access? No
Do you want /etc/proftpd.conf to be updated? Yes
Ã?nderungen in der /etc/proftpd.conf
Code: Select all
6c6,7
< ServerName "Debian"
---
> ServerName "yourdomain.de FTP-Server"
> ServerAdmin you@yourdomain.de
42a44,53
>
> DefaultRoot ~/html ftponly
> RootLogin off
> RequireValidShell off
> UseReverseDNS off
> IdentLookups off
>
> <Limit LOGIN>
> DenyGroup !ftponly
> </Limit>
Wir haben hier allen Usern, die nicht in der Gruppe "ftponly" sind den Zugang verwehrt - Confixx legt später die Benutzer selbst in dieser Gruppe an. Wer kein Confixx nutzen will, sollte unter "DefaultRoot" nur "~ ftponly" einsetzen, da das entsprechende Verzeichnis sonst nicht existiert.
Da wir den FTP-Server über Inetd starten, müssen wir nun noch den Xinetd konfigurieren.
Code: Select all
p11111111:/# vi /etc/xinetd.conf
Ã?nderungen:
Code: Select all
0a1,9
> service ftp
> {
> socket_type = stream
> protocol = tcp
> wait = no
> user = root
> instances = 30
> server = /usr/sbin/proftpd
> }
Nun starten wir den xinetd neu:
Code: Select all
p11111111:/# /etc/init.d/xinetd restart
Mittels nmap sehen wir nach ob es funktioniert hat:
Code: Select all
p11111111:/# /etc# nmap 217.160.123.123
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Interesting ports on p11111111.pureserver.info.pureserver.info (217.160.123.123):
(The 1550 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
9. Mailserver: Postfix über SMTP-Auth
Bitte diesen Teil mit Vorsicht geniessen - ich weiss nicht, inwiefern dieses System sicher ist - Würde mich über ein paar Infos dazu freuen
Als erstes installieren wir die benötigten Programme
Code: Select all
p11111111:/# apt-get install postfix postfix-tls sasl-bin libsasl-modules-plain libsasl2 libsasl-gssapi-mit libsasl-digestmd5-des
folgende Ã?nderungen in der /etc/postfix/main.cf vornehmen:
Code: Select all
25a26,32
>
> mydomain = yourdomain.de
> smtpd_sasl_local_domain =
> smtpd_sasl_auth_enable = yes
> smtpd_sasl_security_options = noanonymous
> broken_sasl_auth_clients = yes
> smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains
und in der /etc/postfix/master.cf
Code: Select all
71c71
< smtp inet n - - - - smtpd
---
> smtp inet n - n - - smtpd
authentifiziert wird über pwcheck, also:
Code: Select all
p11111111:/# mkdir /etc/postfix/sasl
p11111111:/# cd /etc/postfix/sasl
p11111111:/# vi smtpd.conf
Hier tragen wir folgendes ein:
Code: Select all
pwcheck_method: pwcheck
Nun müssen wir noch eine Umgebung für pwcheck schaffen:
Code: Select all
p11111111:/# mkdir /var/run/pwcheck
p11111111:/# chown postfix.root /var/run/pwcheck
p11111111:/# chmod 700 /var/run/pwcheck
p11111111:/# /usr/sbin/pwcheck
Nun sollte pwcheck noch bei jedem Booten gestartet, dazu ein kleines Script, welches unter /etc/init.d/pwcheck gespeichert wird:
Code: Select all
#! /bin/sh
DAEMON=/usr/sbin/pwcheck
NAME=pwcheck
DESC="pwcheck for postfix"
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid
--exec $DAEMON
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid
--exec $DAEMON
echo "."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop}" >&2
exit 1
;;
esac
exit 0
Startscript aktivieren und Postfix neustarten, SMTP sollte nun funktionieren ;)
Code: Select all
p11111111:/# update-rc.d pwcheck defaults
p11111111:/# /etc/init.d/postfix restart
Als POP3-Daemon hab ich mich für qpopper entschieden:
Code: Select all
p11111111:/# apt-get install qpopper
und folgendes an /etc/xinetd.conf anfügen:
Code: Select all
service pop-3
{
socket_type = stream
protocol = tcp
wait = no
user = root
instances = 30
server = /usr/sbin/in.qpopper
server_args = -f /etc/qpopper.conf
}
und neu starten
Code: Select all
p11111111:/# /etc/init.d/xinetd restart
und POP3 sollte laufen.
Natürlich ist der Server noch lange nicht fertig installiert - für mehr Dokumentationen habe ich momentan leider keine Zeit... Je nach dem ob ihr hiermit etwas anfangen könnt, gibt's irgendwann mehr.
so long
static
Links:
(1) http://www.linuxfibel.de/vi.htm
(2) http://www.debianhowto.de/de/bind/c_bind.html
(3) http://www.debianhowto.de/de/ausgangssy ... ormal.html
(4) http://www.chiark.greenend.org.uk/~sgta ... nload.html
(5) http://www.debianhowto.de/de/mod_ssl/c_mod_ssl.html