|
|
(3 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | Kurzer Leitfaden für das Aufsetzen neuer Vereinsgateways.
| + | #REDIRECT [[Server Installation]] |
− | | + | |
− | === Basisinstallation ===
| + | |
− | | + | |
− | Allgemeines zur Grundinstallation und zum Monitoring siehe [[Server Installation]].
| + | |
− | | + | |
− | === 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 /etc/olsrd.conf, Defaults mit:
| + | |
− | UseHysteresis no
| + | |
− | LinkQualityLevel 2
| + | |
− | Interface "eth1" { <defaults> }
| + | |
− | Hna4
| + | |
− | {
| + | |
− | # university rostock
| + | |
− | 139.30.0.0 255.255.0.0
| + | |
− | # ipkg repositories
| + | |
− | 195.56.146.238 255.255.255.255
| + | |
− | 212.91.225.42 255.255.255.255
| + | |
− | # wikipedia
| + | |
− | 207.142.131.192 255.255.255.192
| + | |
− | 145.97.39.128 255.255.255.240
| + | |
− | 212.85.150.128 255.255.255.240
| + | |
− | # www.opennet-initiative.de
| + | |
− | 80.86.178.0 255.255.255.0
| + | |
− | # www.rostock.de
| + | |
− | 195.37.188.160 255.255.255.240
| + | |
− | }
| + | |
− | | + | |
− | * 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:
| + | |
− | | + | |
− | <pre>
| + | |
− | 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; };
| + | |
− | };
| + | |
− | </pre>
| + | |
− | | + | |
− | * /etc/bind/named.conf.local:
| + | |
− | | + | |
− | <pre>
| + | |
− | // 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;};
| + | |
− | };
| + | |
− | </pre>
| + | |
− | | + | |
− | * 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 [[Gateway_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''.
| + | |
− | | + | |
− | <pre>
| + | |
− | # 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 muss libsasl2-2 und libsasl2-modules installiert sein
| + | |
− | #
| + | |
− | smtp_sasl_auth_enable = yes
| + | |
− | smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
| + | |
− | smtp_sasl_security_options =
| + | |
− | smtp_use_tls = yes # der relayhost erlaubt smtp-auth nur verschlüsselt
| + | |
− | </pre>
| + | |
− | | + | |
− | 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>''
| + | |
− | | + | |
− | [[Kategorie:Konfiguration]]
| + | |