Tips und Tricks

Aus LUG-TS

Wechseln zu: Navigation, Suche

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/

Persönliche Werkzeuge