Debian Server: Unterschied zwischen den Versionen
Sysd0b (Diskussion | Beiträge) |
Sysd0b (Diskussion | Beiträge) |
||
Zeile 65: | Zeile 65: | ||
== Dienste == | == Dienste == | ||
=== Apache === | === Apache === | ||
− | ==== | + | ==== Versionsinformationen deaktivieren ==== |
Fußzeile mit Versionsinformationen ausblenden, dafür öffnen wir die Security Config des Apachen | Fußzeile mit Versionsinformationen ausblenden, dafür öffnen wir die Security Config des Apachen | ||
<pre> | <pre> | ||
Zeile 79: | Zeile 79: | ||
<pre> | <pre> | ||
nano /etc/init.d/apache2 restart | nano /etc/init.d/apache2 restart | ||
+ | </pre> | ||
+ | |||
+ | ==== Directory Listing deaktivieren ==== | ||
+ | Global deaktivieren | ||
+ | <pre> | ||
+ | a2dismod autoindex | ||
+ | service apache2 restart | ||
</pre> | </pre> | ||
Version vom 7. April 2015, 13:07 Uhr
Teile der Seite sind schon etwas, von daher nicht wundern wenn da noch von etch hin und wieder die rede ist. Ein etwas neuere Seite zu Ubuntu gibts auch noch.
Inhaltsverzeichnis
Grundlagen
Debian Version ermitteln
cat /etc/debian_version cat /proc/version uname -r
Sources.lst
In der Sources.lst tragen wir Quellen für Debian Pakete ein.
nano /etc/apt/sources.lst
Hilfreiche Links zu dem Thema:
- apt-get.org - Nach Debian Paket Sources suchen
- dotdeb.org - Repository für Debian-basierende LAMP Server
- Debian Etch Sources (Archiv) - Danke an Huschi für diesen Artikel!
Hostname ändern
Mit root rechten folgenden Befehl ausführen:
hostname = neuerhostname
Überprüfen ob der alte hostname noch im System rumschwirrt
grep -R /etc/ -e "<hostname>"
Headerfiles installieren
aptitude install linux-headers-`uname -r`
Nützliche Befehle
df -h // Freien Speicher anzeigen du -sh /pfad/zum/ordner // Größe des Ordners ermitteln find /pfad/zum/ordner -type f -exec sed -i 's/<alterbegriff>/<neuernegriff>/g' {} \; // Suchen & Ersetzen in mehreren Dateien mv /pfad/zum/ordner/.[!.]* /neuer/pfad/zum/ordner // Datein verschieben (incl. .hidden-files) sed 's/^/#/' file.name // In der Datei file.name an jeden Zeilenanfang '#' einfügen time scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/ // Prozesszeiten messen, hier am Bsp. von scp
Sicherheit
Eigentlich steht das Grundlegende alles schon hier ;-)
Ein paar links dazu
- Chkrootkit - Rootkitchecker / Intrusion Detection
- Tripwire - Rootkitchecker / Intrusion Detection
- Fail2ban - Ban by Logfile
Dienste
Apache
Versionsinformationen deaktivieren
Fußzeile mit Versionsinformationen ausblenden, dafür öffnen wir die Security Config des Apachen
nano /etc/apache2/conf.d/security nano /etc/apache2/apache2.conf // bzw.
Wir suchen folgende Einstellung und ändern diese wie folgt ab:
ServerSignature Off ServerTokens Prod
Nur noch neustarten und fertig ;)
nano /etc/init.d/apache2 restart
Directory Listing deaktivieren
Global deaktivieren
a2dismod autoindex service apache2 restart
Links
Courier-IMAP
Gleichzeitige Zugriffe pro IP erhöhen
nano /etc/courier-imap/imapd nano /etc/courier-imap/pop3d
In der jeweiligen Config gibts dann einen Parameter namens MAXPERIP welcher bei mir auf 4 gesetzt war, diesen ändern wir dann entsprechend der eigenen Wünsche ab. Nur noch den Dienst neustarten und fertig is dat ding.
/etc/init.d/courier-imap restart
Cron
* * * * * Befehl der ausgeführt werden soll - - - - - | | | | | | | | | +----- Wochentag (0 - 7) (Sonntag ist 0 und 7; oder Namen, siehe unten) | | | +------- Monat (1 - 12) | | +--------- Tag (1 - 31) | +----------- Stunde (0 - 23) +------------- Minute (0 - 59; oder Namen, siehe unten)
Fail2ban
Alle IPtables Einträge anzeigen
/sbin/iptables --list
Eintrag 1 in der "fail2ban-ssh" Kette löschen
/sbin/iptables --delete fail2ban-SSH 1
Icinga2
Iptables
Aktuellen Regelsatz speichern, vorher sollte natürlich einer erstellt werden ;)
mkdir /var/lib/iptables iptables-save > /var/lib/iptables/rules
Startskript erstellen
/bin/sh iptables-restore < /var/lib/iptables/rules
und im einen runlevel verlinken
cd /etc/rc2.d ln -s ../init.d/iptables S99iptables
MRTG
Pakte & Abhängigkeiten installieren
aptitude install mrtg mrtgutils apache2 perl snmp snmpd
Config Ordner erstellen & Config erzeugen & Geräte hinzufügen (Doppelpfeil bei folgegeräten beachten!)
mkdir /etc/mrtg/ cfgmaker public@localhost > /etc/mrtg/mrtg.cfg // localhost cfgmaker public@192.168.23.10 >> /etc/mrtg/mrtg.cfg // Switch1 cfgmaker public@192.168.23.20 >> /etc/mrtg/mrtg.cfg // Switch2 ...
Webserver Ordner erstellen & Index erstellen
mkdir /var/www/mrtg/ indexmaker --output=/var/www/mrtg/index.html /etc/mrtg/mrtg.cfg
Jetzt binden wir MRTG als Cronjob ein.
crontab -e bzw. /var/spool/cron/crontabs/root // Cronjob File öffnen */1 * * * * env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg // Diese Zeile einfügen /etc/init.d/cron restart // Cron neustarten :)
MRTG Starten & Webseite aufrufen
mrtg /etc/mrtg/mrtg.cfg http://<server-ip>/mrtg/
Troubleshooting
Wem dieser Fehler auch nicht gefällt...
Subroutine SNMP_Session::sockaddr_in6 redefined at /usr/share/perl/5.14/Exporter.pm line 67. at /usr/share/perl5/SNMP_Session.pm line 149 Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at /usr/share/perl/5.14/Exporter.pm line 67. at /usr/share/perl5/SNMP_Session.pm line 608
...der muss nur die nachfolgenden 2 Zeilen in der SNMP_Session.pm ersetzen oder patchen
vim /usr/share/perl5/SNMP_Session.pm
Zeile: 149 alt: import Socket6; neu: Socket6->import(qw(inet_pton getaddrinfo)); Zeile: 608 alt: import Socket6; neu: Socket6->import(qw(inet_pton getaddrinfo));
vim: "nG Cursor auf die Zeile n des Dokuments bewegen"
MYSQL
Backup
Backup erstellen
mysqldump --user=<username> --password=<passwort> <database> > `date -I`-<backupname>.backup
Backup zurückspielen
mysql --user=<username> --password=<passwort> --database=<database> < [yyyy-mm-dd]-<backupname>.backup
Sollte jedoch nicht in der Form als Skript benutzt werden, denn solange der prozess läuft sehen alle user das passwort im process table ;)
PW reset
Bei folgenden Befehlen dran denken, dass der MYSQL Chef in alten versionen "admin" heißt, nicht "root" ;)
Wir stoppen erstmal Mysql
/etc/init.d/mysql stop
Mysql im Hintergrund starten im safe mode (Ohne PW)
/usr/bin/mysqld_safe --skip-grant-tables &
Jetzt loggen wir uns ohne PW ein!
mysql --user=root mysql
Jetzt befinden wir uns im mysql prompt und setzen uns ein neues PW.
mysql> update user set Password=PASSWORD(''''neues_pw'''') WHERE User='root'; mysql> flush privileges; mysql> exit;
Jetzt nur noch mit "ps x" in der shell mysql_safe raussuchen und beenden und den mysql Dienst normal starten. Fertig.
ps x kill mysql_safe-process-id /etc/init.d/mysqld start
Php
Wir bringen Php bei nicht soviel über den Server zu erzählrn ;-)
nano /etc/php.ini expose_php Off
Postfix
Postfix Config
- Nachrichten auflisten: postqueue -p
- Löschen von einer Nachricht: postsuper -d QUEUE-ID
- Alle Nachrichten löschen: postsuper -d ALL
- Nachrichten festhalten: postsuper -h QUEUE-ID
- Nachrichten loslassen: postsuper -H QUEUE-ID
- Nachrichten Requeuingen: postsuper -r ALL
- Inhalt einer Mail ausgeben: postcat -q QUEUE-ID
- Nachrichten sofort zustellen: postqueue -f
Message Size
/etc/postfix/main.cf öffnen und message_size_limit suchen, wenn es noch nicht in der config steht (Default 10240000), folgende Zeile hinzufügen:
message_size_limit = 20480000
Beispielwert für 20MB, danach Postfix neustarten nicht vergessen.
service postfix reload bzw. service postfix restart
In der php.ini, welche im Verzeichnis /etc zu finden ist sollten folgende Parameter ebenfalls angepasst werden, falls webmail o.ä. genutzt wird:
post_max_size = 20M upload_max_filesize = 20M
Open Relay
Folgende Zeilen sollen bewirken das unser Postfix nicht als Open Relay dient.
# Erweiterung smtpd_helo_required = yes smtpd_delay_reject = no disable_vrfy_command = yes smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_hostname, reject_non_fqdn_hostname
Jetzt nur noch Postfix neustarten
/etc/init.d/postfix restart
Qmail
Life with Qmail - Hier steht so ziemlich alles was man so braucht
Attachment size limitations
Diese Einstellung wird hier festgelegt:
/var/qmail/databytes /var/qmail/control/databytes
Default sind 20480000bytes, was 20MB entspricht.
Mail Queue mit qmHandle
inetd > xinetd
Hier eine Kurzanleitung für den Umstieg von Inetd auf Xinetd.
Erstmal auf Updates checken und dann holen wir uns Pakete.
aptitude update aptitude install xinetd
Mit folgendem script erzeugen wir nach der erfolgreichen xinetd Installation, eine zum System passende xinetd.conf und speichern diese in einen temporären Verzeichnis.
/usr/sbin/xconv.pl < /etc/inetd.conf > /tmp/xinetd.conf
Jetzt erzeugen wir Backups von der inetd.conf und der der Standard xinetd.conf, dann können wir die im /tmp/ erzeugte xinetd.conf nach /etc/ verschieben.
mv /etc/inetd.conf /etc/inetd.conf.bak mv /etc/xinetd.conf /etc/xinetd.conf.bak mv /tmp/xinetd.conf /etc/xinetd.conf
xinetd neu starten um die Änderungen zu übernehmen und anschliessen kurz checken ob alles läuft.
/etc/init.d/xinetd restart ps ax | grep xinetd
Eine 2.Shell öffnen und darin die neu erzeugte xinetd.conf öffnen, um dessen Inhalte gleich in mehrere Dateien zu stückeln.
nano /tmp/xinetd.conf
Zurück in der 1.Sell erzeugen wir nun folgende Dateien und füttern diese mit Info`s aus der geöffneten xinetd.con, welche wir im Schritt zuvor in der 2.Shell geöffnet haben.
In der xinetd.conf bleibt nur der Block "defaults" bestehen, für die anderen erzeugen wir neue Dateien in dem bereits vorhandenen Unterverzeichniss "/etc/xinetd.d/*"
smtp_psa erzeugen:
nano /etc/xinetd.d/smtp_psa
mit dem entsprechenden infos aus der xinetd.conf füllen:
service smtp { socket_type = stream protocol = tcp wait = no disable = no user = root instances = UNLIMITED server = /var/qmail/bin/tcp-env server_args = -Rt0 /var/qmail/bin/relaylock /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true }
genauso geht es auch mit den anderen Blöcken
nano /etc/xinetd.d/smtps_psa :
service smtps { socket_type = stream protocol = tcp wait = no disable = no user = root instances = UNLIMITED server = /var/qmail/bin/tcp-env server_args = -Rt0 /var/qmail/bin/relaylock /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true }
nano /etc/xinetd.d/ftp_psa :
service ftp { socket_type = stream protocol = tcp wait = no user = root server = in.proftpd }
nano /etc/xinetd.d/poppassd_psa :
service poppassd { socket_type = stream protocol = tcp wait = no user = root server = /opt/psa/admin/bin/poppassd }
Und in etwa so sollte die xinetd.conf danach aussehen :
# Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { #The maximum number of requests a particular service may handle # at once. instances = 25 # The type of logging. This logs to a file that is specified. # Another option is: SYSLOG syslog_facility [syslog_level] log_type = FILE /var/log/servicelog # What to log when the connection succeeds. # PID logs the pid of the server processing the request. # HOST logs the remote host's ip address. # USERID logs the remote user (using RFC 1413) # EXIT logs the exit status of the server. # DURATION logs the duration of the session. log_on_success = HOST EXIT DURATION # What to log when the connection fails. Same options as above log_on_failure = HOST ATTEMPT # The maximum number of connections a specific IP address can # have to a specific service. per_source = 5 } includedir /etc/xinetd.d
Nochmal Prüfen ;-)
/etc/init.d/xinetd restart ps -x | grep xinetd
Fehler / Troubleshooting Nachdem ich ein Plesk Update durchgeführt hatte (Hotfix für 8.4, ohne Versionsupgrade) wurde die Dateien "smtp_psa" und "smtps_psa" entfernt, was dazu führte das ich nur noch über webmail eMails versenden konnte, jedoch nicht über mein lokales Mail Programm. Der Fehler wurde schnell klar, als ich die "Plesk-Update-Info" Mail, welche dem admin des Servers zugesandt wird durchgesehen habe. Da stand dann:
Trying to replace files and set up right permissions... Trying to remove old xinetd.d entries... removed `/etc/xinetd.d/smtp_psa' removed `/etc/xinetd.d/smtps_psa'
Spamdyke (greylisting)
SNMP
aptitude install net-snmp
Ein paar schnipsel
snmpwalk -v 1 -c public 192.168.23.114 sysUpTime.0 snmpget -v 2c -c public 192.168.23.12 1.3.6.1.2.1.1.3.0
- OID
- MIB
TFTP
Um Switche mit neuer firmware zu betanken oder rechner mit bootimages zu versorgen, da gibts noch tftp ;-)
aptitude install tftpd-ha sudo chown -R tftp /srv/tftp/
Nur noch Config anpassen & neustarten. Das "-c create file" brauche ich damit ich von den Switch aus die config sichern kann.
vim /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="192.168.23.23:69" TFTP_OPTIONS="--secure -c" service tftpd-hpa restart
Logging
Logrotate
Wer mehrere Systeme betreut wird an diesen netten tool nicht vorbeikommen.
aptitude install logrotate
Einstellungen werden unter "/etc/logrotate.conf" vorgenommen. Mehr info`s dazu auch hier
Tools
Imapcopy
imapcopy, den source gibts bei google :/ Einfaches Tools zum Kopieren von Mailboxen von Server zu Server. Es reicht wenn es auf einen der beiden Server installiert wird, es könnte auch ein beliebiger 3.ter Server sein.
aptitude install imapcopy
Einsetzbar direkt auf der Kommandozeile
./imapCopy.sh imap://src-usr%40foo.de:src-pw@foo.de imap://dest-usr%40bar:dest-pw@bar.de
oder aber via cfg Datei (/usr/local/imapcopy/imapcopy.cfg bzw. usr/share/doc/imapcopy/examples/ImapCopy.cfg).
vim /usr/local/imapcopy/imapcopy.cfg
SourceServer foo.de SourcePort 143 DestServer bar.de DestPort 143 #CreateEmptyFolders skipfolder INBOX.Trash # SourceUser SourcePassword DestinationUser DestinationPassword Copy "src-usr@foo.de" "src-pw" "dest-usr@bar.de" "dest-pw" Copy "src-usr2@foo.de" "src-pw" "dest-usr2@bar.de" "dest-pw"
danach nur noch auf go drücken und los gehts
imapcopy -esl
Es stehen folgende Parameter zur Verfügung:
- -O SrcFolder : Copy only SrcFolder, -O can be specified more than once
- -M SrcFolder : Skip match SrcFolder, -M can be specified more than once
- -S SrcFolder : Skip SrcFolder, -S can be specified more than once
- -i : Show info about servers and exit without copying
- -1 : Copy only the first message of each folder
- -0 : Copy folders only, dont copy any messages
- -e : Create emtpy folders also
- -t : Test login for all users in config file
- -s : Subscribe all folders on destination server
- -u : Subscribe all folders on Source, needed by some servers to select a folder (only if select failes)
- -X : Copy all Messages to INBOX, dont create Folders on Destination
- -l : Write results to logfile imapcopy.log
SCP
Kann man bei migration gut gebrauchen, in folgenden Fall "schiebe" ich rekursiv Inhalte aus dem Ordner "quellordner" in den Ordner "zielordner" auf dem anderen Server.
scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/
Will man jetzt noch eine log datei dazu haben, muss man einen kleinen Umweg gehen
script -q -c "scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/" > scp_domain.tld.log
Noch schöner ist dann noch mit time
time script -q -c "scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/" > scp_domain.tld.log
Shell Tools
Sammlung von command line tools einfach via aptitude ;-)
- dstat
- htop
- iostat
- iotop
aptitude install dstat htop iostat iotop
Sonstiges & Troubleshooting
Logfiles prüfen
Wenn nach der Installation irgendetwas nicht funktioniert, führt euch der erste Weg nach /var/log/. Hier ein paar Ansätze
less /var/log/syslog | grep xinetd ps ax | grep xinetd
Mail Server - IMAP Unterstützung
telnet imap.imapserver.de 143 a01 login USER PASSWORT b02 CAPABILITY // In der Ausgabe findet ihr dann was der Dienst alles kann ;-) a02 logout
Mail Server testen via Telnet
Manueller Telnet Test via Shell
1. Shell / Terminal / Eingabeaufforderung öffnen und folgendes eingeben:
telnet localhost 25
Ausgabe: 220 (Der Mail-Horst identifiziert und meldet sich)
2. Hier steht domain.tld für die eigene Domain.
HELO domain.tld
Ausgabe: 250 Servername
3. Eigene E-Mail-Adresse angeben, mit spitzen klammern!
MAIL FROM:<e-mail-adresse@domain.tld>
Ausgabe: 250 OK
4. Empfänger E-Mail-Adresse angeben, auch wieder mit spitzen klammern!
RCPT TO:<postmaster@synserver.de>
Ausgabe: 250 OK
5. Folgendes eingeben:
DATA
Ausgabe: 354 GO AHEAD
6. Nochmal eigene E-Mail-Adresse angeben, nicht vergessen mit spitzen klammern!
FROM:<e-mail-adresse@domain.tld>
7. Test Nachricht eingeben und dann mit folgenden Befehlen abschließen
"Enter" . "Enter"
Ausgabe: 250 OK
Standard Editor ändern
export EDITOR=/usr/bin/vim