Router mit Firewall und Squid Proxy als Internet-Inhaltsfilter auf einem CentOS 7

November 13th, 2016 | Posted by in Dokumentationen | UNIX

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
# tar zxvf c_icap-0.4.2.tar.gz
# cd c_icap-0.4.2
# ./configure
# make
# make install
# cd
# cp /usr/local/etc/c-icap.conf /etc

# curl -L -O http://downloads.sourceforge.net/project/squidclamav/squidclamav/6.14/squidclamav-6.14.tar.gz 
# tar zxvf squidclamav-6.14.tar.gz 
# cd squidclamav-6.14 
# ./configure –with-c-icap 
# make
# make install 
# cd 
# ln -s /usr/local/etc/squidclamav.conf /etc/squidclamav.conf

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
# line 8: comment out
#Example
# line 14: uncomment
LogFile /var/log/clamd.scan
# line 66: uncomment
PidFile /var/run/clamd.scan/clamd.pid
# line 70: uncomment
TemporaryDirectory /var/tmp
# line 85: uncomment
LocalSocket /var/run/clamd.scan/clamd.sock
# line 101: uncomment
TCPSocket 3310

Logfile anlegen
# touch /var/log/clamd.scan
# chown clamscan. /var/log/clamd.scan
# systemctl start clamd@scan
# systemctl enable clamd@scan  

# chown clamscan. /var/log/clamd.scan
# systemctl start clamd@scan
# systemctl enable clamd@scan

Bei aktiven SELINUX
#restorecon -v /var/log/clamd.scan
Das Aktualisieren des Scanners über den Befehlt „freshclam“, kann interaktiv, über einen cron-job oder über einen Systemservice gelöst werden hierzu ist dann noch ein  systemd service für  freshclam zu erstellen.

We didn’t get a systemd service file, so creating a quick file here.
The process should be forking itself and start freshclam in daemon mode. In this case we configure it to check 4 times a day for new files.

Create a new file
# touch /usr/lib/systemd/system/clam-freshclam.service
# Run the freshclam as daemon
[Unit]
Description = freshclam scanner
After = network.target
[Service]
Type = forking
ExecStart = /usr/bin/freshclam -d -c 4
Restart = on-failure
PrivateTmp = true
[Install]
WantedBy=multi-user.target

Now enable and start the service.

#systemctl enable clam-freshclam.service
#systemctl start clam-freshclam.service

—————————————————————————————————————————

C-ICAP
# vi /etc/c-icap.conf
# line 161: change admin address
ServerAdmin root@srv.world
# line 170: change hostname
ServerName prox.srv.world
# line 568: add
Service squidclamav squidclamav.so
# vi /etc/tmpfiles.d/c-icap.conf
# vi /usr/lib/systemd/system/c-icap.service
create new
[Unit]
Description=c-icap service
After=network.target

[Service]
Type=forking
PIDFile=/var/run/c-icap/c-icap.pid
ExecStart=/usr/local/bin/c-icap -f /etc/c-icap.conf
KillMode=process

[Install]
WantedBy=multi-user.target

—————————————————————————————————————————
Squidclamav.conf – Konfigurationdes Virenscanners für den Proxy
# vi /etc/squidclamav.conf

—————————————————————————————————————————

Squid – Proxy Server zum Virenscanner verbinden

# vi /etc/squid/squid.conf
# add follows to the end
icap_enable on
icap_send_client_ip on
icap_send_client_username on
icap_client_username_header X-Authenticated-User
icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_resp allow all
# systemctl start c-icap
# systemctl enable c-icap
# systemctl restart squid
—————————————————————————————————————————
Squidguard – Blacklist für verbotene Internetinhalte
#yum install http://ftp.osuosl.org/pub/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
#yum install squidGuard
#chown -R squid. /var/squidGuard/blacklists

If SELinux is enabled, change rules like follows.
#chcon -R -t squid_cache_t /var/squidGuard
#semanage fcontext -a -t squid_cache_t /var/squidGuard

—————————————————————————————————————————

Reportingtools für den Squid
#yum localinstall webalizer-2.21_02-3.3.el6.x86_64.rpm
#tar -xvzf sarg-2.3.9.tar.gz
#./configure
#make
#make install

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.

You can follow any responses to this entry through the RSS 2.0 Both comments and pings are currently closed.