Debian Server: Unterschied zwischen den Versionen
Sysd0b (Diskussion | Beiträge) |
Sysd0b (Diskussion | Beiträge) (→Fehler) |
||
(83 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 5: | Zeile 5: | ||
== Grundlagen == | == Grundlagen == | ||
+ | === Benutzer anlegen === | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
=== Debian Version ermitteln === | === Debian Version ermitteln === | ||
<pre> | <pre> | ||
Zeile 32: | Zeile 42: | ||
grep -R /etc/ -e "<hostname>" | grep -R /etc/ -e "<hostname>" | ||
</pre> | </pre> | ||
− | |||
=== Headerfiles installieren === | === Headerfiles installieren === | ||
Zeile 41: | Zeile 50: | ||
+ | === Nützliche Befehle === | ||
+ | |||
+ | <pre> | ||
+ | |||
+ | 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 | ||
+ | grep -ri 'Ausdruck' /Pfad/zum/Ordner // Durchsucht Dateien im Ordner nach "Ausdruck" | ||
+ | |||
+ | 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 | ||
+ | </pre> | ||
+ | '''sed''' | ||
+ | <pre> | ||
+ | sed 's/^/#/' file.name | ||
+ | </pre> | ||
+ | In der Datei file.name an jeden Zeilenanfang '#' einfügen | ||
+ | |||
+ | <pre> | ||
+ | for i in *.pdf; do b=`echo $i | sed "s/17/2017/" `; mv "$i" "$b"; done | ||
+ | </pre> | ||
+ | Alle Dateien in DIR 17 gegen 2017 ersetzen welche auf .pdf enden | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | for i in *.pdf; do b=`echo $i | sed "s/\(....\)\.\(..\)\.\(..\)/\1-\2-\3/g" `; mv "$i" "$b"; done | ||
+ | </pre> | ||
+ | "." durch "-" ersetzen im Datum einer Datei die auf .pdf endet | ||
+ | |||
+ | |||
+ | SED oneliner | ||
+ | * http://sed.sourceforge.net/sed1line.txt | ||
== Sicherheit == | == Sicherheit == | ||
Zeile 48: | Zeile 97: | ||
[http://www.debian.org/doc/manuals/securing-debian-howto/index.de.html#contents Debian Secure Howto] | [http://www.debian.org/doc/manuals/securing-debian-howto/index.de.html#contents Debian Secure Howto] | ||
− | + | === Scanner === | |
+ | * [https://cisofy.com/lynis/ Lynis] - Rootkitchecker, Auditing, system hardening, compliance testing | ||
+ | * [http://rkhunter.sourceforge.net/ RKHunter] - Rootkitchecker | ||
* [http://www.chkrootkit.org/ Chkrootkit] - Rootkitchecker / Intrusion Detection | * [http://www.chkrootkit.org/ Chkrootkit] - Rootkitchecker / Intrusion Detection | ||
+ | |||
+ | === Sonstige === | ||
+ | * [http://www.fail2ban.org Fail2ban] - Ban by Logfile | ||
* [http://sourceforge.net/projects/tripwire/ Tripwire] - Rootkitchecker / Intrusion Detection | * [http://sourceforge.net/projects/tripwire/ Tripwire] - Rootkitchecker / Intrusion Detection | ||
− | * [http:// | + | * [https://www.clamav.net/ ClamAV] - open source antivirus |
+ | |||
+ | == Dienste == | ||
+ | === Apache === | ||
+ | >v.2.4 | ||
+ | ==== Directory Listing deaktivieren ==== | ||
+ | Global deaktivieren | ||
+ | <pre> | ||
+ | a2dismod autoindex -f | ||
+ | service apache2 restart | ||
+ | </pre> | ||
+ | * [http://aktuell.de.selfhtml.org/artikel/server/apacheconf/apconf09.htm Apache Konfiguration] | ||
+ | |||
+ | ==== https only ==== | ||
+ | <pre> | ||
+ | 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> | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | ==== SSLv2 / SSLv3 deaktivieren ==== | ||
+ | <pre> | ||
+ | vim /etc/apache2/mods-available/ssl.conf | ||
+ | # enable only secure protocols: SSLv3 and TLSv1, but not SSLv2 and SSLv3 | ||
+ | SSLProtocol all -SSLv2 -SSLv3 | ||
+ | </pre> | ||
− | == | + | ==== 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 69: | Zeile 162: | ||
Nur noch neustarten und fertig ;) | Nur noch neustarten und fertig ;) | ||
<pre> | <pre> | ||
− | + | /etc/init.d/apache2 restart | |
</pre> | </pre> | ||
+ | * [http://httpd.apache.org/docs/2.0/de/mod/core.html#serversignature Apache Doku] | ||
− | === | + | === Apt === |
− | + | ||
− | + | <pre> | |
+ | apt-get update && apt-get upgrade && apt-get dist-upgrade | ||
+ | </pre> | ||
+ | <pre> | ||
+ | dpkg -C | ||
+ | apt-mark showhold | ||
+ | </pre> | ||
+ | <pre> | ||
+ | cp /etc/apt/sources.list /etc/apt/sources.list_backup | ||
+ | sed -i 's/jessie/stretch/g' /etc/apt/sources.list | ||
+ | apt list --upgradable | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | apt-get upgrade | ||
+ | apt-get dist-upgrade | ||
+ | </pre> | ||
+ | ==== Troubleshooting ==== | ||
+ | <pre> | ||
+ | gzip: stdout: No space left on device | ||
+ | </pre> | ||
+ | /boot voll = prüfen & aufräumen | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
=== Courier-IMAP === | === Courier-IMAP === | ||
Zeile 101: | Zeile 225: | ||
</pre> | </pre> | ||
+ | <pre> | ||
+ | /etc/init.d/cron {start|stop|status|restart|reload|force-reload} | ||
+ | </pre> | ||
+ | |||
+ | === cron-apt === | ||
+ | Gutes Ding =) | ||
+ | * https://wiki.ubuntuusers.de/cron-apt/ | ||
=== Fail2ban === | === Fail2ban === | ||
Alle IPtables Einträge anzeigen | Alle IPtables Einträge anzeigen | ||
Zeile 109: | Zeile 240: | ||
=== Icinga2 === | === Icinga2 === | ||
− | + | Hat ne eigene Seite bekommen: [[Icinga2]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | === Iperf3 === | |
<pre> | <pre> | ||
− | + | iperf3 -s // Server starten | |
− | + | iperf3 -c 192.168.23.42 // Client aufruf (Server = 192.168.23.42) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
Zeile 271: | Zeile 266: | ||
ln -s ../init.d/iptables S99iptables | ln -s ../init.d/iptables S99iptables | ||
</pre> | </pre> | ||
− | |||
=== [https://de.wikipedia.org/wiki/Multi_Router_Traffic_Grapher MRTG] === | === [https://de.wikipedia.org/wiki/Multi_Router_Traffic_Grapher MRTG] === | ||
Zeile 307: | Zeile 301: | ||
<pre> | <pre> | ||
mrtg /etc/mrtg/mrtg.cfg | mrtg /etc/mrtg/mrtg.cfg | ||
+ | oder | ||
+ | env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg | ||
+ | |||
http://<server-ip>/mrtg/ | http://<server-ip>/mrtg/ | ||
</pre> | </pre> | ||
Zeile 333: | Zeile 330: | ||
vim: "nG Cursor auf die Zeile n des Dokuments bewegen" | 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: | ||
+ | <pre> | ||
+ | # 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; | ||
+ | </pre> | ||
* [http://www.liveconfig.com/de/kb/11.html UTF-8 DB Fix] | * [http://www.liveconfig.com/de/kb/11.html UTF-8 DB Fix] | ||
+ | * [https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 utf8mb4] | ||
+ | ==== Basics ==== | ||
+ | |||
+ | |||
+ | |||
+ | MYSQL User anlegen | ||
+ | <pre> | ||
+ | CREATE USER 'USERXY'@'localhost' IDENTIFIED BY 'GEHEIM'; | ||
+ | </pre> | ||
+ | |||
+ | MYSQL User Passwort ändern | ||
+ | <pre> | ||
+ | mysql> update user set Password=password('GEHEIM') where user='USERXY'; | ||
+ | mysql> flush privileges; | ||
+ | mysql> quit; | ||
+ | </pre> | ||
+ | |||
+ | MYSQL User löschen | ||
+ | <pre> | ||
+ | DROP USER 'USERXY'@'localhost'; | ||
+ | </pre> | ||
+ | |||
==== Backup ==== | ==== Backup ==== | ||
Zeile 353: | Zeile 399: | ||
Wir stoppen erstmal Mysql | Wir stoppen erstmal Mysql | ||
<pre> | <pre> | ||
− | /etc/init.d/mysql stop | + | /etc/init.d/mysql stop |
+ | systemctl stop mysql.service // Ab Jessie (systemd) | ||
+ | </pre> | ||
+ | |||
+ | Wenn er sagt das er nicht stoppen will weil vielleicht eine mysql_safe instanz noch irgendwo läuft: | ||
+ | <pre> | ||
+ | killall mysqld mysqld_safe | ||
</pre> | </pre> | ||
Zeile 364: | Zeile 416: | ||
<pre> | <pre> | ||
mysql --user=root mysql | mysql --user=root mysql | ||
+ | myqql -u | ||
</pre> | </pre> | ||
Jetzt befinden wir uns im mysql prompt und setzen uns ein neues PW. | Jetzt befinden wir uns im mysql prompt und setzen uns ein neues PW. | ||
<pre> | <pre> | ||
− | mysql> update user set Password=PASSWORD(' | + | mysql> update user set Password=PASSWORD('NEUESPW') WHERE User='root'; |
+ | update user set plugin="mysql_native_password"; | ||
mysql> flush privileges; | mysql> flush privileges; | ||
mysql> exit; | mysql> exit; | ||
Zeile 379: | Zeile 433: | ||
kill mysql_safe-process-id | kill mysql_safe-process-id | ||
/etc/init.d/mysqld start | /etc/init.d/mysqld start | ||
+ | systemctl restart mysql.service // Ab Jessie (systemd) | ||
+ | </pre> | ||
+ | |||
+ | ==== Troubleshooting ==== | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded | ||
</pre> | </pre> | ||
Zeile 607: | Zeile 675: | ||
==== Spamdyke (greylisting) ==== | ==== Spamdyke (greylisting) ==== | ||
* [http://www.huschi.net/5_330_de-plesk-qmail-greylisting-mit-spamdyke.html Spamdyke Installieren] | * [http://www.huschi.net/5_330_de-plesk-qmail-greylisting-mit-spamdyke.html Spamdyke Installieren] | ||
+ | |||
+ | === SFTP=== | ||
+ | Benutzer & Gruppe anlegen | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | SSH Config anpassen | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | Es gilt darauf zu achten das der Match Block am Ende der Config steht bzw. mit einen weiteren Match Block abgeschlossen wird denn: | ||
+ | <pre> | ||
+ | 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) | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | === S.M.A.R.T === | ||
+ | <pre> | ||
+ | smartctl --scan | ||
+ | sudo smartctl -a /dev/bus/0 -d megaraid,5 | ||
+ | </pre> | ||
=== SNMP === | === SNMP === | ||
<pre> | <pre> | ||
− | aptitude install net-snmp | + | aptitude install net-snmp // Tools |
+ | aptitude install snmpd // Daemon testen | ||
+ | service snmpd status // Daemon testen | ||
</pre> | </pre> | ||
Ein paar schnipsel | Ein paar schnipsel | ||
<pre> | <pre> | ||
− | snmpwalk -v 1 -c public 192.168.23. | + | 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 | |
+ | </pre> | ||
+ | |||
+ | * OID | ||
+ | ** http://www.oidview.com/ | ||
+ | ** http://oid-info.com/ | ||
+ | ** http://wiki.monitoring-portal.org/snmp/start | ||
+ | * MIB | ||
+ | ** http://www.mibdepot.com | ||
+ | |||
+ | ==== 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 | ||
+ | [https://packages.debian.org/search?keywords=snmp-mibs-downloader 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: | ||
+ | <pre> | ||
+ | aptitude update && aptitude install snmp-mibs-downloader | ||
+ | </pre> | ||
+ | Eine Zeile in dessen config /etc/snmp/snmp.conf auskommentieren: | ||
+ | <pre> | ||
+ | mibs : | ||
+ | </pre> | ||
+ | und mit dem letzten Befehl werden alle möglichen MIBs heruntergeladen | ||
+ | <pre> | ||
+ | download-mibs | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Fehler ==== | ||
+ | Sollte mal diese Fehlermeldung als erste Zeile der Ausgabe auf einen snmpget/walkk etc. stehen, prüft als erstes Eure Config | ||
+ | <pre> | ||
+ | vim /etc/snmp/snmp.conf | ||
+ | </pre> | ||
+ | Falls da alles gut aussieht überprüft man ob sich an den Pfaden auch wirklich MIB`s befinden ;-) | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | '''Bad operator (INTEGER): At line 73 in /usr/share/snmp/mibs/ietf/SNMPv2-PDU''' | ||
+ | Fix: | ||
+ | <pre> | ||
+ | wget http://pastebin.com/raw.php?i=p3QyuXzZ -O /usr/share/snmp/mibs/SNMPv2-PDU | ||
+ | </pre> | ||
+ | |||
+ | === TFTP === | ||
+ | Um Switche mit neuer firmware zu betanken oder rechner mit bootimages zu versorgen, da gibts noch tftp ;-) | ||
+ | <pre> | ||
+ | aptitude install tftpd-hpa | ||
+ | sudo chown -R tftp /srv/tftp/ | ||
+ | </pre> | ||
+ | Nur noch Config anpassen & neustarten. Das "-c create file" brauche ich damit ich von den Switch aus die config sichern kann. | ||
+ | <pre> | ||
+ | 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 | ||
</pre> | </pre> | ||
Zeile 650: | Zeile 828: | ||
DestPort 143 | DestPort 143 | ||
− | # | + | #Skip Folders |
skipfolder INBOX.Trash | skipfolder INBOX.Trash | ||
Zeile 659: | Zeile 837: | ||
danach nur noch auf go drücken und los gehts | danach nur noch auf go drücken und los gehts | ||
<pre> | <pre> | ||
− | imapcopy -esl | + | imapcopy -t // Config prüfen |
+ | imapcopy -i // Infos über die angegebenen Mailserver anzeigen | ||
+ | imapcopy -esl // Kopiervorgang starten | ||
</pre> | </pre> | ||
+ | Wenn es nur SSL gibt kann man das ganze um stunnel erweitern, wie das geht steht [https://wiki.hostsharing.net/index.php?title=ImapCopy#certificate_erstellt hier] | ||
Es stehen folgende Parameter zur Verfügung: | Es stehen folgende Parameter zur Verfügung: | ||
Zeile 678: | Zeile 859: | ||
=== SCP === | === 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. | + | 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) |
<pre> | <pre> | ||
scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/ | scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/ | ||
+ | </pre> | ||
+ | |||
+ | Anstatt Password lieber RSA Auth verwenden, diesmal vom Server "saugen" ("-i" = identity file) | ||
+ | <pre> | ||
+ | scp -i .ssh/id_rsa4096 -r user@domain.tld:/quellordner/. Pfad/auf/euren/client/ | ||
+ | </pre> | ||
+ | |||
+ | Falls man schon eine SSH config (.ssh/config) mit einem Alias Eintrag für den Server hat | ||
+ | <pre> | ||
+ | scp -r SSH-ALIAS:/quellordner/. Pfad/auf/euren/client/ | ||
</pre> | </pre> | ||
Zeile 686: | Zeile 877: | ||
<pre> | <pre> | ||
script -q -c "scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/" > scp_domain.tld.log | script -q -c "scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/" > scp_domain.tld.log | ||
+ | </pre> | ||
+ | |||
+ | Noch schöner ist dann noch mit time | ||
+ | <pre> | ||
+ | time script -q -c "scp -v -P 22 -r quellordner/. user@domain.tld:zielordner/" > scp_domain.tld.log | ||
</pre> | </pre> | ||
Aktuelle Version vom 28. Dezember 2019, 03:17 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
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:
- 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 -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 grep -ri 'Ausdruck' /Pfad/zum/Ordner // Durchsucht Dateien im Ordner nach "Ausdruck" 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 ;-)
Scanner
- Lynis - Rootkitchecker, Auditing, system hardening, compliance testing
- RKHunter - Rootkitchecker
- Chkrootkit - Rootkitchecker / Intrusion Detection
Sonstige
- Fail2ban - Ban by Logfile
- Tripwire - Rootkitchecker / Intrusion Detection
- ClamAV - open source antivirus
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
- OID
- MIB
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
Bad operator (INTEGER): At line 73 in /usr/share/snmp/mibs/ietf/SNMPv2-PDU Fix:
wget http://pastebin.com/raw.php?i=p3QyuXzZ -O /usr/share/snmp/mibs/SNMPv2-PDU
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