Problembeschreibung und Lösungsansatz
Erschlagen von Casino-, Porno- und virenverseuchten Internetseiten stellt sich Administratoren häufig die Frage, wie man in Firmen, Schulen und auch privat einen Internetzugang mit Internet-Inhaltsfilter einrichtet, der nervige Werbung, Pop-Ups und für den Surfer nicht geeigneten Inhalt filtert.
Eine gute Lösung im Bereich Small Office und HOme ist der IPCop mit Addons und diversen Ablegern. Allerdings setzt das Projekt auf einen recht alten Kernel und bei PlugIns und Addons ist man auf die Community angewiesen oder braucht eine zusätzliche Installation um Pakte zu kompilieren.
In Firmen setzt man hier häufig auf fertige Lösungen und Appliances zum Beispiel von Blue Coat. In den meisten fertigen Appliances kommt dabei ein Squid Proxy-Server mit Virenscanner zum Einsatz ebenso beim alt bewährten IPCop.
Auswahl Betriebssystems / Systemplattform
Mein Ansatz war dann bei einem Projekt eine Firewall mit SquidProxy, Virenscanner und Inhaltsfilter auf Basis einer gängigen, lang gepflegten UNIX-Distribution nachzubauen. Als Serverplattform kamen hier Ubuntu LTS oder RedHat/CentOS in Betracht.
Ubuntu verwendet keine offizielle LongTermKernel und bei Squid kommt eine Version ohne SSL-Support zum Einsatz. Zusätzlich gibt es hierzu im Internet diverse Gegenüberstellungen, welches Betriebssystem als Serverbetriebssystem die bessere Wahl wäre vergl.
Am Ende habe ich mich dann für ein CentOS 7 als Basis für den Server entschieden.
Datenschutz und Hinweis für die Benutzer
Beim Thema Virenscanner und Inhaltfilter ist dabei zu berücksichtigen, dass viele Internetseiten auch auf HTTPS laufen. Der Proxy-Server muss, um den Inhalt hierfür zu prüfen, die Verschlüselung unterbrechen. Das sollte bei der Inbetriebnahme mit den Nutzern des Zugangs mit den Benutzern des Systems abgestimmt sein. Ggf. lassen sich bestimmte krititsche Seiten (Banking, Shoppig Webmailer, Social Networks) von der Inhaltsfilterung herausnehmen. Dies ist dann über ein – für den Enduser nicht zu änderndes – Proxy-Konfigurationsskript (Pac-file) bzw. mit einer wpad-Konfiguration für den Browser umzusetzen.
Benötigte und verwendete Softwarekomponenten
- CentOS 7 – als Systemplattform
- IPTables – zur Konfiguration der als Firewall
- Squid – Als ProxyServer
- Dansguardian – als dynamischer Inhaltsfilter
- SquidGuard – als statischer Inhaltsfilter
- Clamav mit SquidClam und c-icap als – Virenfilter
- gcc und make zum Kompilieren von c-icap und squidclamav
- Optional – Webmin als Administrationstool
- Optional – Apache als Webserver für Fehlermeldungen an den Benutzer (Virenwarnung)
- Optional – OpenVPN zur Vernetzung von weiteren Standorten über das WAN.
- Optional – ReportingTools – Squid Analysis Report Generator SARG + Webalizer
- Optional – MRTG – als grafischer Report über die Bandbreitennutzung / Netzwerkauslastung mit snmp
Installation unter CentOS 7
Zunächst installieren wir alle benötigten Softwarekomponenten, um sie dann in der Konfigurationsbeschreibung anzupassen.
SELinux
Nach einer Basis-Installation von CentOS läuft hier standardmäßig SELinux als zusätzliches Sicherheitsfeature mit. Möchte man diese Feature nutzen sollte man es nicht einfach auf „permissve“ setzen oder deaktivieren, wie oft beschrieben. Die Installation klappt auch, wenn man die erforderlichen Konfigurationsschritte durchführt.
/etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing – SELinux security policy is enforced. # permissive – SELinux prints warnings instead of enforcing. # disabled – No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted – Targeted processes are protected, # mls – Multi Level Security protection.SELINUXTYPE=targeted |
Zur besseren Konfiguration von SELinux benötigt man dann noch ein Paket.
# yum install policycoreutils-python |
Squid installieren
Paket installieren, Dienst starten und auf Start beim Booten setzen mittels:
#yum install squid # service squid start # chkconfig squid on |
Inhalsfilter und Tools installieren
Benötigt wird hier das Paket dansguardian-2.12.0.3-1.1.x86_64.rpm, das nicht aus dem CentOS-Repository geladen werden kann.
# yum install squidGuard # yum install gcc make # yum install dansguardian-2.12.0.3-1.1.x86_64 |
clamav-Antivirus installieren
Hierfür müssen zusätzliche Software-Repositories aktiviert werden, da CentOS Clamav nicht in den Standard-Repositories aufgenommen hat.
# yum –enablerepo=epel -y install clamav-scanner clamav-scanner-systemd clamav-update |
Virenscanner Plugin für Squid – Squidclamav , c-icap und ReportingTools
Virenscanner für Squid # curl -L -O http://downloads.sourceforge.net/project/c-icap/c-icap/0.4.x/c_icap-0.4.2.tar.gz # curl -L -O http://downloads.sourceforge.net/project/squidclamav/squidclamav/6.14/squidclamav-6.14.tar.gz Reportingtools
#yum localinstall webalizer-2.21_02-3.3.el6.x86_64.rpm
curl -L -O https://sourceforge.net/projects/sarg/files/sarg/sarg-2.3.9/
#tar -xvzf sarg-2.3.9.tar.gz #./configure #make #make install |
optionale Komponenten installieren
#yum install httpd #systemctl start httpd #systemctl enable httpd #yum install openvpn #yum install mrtg net-snmp net-snmp-utils #yum install perl-Crypt-OpenSSL-X509 #yum install perl perl-CGI |
Konfiguration
clamav-Antivirus
Die Einstellungen für den Virenscann liegen in der Datei /etc/clam.d/scan.conf.
Hierfür müssen zusätzliche Software-Repositories aktiviert werden, da CentOS Clamav nicht in den Standard-Repositories aufgenommen hat.
# /etc/clamd/scan.conf yum –enablerepo=epel -y install clamav-scanner clamav-scanner-systemd clamav-update |
Virenscanner Plugin für Squid – Squidclamav , c-icap und ReportingTools
Hierzu gibt es eine gute Anleitung unter www.server-world.info , die man 1:1 übernehmen kann.
Hier das Wesentliche:
CLAMAV Datei /etc/clamd.d/scan.conf sichern Datei editieren # vi /etc/clamd.d/scan.conf Logfile anlegen # chown clamscan. /var/log/clamd.scan Bei aktiven SELINUX We didn’t get a systemd service file, so creating a quick file here. Create a new file Now enable and start the service. #systemctl enable clam-freshclam.service ————————————————————————————————————————— C-ICAP [Service] [Install] ————————————————————————————————————————— ————————————————————————————————————————— Squid – Proxy Server zum Virenscanner verbinden # vi /etc/squid/squid.conf If SELinux is enabled, change rules like follows. ————————————————————————————————————————— Reportingtools für den Squid |
Routing aktivien
Um als transparenter Proxy zu arbeiten sollte das System auch als Router arbeiten. Damit der Router auch routet muss zunächst das Routing pinzipiell aktiviert und im Anschluss in der Firewall zu routendede Pakte „maskiert“ werden. Für die Funktionalität des Proxys ist dies allerdings nicht relevant.
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 |
SSL-Proxyserver
Hiermit wird die Verschlüsselung zu Internetseiten bewußt als Man-In-The-Middle-Proxy gebrochen und dem Client/Browser ein vom Proxy signiertes Zertitikat für die entsprechende Internetseite untergeschoben.
Dies muß natürlich im Einklang mit der Firmenpolicy stehen. Zusätzlich ist es erforderlich, dass dem Browser dieses Zertifikat als vertrauenswürdige Zertifizierungsstelle bekannt gemacht wird. Beim Betrieb ist ferner zu beachten, dass bestimmte Anwendungen keine anderen Root-Zertifikate zulassen und eine solche Verbindung nicht akzeptieren. z.b.: Microsoft Security Essentials als Virenscanner, iTunes und Apple-Geräte, wenn sie auf Updates und den App-Store zugreifen. Damit man es dennoch nutzen kann, müssen Ausnahmereglen für diese Geräte in der Firewall definiert werden und ein Proxy-Konfigurationsscript (Pacfile).
Zur Konfiguration gibt es eine Anleitung für CentOS 6.5 und mit der Vorgabe SELINUX zu deaktiveren. Dies ist aber nicht nötig. Den Rest der Anleitung unter http://roberts.bplaced.net/index.php/linux-guides/centos-6-guides/proxy-server/squid-transparent-proxy-http-https kann man ersteinmal abarbeiten.
Damit es auch mit SELINUX klappt ist folgendes nötig:
#chown -R squid.squid /var/lib/ssl_db #install -d -m 750 -o squid -g squid /var/spool/squid_ssldb #semanage fcontext -a -e /var/spool/squid /var/spool/squid_ssldb #runuser -u squid — /usr/lib64/squid/ssl_crtd -c -s /var/spool/squid_ssldb #restorecon -FRv /var/spool/squid_ssldb vi /etc/sysctl.conf |
Dansguardian – Inhaltsfilter
Zur Konfiguration gibt es eine Anleitung für CentOS 6.x unter https://dokuwiki.nausch.org/doku.php/centos:dansg:install. Da das o.a. Paket schon installiert ist, kann man hier direkt bei der Konfiguration starten.
Damit man sich nicht selbst den Zugang einschränkt, empfiehlt es sich, für sich selbst eine zweite Filtergroup zu erstellen (dansguardianfx.conf), diese über eine User oder IP-Group zu verlinken und hier alle Einschränkungen zunächst auszukommentieren.
Im Anschluß kann man diese dann einzeln auf den eigenen Bedarf prüfen und für die defaultgruppe ein- oder ausschalten.