Server Installation: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(MediaWiki Doku)
(MTA (Mail Transfer))
Zeile 233: Zeile 233:
 
# ''/etc/postfix/sasl_passwd'' hat folgendes Format
 
# ''/etc/postfix/sasl_passwd'' hat folgendes Format
 
# hostname user:pass  
 
# hostname user:pass  
# Wichtig: es muss libsasl2-2 und libsasl2-modules installiert sein
+
# Wichtig: es müssen folgende pakete installiert sein: libsasl2-2 libsasl2-modules
 
#
 
#
 
smtp_sasl_auth_enable = yes
 
smtp_sasl_auth_enable = yes
 
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
 
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
 
smtp_sasl_security_options =  
 
smtp_sasl_security_options =  
smtp_use_tls = yes # der relayhost erlaubt smtp-auth nur verschlüsselt
+
# der relayhost erlaubt smtp-auth nur verschlüsselt
 +
smtp_use_tls = yes
 
</pre>
 
</pre>
  

Version vom 7. März 2012, 23:12 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
  • 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

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

Grub2

  • Grub2 installieren und Kernel einbinden
grub-install /dev/hdX
update-grub
  • 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

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 Projekt Openlayers
  • aufgeteilt in Programmteil (nicht öffentlich, /var/www/map/) und Webanteil (öffentlich, /var/www/htdocs/map/)
  • Crontab notwendig (Zugriffsdaten Wikibot einsetzen) mit
*/10 * * * * /var/www/map/start.py -u Geronimo -p <secret> >/dev/null
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge