Gateway Installation: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(MTA (Mail Transfer))
(MTA (Mail Transfer))
Zeile 319: Zeile 319:
 
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.
 
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 libsasl2-modules postfix-tls (''bei der Debian installation '''Satellite system''' auswählen'')
+
'''Benötigte Pakete:''' postfix (''bei der Debian installation '''Satellite system''' auswählen'')
  
 
Konfiguriert wird Postfix über ''/etc/postfix/main.cf''.  
 
Konfiguriert wird Postfix über ''/etc/postfix/main.cf''.  
Zeile 348: Zeile 348:
 
smtp_sasl_security_options =  
 
smtp_sasl_security_options =  
 
</pre>
 
</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 generieren (''postmap /path/passwd'').
 
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 generieren (''postmap /path/passwd'').

Version vom 7. März 2009, 10:54 Uhr

Kurzer Leitfaden für das Aufsetzen neuer Vereinsgateways.

Inhaltsverzeichnis

Hardware

  • sinnvoll >500 Mhz CPU, >256 MB RAM
  • mindestens 2 NICs
  • ausreichend HD-Kapazität; ideal SCSI (z.B. U2W), alternativ IDE (mit z.B. RAID1)

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 (bevorzugt Testing) 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
  • Bootloader installieren (grub):
    • via chroot und grub-Skripte: (chroot...); grub-install --no-floppy /dev/<device>; update-grub
    • oder manuell, dabei /boot/grub/menu.lst selbst anpassen/erstellen: grub --no-floppy (root (hd0,0) / setup (hd0) / quit)
  • Kernel bauen / aktualisieren
    • cd /usr/src/linux; make menuconfig; make; make install; make modules_install; update-grub
    • ggf. local-version neu setzen


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

Konfiguration

Allgemeines

  • 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

Netzwerk-Geräte

PPP bzw. DynIP
  • Ethernet /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet static
  address 192.168.0.X
  netmask 255.255.0.0
  network 192.168.0.0
  broadcast 192.168.255.255
