Debian Server

Aus d0b
Zur Navigation springenZur Suche springen

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.

Grundlagen

Benutzer anlegen

adduser <USER>                            // Benutzer anlegen
mkdir /home/<USER>/.ssh/                  // Unterverzeichniss .ssh erstellen
vim /home/<USER>/.ssh/authorized_keys     // Datei Für RSA-Key erstellen + Key einfügen
usermod -a -G wheel <USER>                // Benutzer der Gruppe "Wheel" hinzufügen (SSH)
chown -R <USER>:<USER> /home/<USER>/      // Falls der Benutzer unter root angelegt wurde, Verzeichniss Berechtigungen anpassen 
usermod -aG sudo <USER>                   // Benutzer der Sudo Gruppe hinzufügen           

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:

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 -mtime +14 -ls                                          // Dateien älter als 14 Tage anzeigen 
find /pfad/zum/ordner/ -type f -mtime +14 -delete                                      // Dateien älter als 14 Tage löschen 
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)
ls /var/lib/dpkg/info/ -ltra | grep "Oct"                                              // Anzeigen welche Pakte installiert wurden (Okt)
time scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/                         // Prozesszeiten messen, hier am Bsp. von scp
wget --user XYZ --ask-password http://pfad.de/zum/file.tar.gz                          // wget bei htaccess nutzen
wget -r -A jpg,png http://pfad.de/zum/verzeichniss/                                    // wget nur bestimme dateien + rekursiv

find /pfad/zum/ordner/ -type f -mtime +14 -delete                                      // Dateien welche älter als 14 Tage sind löschen
cat ~/.ssh/id_rsa.pub | ssh user@remote.host "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"   // SSH Key auf Server übertragen
nmap 151.217.177.141/22 -p 21 --open | grep Nmap | cut -d " " -f 5 > ftp_server        // FTP Server suchen & speichern

sed

sed 's/^/#/' file.name                                                                             

In der Datei file.name an jeden Zeilenanfang '#' einfügen

for i in *.pdf; do b=`echo $i | sed "s/17/2017/" `; mv "$i" "$b"; done               

Alle Dateien in DIR 17 gegen 2017 ersetzen welche auf .pdf enden


for i in *.pdf; do b=`echo $i | sed "s/\(....\)\.\(..\)\.\(..\)/\1-\2-\3/g" `; mv "$i" "$b"; done  

"." durch "-" ersetzen im Datum einer Datei die auf .pdf endet


SED oneliner

Sicherheit

Eigentlich steht das Grundlegende alles schon hier ;-)

Debian Secure Howto

Scanner

  • Lynis - Rootkitchecker, Auditing, system hardening, compliance testing
  • RKHunter - Rootkitchecker
  • Chkrootkit - Rootkitchecker / Intrusion Detection

Sonstige

Dienste

Apache

>v.2.4

Directory Listing deaktivieren

Global deaktivieren

a2dismod autoindex -f
service apache2 restart

https only

vim /etc/apache2/sites-available/default

   <VirtualHost *:80> 
        ServerName host.domain.tld
        Redirect / https://host.domain.tld/                    // Zeile hinzufügen
   </VirtualHost> 

vim /etc/apache2/sites-available/default-ssl 

   <VirtualHost _default_:443>
    	<Directory /var/www/>
		SSLRequireSSL                                  // Zeile hinzufügen
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
    </VirtualHost> 


SSLv2 / SSLv3 deaktivieren

vim /etc/apache2/mods-available/ssl.conf 

     # enable only secure protocols: SSLv3 and TLSv1, but not SSLv2 and SSLv3 
     SSLProtocol all -SSLv2 -SSLv3

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 ;)

/etc/init.d/apache2 restart

Apt

 
apt-get update && apt-get upgrade && apt-get dist-upgrade
dpkg -C    
apt-mark showhold
cp /etc/apt/sources.list /etc/apt/sources.list_backup
sed -i 's/jessie/stretch/g' /etc/apt/sources.list
apt list --upgradable
apt-get upgrade
apt-get dist-upgrade

Troubleshooting

gzip: stdout: No space left on device

/boot voll = prüfen & aufräumen

df -h                 // Freien Speicher überprüfen
cd boot/              // ggfs. in das Verzeichnis "boot/" wechseln
dpkg --configure -a
apt-get install -f
apt-get autoremove
apt-get update
apt-get dist-upgrade 

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)
/etc/init.d/cron {start|stop|status|restart|reload|force-reload}     

cron-apt

Gutes Ding =)

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

Hat ne eigene Seite bekommen: Icinga2

Iperf3

iperf3 -s                    // Server starten
iperf3 -c 192.168.23.42      // Client aufruf (Server = 192.168.23.42) 

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
oder
env LANG=C /usr/bin/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

utf8 vs. utf8mb4

Weil...

utf8 != utf8 utf8mb4 == utf-8

...because...

utf8 = 3 Bytes pro Zeichen utf8mb4 = 4 Bytes pro Zeichen

...ist, will eigentlich einer utf8.

Deswegen:

# Default DB
ALTER DATABASE `dbname` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;


# DB
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

# Table
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# Column
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Basics

MYSQL User anlegen

CREATE USER 'USERXY'@'localhost' IDENTIFIED BY 'GEHEIM';

MYSQL User Passwort ändern

