Kurs: IT-Security
5.x Aufgaben zum Proxy-Server

Proxy-Grundkonfiguration - Den Zugriff beschränken (Sequenzdoku 7.x)
5.1
  • Aufbau einer Firmenfirewall mit einer DMZ (mit 2 Screening-Routern)
    - Ein Proxy vermittelt (als Application Gateway) die Dienste http,https und ftp.
  • Starte den zu verwendenden Proxyserver
    - Welche Prozesse wurden gestartet?
    - Kontrolliere (zunächst mit telnet ...) die lokale Nutzung des Proxyservers
    - Teste anschließend die Verfügbarkeit von versch. internen Diensten über einen Browser "ohne Proxyausnahmen"
    - Teste nun den remote-Zugriff auf [d]einen Proxyserver
  • Nachschlagewerke:
    - http://www.squid-cache.org/Doc/config/
    - http://www.squid-handbuch.de/hb/
    - https://wiki.ubuntuusers.de/Squid/
  • Bearbeitung der Konfigurationsdatei squid.conf
    - Entferne (wenn sinnvoll) zur Übersicht alle Kommentarzeilen der Konfigurationsdatei
    sed '/^#/d;/^$/d' squid.conf.documented 
    - Aktiviere das Caching in (16*256) 4096 Ordnern mit 100GB (Default=100MB)
      und (mit maximum_object_size) Dateien bis zu 4GB (Default=4MB)  
    cache_dir aufs /var/cache/squid 100 16 256
    - Bilde einen Block der vorhandenen "acl" und "http_access" Angaben
    acl localnet src 0.0.0.1-0.255.255.255# RFC 1122 "this" network (LAN)
    acl localnet src 10.0.0.0/8           # RFC 1918 local private network (LAN)
    acl localnet src 100.64.0.0/10        # RFC 6598 shared address space (CGN)
    acl localhet src 169.254.0.0/16       # RFC 3927 link-local (directly plugged) machines
    acl localnet src 172.16.0.0/12        # RFC 1918 local private network (LAN)
    acl localnet src 192.168.0.0/16       # RFC 1918 local private network (LAN)
    acl localnet src fc00::/7             # RFC 4193 local private network range
    acl localnet src fe80::/10            # RFC 4291 link-local (directly plugged) machines
    acl SSL_ports port 443
    acl Safe_ports port 80          # http
    acl Safe_ports port 21          # ftp
    acl Safe_ports port 443         # https
    acl Safe_ports port 70          # gopher
    acl Safe_ports port 210         # wais
    acl Safe_ports port 1025-65535  # unregistered ports
    acl Safe_ports port 280         # http-mgmt
    acl Safe_ports port 488         # gss-http
    acl Safe_ports port 591         # filemaker
    acl Safe_ports port 777         # multiling http
    acl CONNECT method CONNECT
    
    http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet http_access allow localhost http_access deny all
    http_port 3128 coredump_dir /var/cache/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
    - Werte die http_access-Zeilen nach dem "top-down-Prinzip" aus.
    - Welche ACL erlaubt nun bestimmte Client IP-Adressen z.B. "Sraum4x" eine Proxynutzung?
    - Welche 1. http_access-Zeile ist "true"?

