====== Debian 8 Cache-Proxies für Internetcafés ====== > Hinweis: Es gibt im Seafile nun einen VM-Export für einen fertig konfigurierten Proxy. Bei diesem Export sind die Nics eth0/1 getauscht, also eth1 LAN und eth0 für WAN. > Dieser Export kann mit Hilfe des HDD-Tools direkt auf die Platte geschrieben werden. Es erspart ggf. einiges an Konfigurationsarbeit. > To do: Die Anleitung sollte bei Zeiten mal auf Debian 9 umgebaut werden Wir nutzen Debian 8 als Grundsystem und bauen damit einen Gateway-Router (und Firewall). Über diesen Router cachen wir zudem mit Squid und Apt-Cacher den Datenverkehr um die Verbindung zu entlasten. Außerdem nutzen wir Dansguardian um Pornoseiten zu filtern (Betreiberwunsch, da Gemeinschaftsräume). Wir nehmen in diesem Fall an, dass eth1 Internetzugang, bzw. WAN ist. eth0 dient also zur Anbindung des lokalen Netzes. Zudem bekommt das lokale Netz das IPv4 Subnetz 192.168.1.0/24 und nutzt den IPv6 Adressbereich von Freifunk Darmstadt (fdca:ffee:ffda:0::/64). Die Anleitung ist speziell für die P3 Desktop PCs geschrieben und kann bei anderer Hardware ggf. davon abweichen (insbesondere BIOS bezogene Punkte) Die Anleitung ist im BETA-Stadium, muss also nochmal gecheckt werden. Gecheckt und sollte jetzt laufen. Bugfreiheit wird aber nicht garantiert. Nach dem Abarbeiten dieser Liste einmal Neustarten. Dann sollte der Proxy theoretisch laufen. ===== to do ===== - wie cached apt-cacher? Ist irgendwann die Platte voll? - aktuell wird https traffic gar nicht gefilter! Sollte ggf. noch implementiert werden - VPN ===== Grundinstallation ====== - Debian 8 Bootmedium booten (bei den P3 Maschinen zwingend netinstall CD, da kein DVD vorhanden und kein Boot von USB möglich) - vorher ggf. im BIOS (F10) das CDROM-Laufwerk als Bootmedium wählen - Installation starten - Installer folgen - Systemsprache: Englisch - Region: Other -> Europe -> Germany - Tastaturlayout: Deutsch - checken welche NIC INet Zugang hat und diese für Installation nutzen (in Normalfall eth1) - Rechnername: donnersbergring-proxyX (X steht für Nummer des Proxys) - Domain: donnersbergring - root-PW: generisches DonnersbergringPW - Nutzer: computerwerk - PW: generisches CW-AdminPW - Installierte Dienste lediglich Tools und SSH. KEINE GRAFISCHE OBERFLÄCHE!!! Nach dem ersten Start sudo installieren (apt-get install sudo) und computerwerk zur Gruppe sudo hinzufügen (adduser computerwerk sudo). Danach läuft der Zugriff per SSH über den Nutzer computerwerk. Nach dem Einloggen "sudo su" und Passwort eingeben und ihr seid root. Alternativ den root-Zugriff per SSH zulassen (über /etc/ssh/sshd_config) oder per su zum Root-User wechseln ===== Netzwerkconfig ===== - über ifconfig prüfen welches NIC Interface Internetzugang hat (siehe auch Einleitung -> eth1 ist hier WAN, eth0 ist LAN) - /etc/network/interfaces anpassen: source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # Internetzugang (WAN) auto eth1 allow-hotplug eth1 iface eth1 inet dhcp iface eth1 inet6 auto # Lokales Netz auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 gateway 192.168.1.1 iface eth0 inet6 auto ACHTUNG! In einer früheren Version wurde per Kommentar auf die Anpassungsmöglichkeit der IP-Adressen von eth0 hingewiesen. In einer neuen Version von ifup/down werden Kommentare neben den Einstellungen nicht mehr unterstützt und somit das Interface nicht mehr initialisiert. === Iptables laden === Iptables sind ein Paketfilter der bei jeder debianbasierten Linuxdistribution im Kernel intergiert sind. Mit diesem zwingen wir die Port 80 Pakete durch unseren Proxy und Routenden restlichenTraffic durch den Server. Die Iptables werden allerdings bei jedem Neustart gelöscht und müssen so wiederhergestellt werden. Dies erledigt das folgende Script. Die Datei "/etc/iptables.state" wird später noch angelegt. - nano /etc/network/if-pre-up.d/01-iptables #!/bin/bash # iptables laden iptables-restore < /etc/iptables.state exit 0 ==== IP-Forwarding aktivieren ==== nano /etc/sysctl.conf Die # vor "net.ipv4.ip_forward=1" und "net.ipv6.conf.all.forwarding=1" entfernen ==== Iptables ==== - nano /etc/iptables.state - einfügen: # Generated by iptables-save v1.4.21 on Sun Nov 1 04:25:43 2015 *nat :PREROUTING ACCEPT [4814:479227] :INPUT ACCEPT [3447:354685] :OUTPUT ACCEPT [38:2066] :POSTROUTING ACCEPT [176:10532] -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner 13 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 3128 -m owner --uid-owner 13 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 3128 -j REDIRECT --to-ports 8080 -A POSTROUTING -o eth1 -j MASQUERADE COMMIT # Completed on Sun Nov 1 04:25:43 2015 # Generated by iptables-save v1.4.21 on Sun Nov 1 04:25:43 2015 *filter :INPUT ACCEPT [46673:40242324] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [32648:10550101] -A FORWARD -i eth1 -o eth0 -j ACCEPT -A FORWARD -i eth0 -o eth1 -j ACCEPT COMMIT # Completed on Sun Nov 1 04:25:43 2015 Auch hier darauf achten, dass eth0/1 ggf. durch das richtige Interface ersetzt/getauscht wird. ==== radvd ==== radvd ist für die IPV6 Adressierung der Clients zuständig. Im Gegensatz zu dnsmasq, der sich um IPV4 kümmert, ist radvd kein DHCP sondern sorgt für eine globale Adressierung. Daher bauen unsere iptables auch nicht auf IPV4 Adressen sondern nur auf die verwendeten Interfaces auf. Dadurch werden auch IPV6 Pakete gefiltert die eigentich nicht geroutet werden (so in der Theorie). - apt-get install radvd - nano /etc/radvd.conf - eventuelle Inhalt ersetzen durch: interface eth0 { AdvSendAdvert on; AdvIntervalOpt on; MinRtrAdvInterval 60; MaxRtrAdvInterval 300; AdvLinkMTU 1280; AdvOtherConfigFlag on; AdvHomeAgentFlag off; prefix fdca:ffee:ffda:0::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; }; Auch hier darauf achten, dass eth0 ggf. durch das richtige Interface ersetzt wird. ==== dnsmasq ==== wird genutzt um das lokale Netz mit IPv4-DHCP zu versorgen (IPV6 wäre auch möglich, aber das macht schon radvd) - apt-get install dnsmasq - nano /etc/dnsmasq.conf Hinzufügen no-dhcp-interface=eth1 interface=eth0 listen-address=192.168.1.1 dhcp-range=192.168.1.100,192.168.1.150,12h Auch hier darauf achten, dass eth0/1 ggf. durch das richtige Interface ersetzt wird. ===== Squid ===== dient uns als transparenter und cachender Proxy. Er ist zudem notwendig um Dansguardian zu betreiben - apt-get install squid3 -y ==== /etc/init.d/squid.conf ==== - mv /etc/squid3/squid.conf /etc/squid3/squid.conf.save - nano /etc/squid3/squid.conf - einfügen: http_port 3128 http_port 3128 intercept acl localnet src 192.168.1.0/24 #acl localhost src 127.0.0.1/255.255.255.255 acl CONNECT method CONNECT #die acl SSL_ports und Safe_ports Section ist in der aktuellen config eigentlich unnötig... acl SSL_ports port 443 acl SSL_ports port 8444 #sipcall acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 280 acl Safe_ports port 443 acl Safe_ports port 8444 http_access allow localnet http_access allow localhost always_direct allow all cache_dir aufs /var/spool/squid3 50000 16 256 hosts_file /etc/hosts #DNS-Server Freifunk Darmstadt und Google dns_nameservers fdca:ffee:ffda::4 fdca:ffee:ffda::3 fdca:ffee:ffda::2 8.8.8.8 8.8.4.4 cache_replacement_policy heap LFUDA cache_swap_low 90 cache_swap_high 95 #cache_mem 200MB logfile_rotate 10 memory_pools off maximum_object_size 50 MB maximum_object_size_in_memory 50 KB quick_abort_min 0 KB quick_abort_max 0 KB log_icp_queries off client_db off buffered_logs on half_closed_clients off log_fqdn off Ich hatte zudem Probleme, dass Squid kurz nach dem (erfolgreichen) Start direkt wieder abstürtze. Dies war allerdings nur aus dem syslog ersichtlich (das passiert bei Squid übrigens häufiger, dass es wegen irgendeiner fehlerhaften config abstürzt, aber vorher erfolgreich startet -> "tail -f /var/log/syslog" parallel zum Starten laufen lassen hilft hier unheimlich). ===== Dansguardian ===== Dient uns als Contentfilter um Pornographie in den Gemeinschaftsräumen zu unterbinden. Theoretisch kann Dansguardian auch noch mehr filtern, dies ist von uns aber nicht gewünscht. - apt-get install -y dansguardian ==== /etc/dansguardian/dansguardian.conf ==== - nano /etc/dansguardian/dansguardian.conf - ~ 3.Zeile (unconfigured) auskommentieren (# davor setzen) - accessdeniedadress ändern zu 'http://127.0.0.1/cgi-bin/dansguardian.pl' - daemonuser und daemongroup zu "proxy" ändern - Neu in Version 2.1 von Dansguardian (zzusätzlich zu oben genanntem): - nano /etc/dansguardian/dansguardianf1.conf - accessdeniedadress ändern zu 'http://127.0.0.1/cgi-bin/dansguardian.pl' ==== getblacklists.sh ==== Das Script lädt die von Dansguardian verwendteten blacklists herunter und kopiert sie ins Dansguardianverzeichnis - nano ~/getblacklist.sh #!/bin/bash cd /tmp mkdir -p /etc/dansguardian/lists/blacklists/sex/ wget http://www.shallalist.de/Downloads/shallalist.tar.gz tar -xf shallalist.tar.gz cp -R /tmp/BL/porn/ /etc/dansguardian/lists/blacklists/ cp -R /tmp/BL/sex/lingerie/ /etc/dansguardian/lists/blacklists/sex/ rm shallalist.tar.gz danach machen wir die Datei noch ausführbar chmod +x getblacklist.sh Jetzt das Script bitte einmal ausführen ~/getblacklist.sh === in crontab einfügen === damit sich die Blacklisten wöchentlich updaten - crontab -e - einfügen: 0 4 * * 1 ~/getblacklist.sh ==== /etc/dansguardian/lists/bannedsitelist ==== - nano /etc/dansguardian/lists/bannedsitelist - im .includeblock (Stück runterscrollen) hinzufügen: .Include .Include ==== /etc/dansguardian/lists/bannedurllist ==== - nano /etc/dansguardian/lists/bannedurllist - im .includeblock (Stück runterscrollen) hinzufügen: .Include .Include ==== Zugriffsrechte Logfiles ==== Nach dem Ändern des ausführenden Nutzers in der Dansguardian.conf müssen wir die Rechte der Logfiles entsprechend anpassen: chown -R proxy:proxy /var/log/dansguardian ==== Dansguardian Neustarten ==== - /etc/init.d/dansguardian restart - Wenn erfolgreich dann weiter im Text - Andernfalls mit "systemctl status dansguardian.service" Fehlermeldung ansehen und ggf. lösen ==== Access Denied Seite (to do) ==== Die Access-Denied Seite von Dansguardian muss noch angepasst werden. Dort sollten ein paar weitere Infos hin. Insbesondere was getan werden kann falls eine Seite unrechtmäßig gesperrt wurde (im Test bspw. t-online.de weil es Keywords aus dem Bereich Pornographie (Japanisch) enthalten würde :D) Mehr Infos: http://contentfilter.futuragts.com/wiki/doku.php?id=template_customization Die default Access Denied Seite findet sich unter "/etc/dansguardian/languages/ukenglish/template.html" Zudem gibt es noch die "dansguardian.pl" in "/usr/lib/cgi-bin/" ===== Apt-Cacher-NG ===== - apt-get install apt-cacher-ng (ng ist wichtig, da ohne ng apache benötigt wird) - bei den Clients in den Proxy configurieren: - nano /etc/apt/apt.conf.d/01proxy Acquire::http { Proxy "http://192.168.1.1:3142"; }; Acquire::https { Proxy "https://"; }; - nano /etc/apt-cacher-ng/acng.conf - Nach der Zeile "# VfilePatternEx:" suchen und durch folgendes ersetzen: VfilePatternEx: .*SHA256.*$ Letzteres behebt einen BUG in apt-cacher-ng in Version 8.0.3. Sollte irgendwann eine neue Version des apt-cachers in Debian 8 erscheinen kann dieser Teil weggelassen werden (das wird aber vermutlich nicht passieren, da die neueren Versionen alle unerfüllte Abhängigkeiten haben). Sollten Updates kommen, dann bitte dieses Configfile überschreiben lassen. //Eventuell sollten wir noch checken was die Default Settings für Speicherdauer/Menge sind. Nicht, dass wir da Speicherprobleme bekommen.// ===== WakeOnLan (WOL) ===== Um die PCs warten zu können ist, soweit möglich, WOL aktiviert. Alle DELL Optiplex haben diese Option. Zu diesem Zweck wird auf den Proxies ggf. etherwake installiert apt-get install etherwake mit etherwake $MAC-Adresse lassen sich die PCs dann starten ===== Autostart ===== Die notwendigen Programme scheinen sich alle eigenständig einen funktionierenden Autostart anzulegen. Bei korrekter Konfiguration sollte das Gerät also immer korrekt hochfahren und sofort startbereit sein. ===== VPN (todo) ===== Für Fernwartung soll noch VPN auf der Maschine installiert werden Dies soll mit OpenVPN und zentralem LDAP realisiert werden (sobald Letzteres steht). Die Internetcafe-Admins werden hierfür spezifisch freigeschaltet werden ===== BIOS ===== Diese Anleitung gilt nur für die grauen P3 Desktops Rechner Das BIOS wird über "F10" geöffnet. USB-Tastaturen sind möglich. Anschließend erscheint ein Prompt mit Sprachen. Diese Anleitung basiert auf der Auswahl "Deutsch" Im BIOS müssen alle Bootmedien außer Festplatte deaktiviert werden. Dazu auf "Speicher" -> "Boot-Reihenfolge" gehen und alle Geräte (außer Festplatte) mit "F5" deaktivieren bzw. je nach BIOS, in der Reihenfolge hinter die Festplatte verschoben werden. Anschließend mit "F10" den Dialog schließen. Unter "Sicherheit" -> "Netzwerk-Boot" den Netzwerk-Boot deaktivieren. Außerdem soll der Proxy automatisch nach einem Stromausfall neu starten. Dafür unter "Erweitert" -> "Systemstart-Optionen" prüfen, dass "Nach Stromausfall" auf "Aktiviert" steht. Sonst ggf. einstellen. Jetzt wird es etwas absurd, aber wichtig. Um dem Server das Booten ohne Keyboard zu gestattet müssen wir ein "Startup-Passwort" setzen... Dafür auf "Sicherheit" -> "Kennwort für den Systemstart" auswählen. Dort eine PAsswort eingeben (ich habe hier das generische CW Admin PW genommen). Mit "F10" akzeptieren. Nun erscheint unter dem gewählten Punkt "Kennwort für den Systemstart" der Punkt "Kennwort Optionen". Dort aktvieren wir den "Netzwerk-Server Modus" und bestätigen wieder mit "F10". Nun startet der Server bei einem "Warmstart" ohne Passwortabfrage und ohne Keyboard Error. Wichtig: Nach einem manuellen herunterfahren (nicht Neustart) wird ab sofort nach dem Kennwort gefragt. Daher nur Neustarten oder vom Strom trennen. Diese beiden gelten als Warmstart. Optional, aber schick ;) Erneut unter "Sicherheit" -> "Systemkennummern" folgende Einträge tätigen Systemkennung: "Donnersbergring" Benutzererkennung: "Computerwerk Darmstadt e.V." Sobald alles fertig ist auf "System" und mit "Einstellungen sichern und neu starten" den Rechner mit den neuen Einstellungen neu starten.