auto <peername>
iface <peername> inet ppp
provider <peername>
  • PPP /etc/ppp/*
    • /etc/ppp/pap-secrets -> "<account>" * "<password>"
    • /etc/ppp/peers/<peername>, Defaults mit:
logfile /var/log/pppd/qsc-dsl.log
#defaultroute
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap
plugin rp-pppoe.so eth0
user "<account>"
  • ln -s /etc/ppp/peers/<peername> /etc/ppp/peers/provider
  • mkdir /var/log/pppd
  • /etc/ppp/ip-up.d
#!/bin/sh
# default routes
route add -net 0.0.0.0/1 gw $PPP_REMOTE
route add -net 128.0.0.0/1 gw $PPP_REMOTE
# uni rostock
route add -net 139.30.0.0/16 gw $PPP_REMOTE
# ipkg repositories
route add -host 195.56.146.238 gw $PPP_REMOTE
route add -host 212.91.225.42 gw $PPP_REMOTE
# wikipedia
route add -net 207.142.131.192/26 gw $PPP_REMOTE
route add -net 145.97.39.128/28 gw $PPP_REMOTE
route add -net 212.85.150.128/28 gw $PPP_REMOTE
# www.opennet-initiative.de
route add -net 80.86.178.0/24 gw $PPP_REMOTE
# rostock.de
route add -net 195.37.188.160/28 gw $PPP_REMOTE
  • /etc/ppp/ip-down.d/00routes - analog nur s/add/del
Statische IP
  • 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_gateways (VPN Backbone) | opennet_users (VPN Internet-Zugang für Nutzer)
    • /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 (Common Name = <hostname>.on)
    • 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"

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.7 {
       keys dnskey.opennet;
};
options {
  directory "/var/cache/bind";
  forward first;
  forwarders {
    <isp-dns1>;
    <isp-dns2>;
    192.168.0.254;
  };
  auth-nxdomain no;    # conform to RFC1035
  listen-on {
    127.0.0.1;
    <gateway-ip>
  };
  # ignoriert unterstrich in Domainnamen vom ON 
  check-names slave ignore;
};

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.7;};
};

//on - reverse

zone "168.192.in-addr.arpa" {
        type    slave;
        file    "db.192.168";
        masters {139.30.241.7;};
};

//on-vpn - reverse
zone "1.10.in-addr.arpa" {
        type    slave;
        file    "db.10.1";
        masters {139.30.241.7;};
};

//on-ugw - reverse
zone "2.10.in-addr.arpa" {
        type    slave;
        file    "db.10.2";
        masters {139.30.241.7;};
};
  • 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
  • OpenVPN-Status-Skript anpassen unter /root/tasks/openvpn-users-status.py: host = '<hostname>.on'

NTP-Server

  • ntpdate und ntpd installieren
  • beide beim Systemstart starten lassen (zur Sicherheit zuerst ntpdate, dann ntpd)
  • ntpd hat Probleme mit dynamisch wechselnen IP Adressen. Im Daemon Log finden sich Einträge wie ntpd[2466]: sendto(83.67.66.148): Invalid argument. Ich würde hier vorschlagen ntpdate in crontab einzutragen.
  • ntpdate als cronjob hat wirklich unschöne Resultate. Ich bin dafür den ntpd ohne restart davon zu überzeugen, die neue global ip zu nutzen. Zur Nutzung des management-sockets sind zunächst keys zu erstellen:
  • 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>
mydomain= opennet-initiative.de

# myorigin wird an lokal generierte mails angehaengt
myorigin = $myhostname.$mydomain

# Aliase für lokale User
alias_maps = hash:/etc/aliases

# Postfix ist nur fuer localhost zuständig
mynetworks = 127.0.0.0/8

# 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 
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = 

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 generieren (postmap /path/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)

Datenbank

Wir benutzen entweder PostgreSql oder MySql.

Postgre-Tunning:

  • /etc/postgresql-common/autovacuum.conf : avac_sleep_base=3000

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

Opennet Tools

Erläuterungen sie auch Gateway_Installation/Opennet Tools Übersicht.

Teucrium (Traffic Graphen)

siehe Gateway_Installation/Teucrium Setup

Traffic Shaping

siehe Gateway_Installation/Traffic Shaping

ON Webstat (Gateway Status)

  • Nuter on-webstat anlegen: useradd -m on-webstat
  • /etc/sudoers ergänzen, via visudo bearbeiten: on-webstat ALL = NOPASSWD: /usr/sbin/rndc status
  • aktuelles Webstat-Archiv nach /home/on-webstat übernehmen (z.B. svn checkout svn://svn.opennet-initiative.de/on_webstat/trunk/; mv trunk/* .; rm -rf trunk)
  • Verzeichniss /var/www/on_webstat anlegen, Gruppe/Owner auf on-webstat
  • crontab für Nutzer on-webstat einrichten
  • Abhängigkeiten:
    • Apache Server Status aktivieren, /etc/apache2/apache2.conf:
<Location /server-status>
   SetHandler server-status
   Order deny,allow
   Deny from all
   Allow from 192.168.0.0/255.255.0.0
   Allow from 127.0.0.1
</Location>
  • vnstat installieren: apt-get install vnstat; vnstat -u -i eth0
  • uptimed installieren via apt-get install uptimed und /etc/uptimed.conf mit:
UPDATE_INTERVAL=60
LOG_MAXIMUM_ENTRIES=50
LOG_MINIMUM_UPTIMED=1h
MAIL_MINIMUM_UPTIME=1d
MAIL_MINIMUM_POSITION=10
EMAIL=root@localhost
SEND_EMAIL=1
SENDMAIL=/usr/lib/sendmail -t
PIDFILE=/var/run/uptimed
MILESTONE=1d:one day [..]
  • uprecords-cgi installien:
  • apt-get install uprecords-cgi (table, 10 max)
  • Header und Footer Dateien in /etc/uprecords-cgi/ leeren
  • Apache absichern in /etc/apache2/sites-enabled/000-default cgi-bin Pfad raus
  • Leserechte für conf-Datei: chmod +r /etc/uprecords-cgi/uprecords.conf
  • Leserechte für VPN-Status: chmod +r /var/log/openvpn/*status*

Trac (Projektmanagement)

siehe Gateway Installation/Trac Install

Experimentell

tinc

  • Tinc installieren: apt-get install tinc; cd /etc/tinc/; mkdir on_backbone; mkdir on_backbone/hosts
  • Netz zum Starten hinzufügen: "on_backbone" nach /etc/tinc/nets.boot eintragen
  • Config-File tinc.conf unter /etc/tinc/on_backbone/:
Name=<gw-alias>
Device=/dev/net/tun
BindToAddress=<gw-external-ipaddr>
ConnectTo=<remote-alias>
  • Host-Files als <alias> unter /etc/tinc/on_backbone/hosts/:
Address=<fqhn>
Subnet=<net>/<mask>
  • ggf. neues Keypaar erzeugen: tincd -n on_backbone -K
  • ggf. Host-Files mit ihren Public-Keys ergänzen
  • netfilter Regeln erweitern (z.B. in ON-gatewaysetup.sh):
    • TCP: iptables -A external_in -i <external-if> -p tcp --dport 655 -j RETURN
    • UDP: iptables -A external_in -i <external-if> -p udp --dport 655 -j RETURN
  • Starten: /etc/init.d/tinc start
  • Logfile prüfen: grep tinc /var/log/daemon.log

TODO's

  • Netfilter
  • Wie funktioniert die ACL synchronisation?
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge