Server Installation: Unterschied zwischen den Versionen
(Backup) |
(→Hilfsmittel: RAID mit mdadm: Status) |
||
Zeile 336: | Zeile 336: | ||
** Daten in /hda3 einspielen | ** Daten in /hda3 einspielen | ||
** ''mdadm --manage /dev/md0 --add /dev/hdc3'' | ** ''mdadm --manage /dev/md0 --add /dev/hdc3'' | ||
+ | * Status prüfen per: ''mdadm --detail /dev/md0'' | ||
==== Grub2 ==== | ==== Grub2 ==== |
Version vom 12. Mai 2013, 12:03 Uhr
Inhaltsverzeichnis |
Gateway Server
Kurzer Leitfaden für das Aufsetzen neuer Vereinsgateways.
Basisinstallation
Allgemeines zur Grundinstallation siehe auch unter Dienste-Server.
Konfiguration
Netzwerk-Geräte
- Externe und Intern IP in /etc/network/interfaces konfigurieren. Dabei eth0=extern und eth1=intern
- lege gatewaysetup.sh und iptables_dnat.autogenerated in /etc/network ab
- lege ein helper script zum konditionalen aufruf von /etc/network/gatewaysetup.sh in /etc/init.d/gatewaysetup (siehe z.B. izumi setup)
- linke /etc/init.d/gatewaysetup auf /etc/rcS.d/S40gatewaysetup
- Das Script /etc/network/if-up.d/openvpn starten OVPN
Routing / OLSR
- OLSR /etc/olsrd.conf, Defaults mit:
UseHysteresis no LinkQualityLevel 2 Interface "eth1" { <defaults> } Hna4 { # ipkg repositories 195.56.146.238 255.255.255.255 212.91.225.42 255.255.255.255 # downloads.openwrt.org 78.24.191.177 255.255.255.255
}
- WAN-Routing /etc/network/ip-up.d/gatewaysetup.sh (Kopie besorgen)
SSH-Server
- ggf. neue Schlüssel erstellen in /etc/ssh/
- RSA-Host-Key per ssh-keygen -b 2048 -t rsa -f ssh_host_rsa_key
- DSA-Host-Key per ssh-keygen -b 2048 -t dsa -f ssh_host_dsa_key
- Einige änderungen in /etc/ssh/sshd_config
PermitRootLogin without-password #RSAAuthentication yes #PasswordAuthentication no
VPN-Server
- OpenVPN:
- openvpn + openssl installieren
- zwei Instanzen aufbauen: <system> = opennet_ugw (Usergateway-VPN) | opennet_users (User-VPN)
- /etc/openvpn/<system>/openssl.cnf als Kopie besorgen, Leserechte setzen (chmod go-rwx <system>)
- /etc/openvpn/opennet_<system>.conf anpassen (Kopie besorgen), key + cert anpassen
- Csr/Key erstellen: openssl req -days 3650 -nodes -new -keyout <hostname>.key -out <hostname>.csr -extensions server -config openssl.cnf
- opennet_users - Subject: C=DE, ST=Mecklenburg-Vorpommern, L=Rostock, O=Opennet, OU=Gateways, CN=<hostname>.on/emailAddress=admin@opennet-initiative.de
- opennet_ugw - Subject: C=DE, ST=Mecklenburg-Vorpommern, L=Rostock, O=OpenNet, OU=user gateways, CN=<hostname>.on/emailAddress=admin@opennet-initiative.de
- Csr absenden und unterschreiben lassen, Crt einspielen, Leserechte setzen (chmod go-rw *.key)
- Diffie hellman PEM: openssl dhparam -out /etc/openvpn/dh2048.pem 2048
- automatische ACL Aktualisierung:
- Nutzer openvpn-acl anlegen + absichern
- SSH Schlüsselpaar erzeugen: su openvpn-acl; cd .ssh/; ssh-keygen -t rsa (Sicherstellen, das $home und .ssh vorhanden sind!)
- SSH Public Key (id_rsa.pub) in opennetca@ratte:.ssh/authorized_keys hinzufügen
- cronttab für openvpn-acl mit "*/10 * * * * rsync -rt --delete --safe-links opennetca@139.30.3.52:'opennet_users opennet_users_disabled' /etc/openvpn/acl"
- notwendige Anpassung /etc/init.d/openvpn (wegen Schreibrechten Connect-Skript)
# changed mathias mahnke to cd to "$CONFIG_DIR/run # needed to run openvpn scripts # (original hack by sebastian hagen) $DAEMON $OPTARGS --writepid /var/run/openvpn.$NAME.pid \ $DAEMONARG $STATUSARG --cd $CONFIG_DIR/run \ --config $CONFIG_DIR/$NAME.conf || STATUS=1
Nameserver
- Erforderliche Pakete installieren: bind9
- falls noch kein rndc-Key - rndc absichern per rndc-conf -a
- mkdir /var/log/bind; chown bind /var/log/bind
- /etc/bind/named.conf.options:
key dnskey.opennet { algorithm hmac-md5; secret "<<<<Key von anderem Gateway holen>>>>"; }; server 139.30.241.202 { keys dnskey.opennet; }; options { directory "/var/cache/bind"; auth-nxdomain no; # conform to RFC1035 allow-recursion { any; }; # allow queries from non-localhost listen-on-v6 { any; }; # activate IPv6 check-names slave ignore; # ignoriert unterstrich in Domainnamen vom ON }; logging { channel logfile { file "/var/log/bind/named.log" versions 2 size 1M; print-time yes; # syslog local2; print-category yes; print-severity yes; severity info; }; category default { logfile; }; category general { logfile; }; # category queries { null; }; # category lame-servers { null; }; # category update { null; }; };
- /etc/bind/named.conf.local:
// on - forward (includes vpn) zone "on." { type slave; file "db.on"; masters {139.30.241.202;}; }; //on - reverse zone "168.192.in-addr.arpa" { type slave; file "db.192.168"; masters {139.30.241.202;}; }; //on-vpn - reverse zone "1.10.in-addr.arpa" { type slave; file "db.10.1"; masters {139.30.241.202;}; }; //on-ugw - reverse zone "2.10.in-addr.arpa" { type slave; file "db.10.2"; masters {139.30.241.202;}; };
- lokale Namensauflösung /etc/resolv.conf:
search on nameserver 127.0.0.1
- Überschreiben der Namensauflösung durch ppp-Einwahl unterbinden - /etc/ppp/peers/provider:
#usepeerdns
- Nameserver starten: /etc/init.d/bind9 start
- Funktion prüfen: ps aux|grep bind und rndc status
- Fehlermeldungen suchen: grep named /var/log/daemon.log|tail -20 bzw. tail /var/log/bind/named.log (falls Logfile vorhanden)
- Zonen-Transfer manuell durchführen: rndc retransfer on
Webserver
- apache2 installieren
- in /etc/apache2/ports.conf eintragen: Listen 80
- Default-Site deaktivieren: #RedirectMatch ^/$ /apache2-default/
- Default-Site unter /var/www/apache2-default ggf. löschen
- CGI-BIN deaktivieren: /etc/apache2/mods-enabled/cgi.load löschen; ggf. in sites-enabled/ den cgi-bin Eintrag löschen
- Server-Signature per "ServerSignature Off" in "sites-enabled/000-default" deaktivieren
Timeserver
- ntpdate und ntpd installieren
- beide beim Systemstart starten lassen (zur Sicherheit zuerst ntpdate, dann ntpd)
- Wenn beim Aufruf von ntp-keygen die Fehlermeldung RAND_load_file /root/.rnd not found or empty kommt kann man sich mit dd if=/dev/random of=/root/.rnd bs=512 count=1 helfen.
sudo su mkdir -p /etc/ntp chmod go-rx /etc/ntp cd /etc/ntp ntp-keygen -M chmod go-rxw * chmod go+rx /etc/ntp ln -sf ntpkey_MD5key* keys
- In /etc/ntp.conf sind dann folgende Einträge erforderlich:
keys /etc/ntp/keys keysdir /etc/ntp/ trustedkey 10 requestkey 10 restrict 127.0.0.1
- Das Script Server_Installation/ntpdrehash als /usr/local/bin/ntpdrehash ablegen:
- Und schliesslich /etc/ppp/ip-up.d/70ntpdrehash anlegen:
#!/bin/sh /usr/local/bin/ntpdrehash | ntpdc &
MTA (Mail Transfer)
Es ist sinnvoll einen MTA zu konfigurieren damit Statusmeldungen per Mail an unser administratives Postfach noc@opennet-initiative.de geschickt werden können. Wir benutzen dazu einen gemeinsamen Relayhost mit SMTP Auth unter postfix auf jedem Gateway.
Benötigte Pakete: postfix (bei der Debian installation Satellite system auswählen)
Konfiguriert wird Postfix über /etc/postfix/main.cf.
# hostname/domain definition # myhostname = <host> # (nicht zwingend erforderlich. Inhalt von /etc/hostname wird verwendet) mydomain= opennet-initiative.de # Sollte mit dem DNS Namen fuer unsere ip uebereinstimmen # Ist nicht zwingend erforderlich wenn wir smtp-auth verwenden # smtp_helo_name = defaultroute=$(route -n|grep ^0.0.0.0); defaultif=${defaultroute##* }; ipaddr=$(ifconfig $defaultif|grep "inet addr"); ipaddr2=${ipaddr##*inet addr:}; dig -x ${ipaddr2%% *} #smtp_helo_name = FQDN.opennet-initiative.de # myorigin wird an lokal generierte Mails angehaengt. Sollte deswegen eine Domain sein die # Mails empfangen kann und wo es Postfaecher fuer root, cron usw. gibt. myorigin = $mydomain # Aliase für lokale User alias_maps = hash:/etc/aliases # Postfix ist nur fuer localhost zuständig mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 inet_interfaces = loopback-only # IPv6 inet_protocols = all # alle Mails sollen über unseren Relayhost gesendet werden # (mit Dynamischen IP's und ohne PTR-Record sollte man lieber keine Mails versenden) relayhost = relayhost.opennet-initiative.de # Zum authentifizieren beim Relayhost benötigen wir SMTP Auth # ''/etc/postfix/sasl_passwd'' hat folgendes Format # hostname user:pass # Wichtig: es müssen folgende pakete installiert sein: libsasl2-2 libsasl2-modules # smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd smtp_sasl_security_options = # der relayhost erlaubt smtp-auth nur verschlüsselt smtp_use_tls = yes
Mail-Namen in /etc/mailname anlegen:
<host>.opennet-initiative.de
Alias-Namen in /etc/aliases anlegen:
postmaster: root abuse: root admin: root root: noc@opennet-initiative.de
Die Datei /etc/postfix/sasl/passwd anlegen und aktuellen Inhalt besorgen (z.B. von einem schon bestehenden Gateway). Danach noch die Datenbank Version der Datei mit postmap generieren und Zugriffsrechte setzen.
postmap /etc/postfix/sasl/passwd chown root.root /etc/postfix/sasl/passwd*; chmod 600 /etc/postfix/sasl/passwd*
Zudem ist noch eine kleine Änderung an /etc/postfix/master.cf notwendig. Damit legen wir fest das Postfix nur am lo-Interface lauscht:
sed -i -e "s/\(^smtp.*smtpd.*$\)/127.0.0.1:\1/" master.cf
Damit Nachrichten an den Nutzer root generell weitergeleitet werden, in die /etc/aliases den Eintrag root: noc@opennet-initiative.de setzen.
Häufig benötigte Kommandos:
- Konfiguraion neuladen: postfix reload
- Default Konfiguration ausgeben: postconf -d
- Nach Änderungen an /etc/aliases: postalias /etc/aliases
- Warteschlange prüfen: postqueue -p oder mailq
- Warteschlange manipolieren siehe man postsuper
- Versandlogging erfolgt über mail.* nach: /var/log/mail.log
- Fehler werden nach /var/log/syslog geschrieben
- Versand prüfen: echo "testmail" > mailx -s testmail <user> (z.B. <user>=root)
Policy Routing
Für Server wird inzwischen Policy Routing verwendet, um die lokalen Routen (z.B. zum Default-GW) von den Opennet-internen OLSR Routen zu trennen.
- Paket iproute installieren
- /etc/iproute2/rt_tables ergänzen:
250 hardroutes
- /etc/network/if-up.d/policy_routing.sh erstellen, ggf. Interface anpassen
#!/bin/sh if [ $IFACE = 'eth0' ] ; then # leave those to olsr ip route add throw 192.168.0.0/16 table hardroutes ip route add throw 10.0.0.0/8 table hardroutes # everything else, send through the gateway to the rest of the world ip route add 0.0.0.0/0 via $IF_GATEWAY table hardroutes ip rule add table hardroutes pref 10 fi
- bei User-GW Server in /etc/network/interfaces ergänzen:
auto lo:0 iface lo:0 inet static address 192.168.0.247 netmask 255.255.255.255
VPN-Status
- Original-Skript http://pablohoffman.com/software/vpnstatus/vpnstatus.txt
- leicht angepasst für Opennet Bedürfnisse
- Zugriff in openvpn-conf erlauben: management localhost <port>
Dienste Server
Basisinstallation
- Booten, z.B. per CD oder PXE mit Knoppix
- Dateisystem vorbereiten:
- cfdisk /dev/<device>, z.B. /dev/hda (IDE) oder /dev/sda (SCSI)
- primäre Partitionen: 32 MB boot (Typ 83 + bootable), 500 MB swap (Typ 82), Rest für / (Typ 83)
- boot mit EXT2: mkfs.ext2 /dev/<device>1
- swap mit SWAP: mkswap /dev/<device>2
- root mit XFS: mkfs.xfs /dev/<device>3
- Debian (aktuelle Stable) installieren
- a) Neuinstallation, vgl. Debian GNU/Linux-Installationsanleitung
- c) per debootstap von Knoppix aus, vgl. Debian GNU/Linux-Installationsanleitung - C.4
- b) als Kopie von vorhandenem GW, z.B. izumi
- Filesysteme auf izumi ggf. mounten, crontab Einträge ggf. deaktivieren (CPU-Last)
- boot einbinden: mount /dev/<device>1 /mnt/
- boot spiegeln: rsync -axz --numeric-ids root@izumi.on:/boot/ /mnt/
- root einbinden: umount /mnt; mount /dev/<device>3 /mnt/
- root spiegeln: rsync -axz --numeric-ids root@izumi.on:/ /mnt/
- Minimale Device-Nodes anlegen (bei UDEV): MAKEDEV null console zero
Hilfsmittel: RAID mit mdadm
- spezieller Partitionstyp FD (Linux raid autodetect), mit cfdisk einstellen
- direkt: mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda3 /dev/hdc3
- oder auch schrittweise:
- mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda3 missing
- Daten in /hda3 einspielen
- mdadm --manage /dev/md0 --add /dev/hdc3
- Status prüfen per: mdadm --detail /dev/md0
Grub2
- Grub2 installieren und Kernel einbinden
grub-install /dev/hdX update-grub
- Grub2 Installation ggf. später wieder anpassen
dpkg-reconfigure grub-pc
- Kontrolle über /boot/grub/grub.cfg und /boot/grub/device.map und ggf.
grub-install --recheck /dev/hdX
Minimalkonfiguration
- Hostname /etc/hostname + /etc/mailname
- Zeitzone /etc/timezone -> UTC
- Kernelmodule /etc/modules
- Dateisysteme /etc/fstab
/dev/<device>1 /boot ext2 noauto,noatime 1 1 /dev/<device>3 / xfs noatime 0 0 /dev/<device>2 none swap sw 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0
Virtualisierung
Bezüglich KVM siehe Server Installation/KVM.
Dienste
Ferm (Firewall)
Siehe Server Installation/ferm.
Trac (Projektmanagement)
Siehe Server Installation/Trac.
MediaWiki
Siehe Server Installation/MediaWiki.
Monitoring
apticron
Derzeit nicht verwendet, liefert zu häufig Fehler.
- prüft den Update Status des Debian OS
- Default-Installation ausreichend, liefert Änderungen per Mail an root
- werden durch postfix dann automatisch an das ONI-NOC gesendert
munin
- erzeugt Graphen zum Systemzustand, inbesondere Netztraffic
- Default-Installation ausreichend, Zugriff via Web (apache)
- Allow from All in /etc/apache2/conf.d/munin aufnehmen
monit
- Debian Default-Installation ausführen und Config-File ersetzen
- Check auf Default-GW (IP) und PID-Files (Pfade) prüfen
- überwacht dann dauerhaft Prozesse und startet diese ggf. neu
- Zugriff per https://<host> und Username/Passwort (siehe Config-File)
vnstat
- vnstat installieren: apt-get install vnstat; vnstat -u -i <wan-interface>
- wird regelmässig durch den cron gestartet
- Werte können an der Console abgefragt werden, z.B. Monatswerte per vnstat -m
logcheck
- prüft Logdateien auf Anomalien und sendet dieses per E-Mail
- Installation per apt-get install logcheck und Konfiguration von /etc/logcheck/logcheck.conf:
FQDN=0 MAILASATTACH=0 REPORTLEVEL="server" SENDMAILTO="noc@opennet-initiative.de" TMP="/tmp"
- Ausnahmen bitte in /etc/logcheck/ignore.d.server/opennet ablegen
Nagios
- Generator-Skript für AP-Überwachung - nagios_opennet_gen.sh
#!/bin/bash i=0 while [ $i -le 255 ] do i=$[$i+1] echo "define host { host_name #NUMBER#.aps.on use generic-host }" | sed -s "s/#NUMBER#/$i/" >> nagios_opennet.conf done exit 0
- Deaktivierung von E-Mail-Benachrichtung - contacts_nagios2.cfg
service_notification_options n host_notification_options n
Backup
Tartarus
- externes Backup der Server
- Start via /etc/crontab
15 4 2-31 * * root /usr/sbin/tartarus -i /etc/tartarus/www.conf >> /var/log/tartarus.log 2>&1 15 4 1 * * root /usr/sbin/tartarus /etc/tartarus/www.conf >> /var/log/tartarus.log 2>&1
Karten-Software
Die Opennet-Karten basieren auf den Link Quality Daten die OLSR bereit stellt. Ein PHP Script bereitet diese Daten auf und legt sie auf dem Webserver in einem Textfile ab. Es gibt die Übersichtskarten und die AP-Positionskarten.
Übersichtskarten
Die Übersichtskarten werden über ein iFrame und der URL wiki.opennet-initiative.de/osm.php?lat=54.085&lng=12.12&zoom=14&maptype=gmap in Wiki-Seiten eingebunden. Statt dem Maptype gmap kann man auch mapnik verwenden. Mapnik Karten basieren auf dem Kartendaten von Openstreetmap.
AP-Positionskarten
Durch das Wiki-Plugin OnApPos lassen sich Karten erzeugen die einen AP und dessen Nachbarn darstellt. Um z.B. eine Karte für AP100 und dessen Nachbarn zu erzeugen würde man folgendes einfügen:
<OnApPos>100</OnApPos>
Damit die Karte passend am rechten Rand positioniert wird kann man folgende Vorlage verwenden:
{{Accesspoint Kartenposition|ap=100}}
PHP Link Quality Script
Wir befinden uns auf dem Webserver. Über ein Cron Script (/usr/local/sbin/get_topo) werden alle 60 Sekunden per OLSR-TXT Plugin die Topo und HNA Informationen ausgelesen und in Text Dateien (/var/www/olsrtopo/hna|topo) geschrieben. Diese werden anschließend über das PHP Script /var/www/olsrtopo/engine.php ausgewertet. Das Ergebnis ist die Datei /var/www/olsrtopo/topo_output.csv die als Grundlage für die Karten-Scripte dient.
Das Script engine.php führt folgende Aktionen aus.
- HNA's aus /var/www/olsrtopo/hna einlesen.
- AP Liste im Wiki Parsen und Koordinaten sammeln.
- Topo aus /var/www/olsrtopo/topo einlesen.
- Netz Qualität der einzelnen AP's berechnen. Dabei wird von den AP's ausgegangen die direkten Kontakt mit einem Gateway haben das HNA's ausgibt. Von hier werden absteigend die Links verfolgt. Die LQ eines AP's ist die LQ des schlechtesten Link zum nächsten Gateway.
- Liste mit Links zwischen den AP's ausgeben.
- Liste mit AP's ausgeben.
- Die Daten landen in topo_output.csv.
- Daten werden ein mal pro Minute aktualisiert.
Python Link Quality Script
Das Python Script (von sh01) läuft auf Opennet_Server/heartofgold und verwendet ein spezielles OLSR Plugin um an die LQ Daten zu kommen. Die Daten landen auf Opennet_Server/heartofgold in /var/www/htdocs/topology/olsr/alfredi_output.csv. Das passiert alle 5 Minuten durch einen Cronjob.
Auf www.on-i.de läd ein weiterer Cronjob /usr/local/sbin/olsrtopoloader alle 5 Minuten die csv-Datei auf den Webserver nach /var/www/olsrtopo/alfredi_output_old.csv. Durch zwei Mediawiki Erweiterungen können die Informationen nun im Wiki angezeigt werden. Diese Daten werden aktuell nicht verwenden. Zum Vergeichen der Karten kann man alfredi_output_old.csv nach topo_output.csv kopieren.
OpenLayers Karte
- siehe Geronimo (früher Openlayers)
- aufgeteilt in Programmteil (nicht öffentlich, /var/www/map/) und Webanteil (öffentlich, /var/www/htdocs/map/)
- Triggern von www.opennet-initiative.de/api/ auf /var/www/map/src/geronimoCGI.py mittels WSGI
- Crontab notwendig (Zugriffsdaten Wikibot einsetzen) mit
*/10 * * * * /var/www/map/geronimo.py