Tips und Tricks
Aus LUG-TS
Inhaltsverzeichnis |
Entropy Pool vergrößern
Ein leidiges Thema auf vielen Linux Maschinen ist ein zu geringer Wert im Entropy-Pool. Der aktuelle Wert kann so ermittelt werden:
# cat /proc/sys/kernel/random/entropy_avail
Ein voller Pool wird zur Erstellung von z.b SSL-Keys benötigt welche auf zufällige Werte bei der Generierung zurück greifen.
Ist dieser Wert sehr gering, sprich kleiner als ~ 200-300 dauert die Erstellung zu lange und der Server der z.b den Key verwenden will, unterbricht die Arbeit.
Konkret kann dies z.b Exim4 mit saslauthd sein welcher zum verschlüsselten Mail-Versand TLS verwendet.
Der Entropy-Pool wird durch /dev/random gefüttert welches seine zufälligen Werte aus folgenden Aktionen erhällt. Die Reihenfolge ist geordnet nach der Leistung des Inputs für /dev/random
- Maus-Bewegungen
- Tastatur-Eingaben
- Netzwerkverkehr
- HDD-Last
Um dies nachzustellen verwenden wir rngd-tools
Diese können unter Debian mit folgendem Befehl installiert werden:
# apt-get install rngd-tools
Nach der Installation versucht das Script den rngd Daemon automatisch zu starten, was in den meisten Fällen nicht klappen wird, da ein Hardware-Nummer-Generator fehlt, bzw. das benötigte Kernel-Modul.
In unserem Fall spielt das keine Rolle, da wir uns auf eine andere Quelle bezüglich der Zufallswerte verlassen.
wir starten den Daemon manuelle mit folgenden Werten:
# rngd -b -r /dev/urandom (-b für background -r für die zu schöpfende Quelle)
nach diesem Eingriff ist der Entropy-Pool prall gefüllt:
# cat /proc/sys/kernel/random/entropy_avail 11182
Anmerkung: Falls sich wer über den enorm hohen Entropy-Wert wundert, der wurde über die GRSEC Option verdoppelt, welcher ähnlich wie über die Werte in /proc/sys/kernel/random/poolsize agiert.
Automatisierung: Die Optionen für -b und -r können unter /etc/defaul/rngd-tools eingetragen werden und können so über das init script (etc/init.d/rgnd-tools) gestartet werden.
Programme mit Super User Rechten ausführen
Nicht immer ist es gewollt, Benutzern vollen Root Zugriff zu überlassen, wenn sie lediglich ein Programm mit höheren Rechten ausführen müssen. In diesem Fall kommt sudo zum Einsatz.
Standardmäßig ist sudo auf fast allen Systemen vorhanden, wobei lediglich die Konfiguration noch individuell angepasst werden muss.
Die Konfiguration befindet sich unter /etc/sudoers und muss als root bearbeitet werden um Veränderungen an den Schreibrechten zu vermeiden.
sudoedit /etc/sudoers
wir ergänzen die folgende Datei um weitere Einträge:
Host_Alias SEC=IP-Adresse oder Hostname auf dem der Befehl verwendet wird User_Alias OP=Benutzer dem der Zugriff erlaubt wird Cmnd_Alias LSOF=/usr/bin/lsof (Pfad zur zu berechtigenden Datei) OP SEC=LSOF
Nach erfolgreicher Bearbeitung ist es dem definierten Benutzer möglich, das Programm lsof
mit Root Rechten auszuführen.
VPN Server in 10 Minuten
Wir ermöglichen einem Heim-Anwender die Einwahl in sein Firmen-Netzwerk um dort auf Daten einzelner PC's zuzugreifen.
Szenario:
- Netzwerk 1: Privatperson mit Windows 2000 Computer. Zugang zur Aussenwelt über einen Router
- Netzwerk 2: Firmennetzwerk mit mehreren Rechnern. Zugang ebenfalls über einen Router
Adressen der einzelnen Netzwerke: (kann beliebig geändert werden)
Netzwerk1:
- Windows PC
Netzwerk2:
- Linux Server + Gateway ins Internet und zukünftiger VPN Server (interne Adresse 192.168.0.80) (externe vpn.firmennetzwerk.de)
- Windows Client (interne 192.168.0.100)
- Linux Client (interne 192.168.0.23)
Hinweis: Die internen Geräte verfügen ausserhalb über die externe vpn.firmennetzwerk.de Adresse da diese einfach durch geroutet werden
Einrichten des Servers: (192.168.0.80)
auf der Shell als Hauptbenutzer (root)
apt-get install openvpn
Nach erfolgreicher Installation erstellen wir eine /etc/openvpn/server.conf mit folgendem Inhalt
# der server lauscht auf port #1194 udp port 1194 proto udp dev tun # wir verwenden testweise vorgefertigte zertifikate aus # /usr/share/doc/openvpn/examples/... # um einen ersten funktionstest zu machen, bitte nachher ändern ca tmp-ca.crt dh dh1024.pem cert server.crt key server.key # dieser befehl teilt dem server öfter mit, # ob sich clients verabschiedet haben ping 10 ping-restart 120 # verteilt den PC's die sich anmelden am Server IP'Adressen server 10.8.0.0 255.255.255.0 # übergebe die route für die sich anzumeldenen clients damit diese in das "andere" (interne!) netzwerk können) push "route 192.168.0.0 255.255.255.0" comp-lzo #vermeidet verwerfen der daten persist-key persist-tun #schreibt zusätzliche log datei nach status openvpn-status.log verb 3 mute 5
auf dem Client Windows 2000 PC laden wir uns von der Openvpn.org Seite den Windows-Installer http://openvpn.net/download.html
wir starten diesen, belassen alle Settings wärend der Installation bei den Standard Werten und finden im Anschluss ein Verzeichnis ala C:\Programme\OpenVPN\...
in dieses kopieren wir noch die Test-Zertifkikate vom Linux-Server (192.168.0.80) aus /usr/share/doc/openvpn/examples/...
exakt benötigt werden:
- ca.crt
- client.crt
- client.key
Jetzt erstellen wir noch schnell die client.ovpn Datei im selben Ordner.
In dieser landen unsere client-einstellungen für die Anmeldung am VPN-Server:
#wir sind der client client #interface tun dev tun #hier steht TUN-TAP-OPENVpn für den Gerätenamen der Verbindung #bitte anpassen, rechtsklick netzwerkumgebung und namen #des gerätes eintragen dev-node TUN-TAP-OPENVpn #protokoll udp proto udp #ip des vpn servers ( hier ist die externe ip natürlich einzutragen #noch sind wir nicht teil des netzwerkes remote vpn.firmennetzwerk.de 1194 resolv-retry infinite ping 10 ping-restart 60 nobind persist-key persist-tun #hier defineren wir die test-zertifikate #bitte nach erfolgreicher prüfung neue certs erstellen! ca ca.crt cert client.crt key client.key comp-lzo verb 3 mute 5
Nun wo die Konfigurationen korrekt angelegt wurden starten wir auf dem VPN-Server den OpenVPN Dienst mit
openvpn /etc/openvpn/server.conf
Die Ausgabe sollte in etwa so lauten:
Mon Jul 17 21:40:15 2006 OpenVPN 2.0.5 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Nov 7 2005 Mon Jul 17 21:40:15 2006 Diffie-Hellman initialized with 1024 bit key Mon Jul 17 21:40:15 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Mon Jul 17 21:40:15 2006 TUN/TAP device tun0 opened Mon Jul 17 21:40:15 2006 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 Mon Jul 17 21:40:15 2006 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2 Mon Jul 17 21:40:15 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Mon Jul 17 21:40:15 2006 UDPv4 link local (bound): [undef]:1194 Mon Jul 17 21:40:15 2006 UDPv4 link remote: [undef] Mon Jul 17 21:40:15 2006 MULTI: multi_init called, r=256 v=256 Mon Jul 17 21:40:15 2006 IFCONFIG POOL: base=10.8.0.4 size=62 Mon Jul 17 21:40:15 2006 Initialization Sequence Completed Mon Jul 17 21:40:16 2006 MULTI: multi_create_instance called Mon Jul 17 21:40:16 2006 80.226.165.1:4608 Re-using SSL/TLS context Mon Jul 17 21:40:16 2006 80.226.165.1:4608 LZO compression initialized Mon Jul 17 21:40:16 2006 80.226.165.1:4608 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Mon Jul 17 21:40:16 2006 80.226.165.1:4608 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Mon Jul 17 21:40:16 2006 80.226.165.1:4608 Local Options hash (VER=V4): '530fdded' Mon Jul 17 21:40:16 2006 80.226.165.1:4608 Expected Remote Options hash (VER=V4): '41690919' Mon Jul 17 21:40:16 2006 80.226.165.1:4608 TLS: Initial packet from 80.226.165.1:4608, sid=72774c57 d8076560 Mon Jul 17 21:40:19 2006 80.226.165.1:4608 VERIFY OK: depth=1, Mon Jul 17 21:40:19 2006 80.226.165.1:4608 VERIFY OK: depth=0, Mon Jul 17 21:40:20 2006 80.226.165.1:4608 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Mon Jul 17 21:40:20 2006 80.226.165.1:4608 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Jetzt starten wir den Windows-Client mit
Rechtsklick auf das client.ovpn Symbol und Auswahl von "Start OpenVPN on this config file"
die Ausgabe lautet in etwa:
Mon Jul 17 21:19:15 2006 OpenVPN 2.0.7 Win32-MinGW [SSL] [LZO] built on Apr 12 2
006
Mon Jul 17 21:19:15 2006 LZO compression initialized
Mon Jul 17 21:19:15 2006 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:
0 EL:0 ]
Mon Jul 17 21:19:16 2006 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:
0 EL:0 AF:3/1 ]
Mon Jul 17 21:19:16 2006 Local Options hash (VER=V4): '41690919'
Mon Jul 17 21:19:16 2006 Expected Remote Options hash (VER=V4): '530fdded'
Mon Jul 17 21:19:16 2006 UDPv4 link local: [undef]
Mon Jul 17 21:19:16 2006 UDPv4 link remote: 213.54.214.134:1194
Mon Jul 17 21:19:16 2006 TLS: Initial packet from 213.54.214.134:1194, sid=7374b
72c 10722f67
Mon Jul 17 21:19:18 2006 VERIFY OK: depth=1, /C=KG/ST=NA/L=BISHKEK/O=OpenVPN-TES
T/emailAddress=me@myhost.mydomain
Mon Jul 17 21:19:18 2006 VERIFY OK: depth=0, /C=KG/ST=NA/O=OpenVPN-TEST/CN=Test-
Server/emailAddress=me@myhost.mydomain
Mon Jul 17 21:19:20 2006 Data Channel Encrypt: Cipher 'BF-CBC' initialized with
128 bit key
Mon Jul 17 21:19:20 2006 Data Channel Encrypt: Using 160 bit message hash 'SHA1'
for HMAC authentication
Mon Jul 17 21:19:20 2006 NOTE: --mute triggered...
Mon Jul 17 21:19:20 2006 3 variation(s) on previous 5 message(s) suppressed by -
-mute
Mon Jul 17 21:19:20 2006 [Test-Server] Peer Connection Initiated with 213.54.217
.134:1194
Mon Jul 17 21:19:21 2006 SENT CONTROL [Test-Server]: 'PUSH_REQUEST' (status=1)
Mon Jul 17 21:19:22 2006 PUSH: Received control message: 'PUSH_REPLY,route 192.1
68.0.0 255.255.255.0,route 10.8.0.1,ifconfig 10.8.0.6 10.8.0.5'
Mon Jul 17 21:19:22 2006 OPTIONS IMPORT: --ifconfig/up options modified
Mon Jul 17 21:19:22 2006 OPTIONS IMPORT: route options modified
Mon Jul 17 21:19:22 2006 TAP-WIN32 device [TUN-TAP-OPENVpn] opened: \\.\Global\{
9F306348-8A69-4F6C-B81D-0251192E835F}.tap
Mon Jul 17 21:19:22 2006 TAP-Win32 Driver Version 8.1
Mon Jul 17 21:19:22 2006 TAP-Win32 MTU=1500
Mon Jul 17 21:19:22 2006 Notified TAP-Win32 driver to set a DHCP IP/netmask of 1
0.8.0.6/255.255.255.252 on interface {9F306348-8A69-4F6C-B81D-0251192E835F} [DHC
P-serv: 10.8.0.5, lease-time: 31536000]
Mon Jul 17 21:19:22 2006 Successful ARP Flush on interface [16777220] {9F306348-
8A69-4F6C-B81D-0251192E835F}
Mon Jul 17 21:19:22 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Mon Jul 17 21:19:22 2006 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 17 21:19:23 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Mon Jul 17 21:19:23 2006 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 17 21:19:24 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Mon Jul 17 21:19:24 2006 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 17 21:19:25 2006 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Mon Jul 17 21:19:25 2006 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 17 21:19:26 2006 TEST ROUTES: 2/2 succeeded len=2 ret=1 a=0 u/d=up
Mon Jul 17 21:19:26 2006 route ADD 192.168.0.0 MASK 255.255.255.0 10.8.0.5
Mon Jul 17 21:19:26 2006 Route addition via IPAPI succeeded
Mon Jul 17 21:19:26 2006 route ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.5
Mon Jul 17 21:19:26 2006 Route addition via IPAPI succeeded
Mon Jul 17 21:19:26 2006 Initialization Sequence Completed
im anschluss kann ich von der windows kiste die clients im fremden Netzwerk erreichen
C:\Dokumente und Einstellungen\test>ping 192.168.0.23 Ping wird ausgeführt für 192.168.0.23 mit 32 Bytes Daten: Antwort von 192.168.0.23: Bytes=32 Zeit=260ms TTL=63
sowie vom fremden Netzwerk den Windows PC:
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data. 64 bytes from 10.8.0.6: icmp_seq=1 ttl=64 time=314 ms 64 bytes from 10.8.0.6: icmp_seq=2 ttl=64 time=275 ms
PHP Module
Eine Sammlung nützlicher PHP Module findet sich unter: http://www.phpclasses.org/browse/country/de/