Proxy-Anpassung - Weiterleitung, Filtern (Sequenzdoku 7.6)
5.2
  • Zugriffsweiterleitung an übergeordnete Proxyserver
    - Trage einen übergeordneten Proxy z.B. server:81 in die squid.conf ein
    #  TAG: cache_peer
    #       To specify other caches in a hierarchy, use the format:
    #       
    #               cache_peer hostname type http-port icp-port [options]
    #       
    #       For example,
    #       
    #       #                                        proxy  icp
    #       #          hostname             type     port   port  options
    #       #          -------------------- -------- ----- -----  -----------
    #       cache_peer parent.foo.net       parent    3128  3130  default
    #       cache_peer sib1.foo.net         sibling   3128  3130  proxy-only
    #       cache_peer sib2.foo.net         sibling   3128  3130  proxy-only
    #       cache_peer example.com          parent    80       0  default
    #       cache_peer cdn.example.com      sibling   3128     0  
    #       
    #             type:     either 'parent', 'sibling', or 'multicast'.
    #       
    #       proxy-port:     The port number where the peer accept HTTP requests.
    #                       For other Squid proxies this is usually 3128
    #                       For web servers this is usually 80
    #       
    #         icp-port:     Used for querying neighbor caches about objects.
    #                       Set to 0 if the peer does not support ICP or HTCP.
    #                       See ICP and HTCP options below for additional details.
    Sperre störende (besser jegliche) Direktzugriffe auf interne oder externe Server
    #	With 'never_direct' you can use ACL elements to specify
    #	requests which should NEVER be forwarded directly to origin
    #	servers.  For example, to force the use of a proxy for all
    #	requests, except those in your local domain use something like:
    #
    #		acl local-servers dstdomain .foo.net
    #		never_direct deny local-servers
    #		never_direct allow all

  • Erstelle eine Autoproxykonfigurationsdatei (nach folgendem Muster) für dein Client-System
    Nachschlagewerke:
    - http://de.wikipedia.org/wiki/Proxy_Auto-Config
    - http://findproxyforurl.com/
    function FindProxyForURL(url, host) { return "PROXY proxy.example.com:8080; DIRECT"; }
    function FindProxyForURL(url, host) { // Adressen, die auf example.com liegen, brauchen keinen Proxy: if (shExpMatch(host,"*.example.com")) { return "DIRECT"; } // URLs innerhalb dieses Netzwerkes werden abgefragt über // Port 8080 auf fastproxy.example.com: (macht Nameserver Anfrage) if (isInNet(host, "10.0.0.0", "255.255.248.0")) { return "PROXY fastproxy.example.com:8080"; } // Alle anderen Anfragen gehen über Port 8000 von proxy.example.com. // sollte das fehlschlagen, verbinde direkt ins Netz: return "PROXY proxy.example.com:8000; DIRECT"; }
    - Stelle (den Browsern) im Netz eine http://localhost/wpad.dat Proxykonfiguration zur Verfügung
    - Der Content-Type ist application/x-ns-proxy-autoconfig (AddType oder /etc/mime.types)
    - Teste die Konfiguration mit versch. Adressen (lokal/remote)
  • Filtern unerwünschter URLs mit einer ACL vom Typ *url*
    ACL-Typen http://www.squid-handbuch.de/hb/node46_ct.html, http://www.squid-cache.org/Doc/config/acl
    arp	mac-adresse (von Clients)			acl TEST arp 01:02:03:04:05:06 
    src	ip-adresse/netzmaske (Client-IP-Adressen)	acl TEST src 10.3.42.0/24 
    dst	ip-adresse/netzmaske (Server-IP-Adressen)	acl TEST dst 129.103.63.0/24 
    myip	ip-adresse/netzmaske (lokale Socket-IP)
    srcdomain domainname (Client-Domainnamen)		acl TEST srcdomain .mydomain.de 
    dstdomain domainname (alle Ziel-WebServer)		acl TEST dstdomain .yourdomain.de
    srcdom_regex [-i] expression (reguläre Ausdrücke für Client-Domainnamen)
    dstdom_regex [-i] expression (Domainnamen von Ziel-WebServern)
    time	[day] h1:m1-h2:m2 (Zeitfenster)			acl TEST1 time 07:30-16:00
    							acl TEST2 time S 00:00-23:59 #So
    url_regex [-i] expression (reguläre Ausdrücke für URLs)	acl TEST url_regex http://www 
    urlpath_regex [-i] expression (.. nur für den Pfadteil)	acl TEST urlpath_regex -i \.png$ 
    port	port (TCP-Portnummern für Ziel-WebServer)	acl TEST1 port 80 81 21 
    							acl TEST2 port 0-1024 
    myport	port (lokale Socket Portnummer)			acl TEST myport 3128 
    proto	protocol (Protokolltypen)			acl TEST proto FTP 
    method	method (HTTP-Anfragemethode[n])			acl TEST method GET POST 
    browser	[-i] expression (regex im User-Agent)		acl TEST browser -i Mozilla.* 
    ident	username (Benutzer Ident. REQUIRED für jeden)	acl TEST ident moritz 
    ident_regex [-i] expression (regex für Benutzernamen)	acl TEST -i ... 
    src_as	number (Quellnetze, mit AS-Nummer)		acl TEST -i ... 
    dst_as	number (Zielnetze, die über AS-Nummer)		acl TEST -i ... 
    proxy_auth username (Benutzer Authentifizierung über ext. Prozess, REQUIRED für jeden)
    							acl TEST proxy_auth max moritz 
    proxy_auth_regex [-i] expression (regex für Benutzer)	acl TEST proxy_auth_regex -i ...
    snmp_community string (SNMP Community String)		acl TEST snmp_community public 
    maxconn number (maximale Verbindungen von einem Client)	acl TEST maxconn 16 
    req_mime_type [-i] expression1 ... 
    
    - Sperre durch eine ACL vom Typ "dstdomain" den Zugriffe auf illegale Download-Portale
    - Schütze durch "urlpath_regex" die Client-Systeme vor ausführbaren Dateiextensions
      und Flash-Files (Flash verwendet als Datei-Extension .swf)
  • Optionale Aufgabe:
    - Proxy-Authentifikation
    - Erlaube den Internet Zugriff nur nach einer Proxy-Anmeldung
      Beispiele befinden sich im Bereich "OPTIONS FOR AUTHENTICATION"
      der Datei /etc/squid/squid.conf.documented
    ##Recommended minimum configuration per scheme:
    ##auth_param negotiate program <uncomment and complete this line to activate>
    ##auth_param negotiate children 20 startup=0 idle=1
    ##auth_param negotiate keep_alive on
    ##
    ##auth_param ntlm program <uncomment and complete this line to activate>
    ##auth_param ntlm children 20 startup=0 idle=1
    ##auth_param ntlm keep_alive on
    ##
    ##auth_param digest program <uncomment and complete this line>
    ##auth_param digest children 20 startup=0 idle=1
    ##auth_param digest realm Squid proxy-caching web server
    ##auth_param digest nonce_garbage_interval 5 minutes
    ##auth_param digest nonce_max_duration 30 minutes
    ##auth_param digest nonce_max_count 50
    ##
    ##auth_param basic program <uncomment and complete this line>
    ##auth_param basic children 5 startup=5 idle=1
    ##auth_param basic realm Squid proxy-caching web server
    ##auth_param basic credentialsttl 2 hours
    
    #acl password proxy_auth max moritz (oder REQUIRED für Alle)
    #http_access allow password
    Ergänze die Musterzeile um das Passwort-Hilfsprogramm basic_ncsa_auth und ein Passwordfile

Proxy Log-Auswertung (Sequenzdoku 7.7)
5.3
  • Werte die log-Dateien mit unterschiedlichen Tools aus
    - Mit dem Perl-Reportgenerator Calamaris
      Calamaris generiert einen Report aus Squid V1.1.x - 2.x, and NetCache native log Dateien
    cat access.log | calamaris -a -F html > report.html
    - Mit dem Programm Webalizer (nicht nur zur Auswertung von Webserver-Logdateien):
    webalizer -F squid access.log
    - Mit Sarg (generiert einen HTML-Report mit Feldern wie: user, IP Adresse, bytes, sites, und time)
    - Achtung: Sarg (bzw. wwwrun) benötigt Leserechte für die Squid-Logdatei
     sarg erzeugt eine Auswertung in http://localhost/sarg/
     sarg -r oder http://localhost/sarg-php/sarg-realtime.php
    Beurteile welche Dateien nach der neuen Datenschutz-Grundverordnung (DSGV) verarbeitet/weitergegeben werden dürfen?
  • weitere Echtzeitanalysetools
    - iptraf -g (zeigt den Netzwerk Traffic aller Interfaces)
    - iftop [-i eth0] (zeigt zu welchen FQDN's Verbindungen aufgebaut werden)
    - sqtop [-p 3128] (zeigt umfangreiche Verbindungsinfos)
    - squidview (zeigt die URL's der letzten Zugriffe)
    - oder der Cache-Manager aus dem Squid-Paket

Meinolf Mühlenjost 2022