mysql> update user set Password=password('GEHEIM') where user='USERXY';
mysql> flush privileges;
mysql> quit;

MYSQL User löschen

DROP USER 'USERXY'@'localhost';


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                        
systemctl stop mysql.service                  // Ab Jessie (systemd)

Wenn er sagt das er nicht stoppen will weil vielleicht eine mysql_safe instanz noch irgendwo läuft:

killall mysqld mysqld_safe

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
myqql -u 

Jetzt befinden wir uns im mysql prompt und setzen uns ein neues PW.

mysql> update user set Password=PASSWORD('NEUESPW') WHERE User='root';
update user set plugin="mysql_native_password"; 
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
systemctl restart mysql.service                  // Ab Jessie (systemd)   

Troubleshooting

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Lösung:
dpkg-reconfigure mysql-server-5.X


ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded

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)

SFTP

Benutzer & Gruppe anlegen

addgroup --system sftp                      // Gruppe für SFTP User anlegen
useradd -M -s /bin/false -G sftp sftpuser   // User anlegen ohne Home Verzeichniss & Shell verbieten
chown root:root /srv/sftp/                  // Startverzeichnis darf nicht world/group writeable sein & root gehören
chmod 755 /srv/sftp/                        // Rechte sicherstellen

mkdir /srv/sftp/upload                      // User Verzeichnis erstellen
chown sftpuser:sftp /srv/sftp/upload        // Benutzer & Gruppe für das Verzeichnis setzen
chmod 755 /srv/sftp/upload                   // Rechte auf Verzeichnisse setzen

SSH Config anpassen

vim /etc/ssh/sshd_config                     // SSH Deamon Config öffnen
 /Sub*                                       // Suche Zeile "Subsystem sftp /usr/lib/openssh/sftp-server"

Match group sftp                             // Hinter o.g. Zeile diesen Codeblock einfügen
        ChrootDirectory /srv/sftp            // ggf. Startverzeichnis für SFTP anpassen, bis dahin das muss root gehören!
        X11Forwarding no                        
        AllowTcpForwarding no
        ForceCommand internal-sftp

systemctl restart ssh.service                // SSH Dienst neustarten um die Änderungen zu übernehmen

Es gilt darauf zu achten das der Match Block am Ende der Config steht bzw. mit einen weiteren Match Block abgeschlossen wird denn:

Introduces a conditional block. If all of the criteria on the Match line are satisfied,
the keywords on the following lines override those set in the global section of the config file,
until either another Match line or the end of the file. (http://linux.die.net/man/5/sshd_config)
usermod -aG sftp USERXY                       // Einen weiteren Benutzer "USERXY" der Gruppe "sftp" hinzufügen

mount --bind /home/Daten/ /srv/sftp/upload/  // Das SFTP Verzeichnis in eine Freigabe (/home/Daten/) einbetten

S.M.A.R.T

smartctl  --scan
sudo smartctl -a /dev/bus/0 -d megaraid,5

SNMP

aptitude install net-snmp         // Tools
aptitude install snmpd            // Daemon testen
service snmpd status              // Daemon testen

Ein paar schnipsel

snmpwalk -v 1 -c public 192.168.23.23 sysUpTime.0

snmpget -v 2c -c public 192.168.23.23 1.3.6.1.2.1.1.3.0

snmpbulkwalk -v 2c -c public 192.168.23.23

SNMP MIBS Downloader

Damit wir anstatt langer OID Zahlenketten Variablennamen bekommen, müssen die entsprechenden MIB`s hinterlegt sein. Dafür gibt es das tool snmp-mibs-downloader, bevor es los geht müssen wir in unseren das non-free repository in der /etc/apt/sources.list aktivieren. Dann geht alles gaaanz schnell:

aptitude update && aptitude install snmp-mibs-downloader

Eine Zeile in dessen config /etc/snmp/snmp.conf auskommentieren:

mibs :

und mit dem letzten Befehl werden alle möglichen MIBs heruntergeladen

download-mibs




Fehler

Sollte mal diese Fehlermeldung als erste Zeile der Ausgabe auf einen snmpget/walkk etc. stehen, prüft als erstes Eure Config

vim /etc/snmp/snmp.conf

Falls da alles gut aussieht überprüft man ob sich an den Pfaden auch wirklich MIB`s befinden ;-)

MIB search path: $HOME/.snmp/mibs:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp

TFTP

Um Switche mit neuer firmware zu betanken oder rechner mit bootimages zu versorgen, da gibts noch tftp ;-)

aptitude install tftpd-hpa
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

#Skip Folders
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 -t      // Config prüfen
imapcopy -i      // Infos über die angegebenen Mailserver anzeigen
imapcopy -esl    // Kopiervorgang starten

Wenn es nur SSL gibt kann man das ganze um stunnel erweitern, wie das geht steht hier

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. (-v = verbose, -P = Port, -r = rekursiv)

scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/

Anstatt Password lieber RSA Auth verwenden, diesmal vom Server "saugen" ("-i" = identity file)

scp -i .ssh/id_rsa4096 -r user@domain.tld:/quellordner/. Pfad/auf/euren/client/

Falls man schon eine SSH config (.ssh/config) mit einem Alias Eintrag für den Server hat

scp -r SSH-ALIAS:/quellordner/. Pfad/auf/euren/client/

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