Tag Archives: Proxy

Internet-Beschwerdestelle

transparenten Proxy per SSH umgehen

Ich hatte bereits einmal über das Thema “Ports via ssh weiterleiten” geschrieben, um z.B. pop3 oder smtp verschlüsselt zu nutzen. Heute zeige ich aus aktuellem Anlass, wie man mithilfe SSH einen transparenten Proxy im Netzwerk umgehen kann. Im Studentenwohnheim (Krefeld) ist jemand auf die glorreiche Idee gekommen alle Webseiten auf denen Filesharing betrieben werden kann, zu sperren.

z.B.: www.dropbox.com


Internet-Beschwerdestelle
Internet-Beschwerdestelle

(Tipp: mit “Alt” + “Druck” bekommt man einen Screenshot vom gewählten Fenster)


1.) Tunnel auf dem Client zum Server erstellen

Der folgende Befehl erstellt einen Socks kompatiblen Proxy per SSH-Tunnel. Wie im anderen Blog-Post beschrieben, kann man z.B. mit dem Parameter “-L” eine Verbindung zu einem anderen Proxy per SSH aufbauen.


ssh -D 3128 -fN user@server

(ssh -L 3128:proxyserver:3128 -fN user@proxyserver)


2.) SSH-Tunnel verwenden


Nun können wir einen neuen Proxy einstellen, unter Gnome …

System > Einstellungen > Netzwerk-Proxy

… als Socks-Rechner tragen wir nun “localhost” und den Port “3128” ein.


Bildschirmfoto-Netzwerk
Bildschirmfoto-Netzwerk


ziproxy_logo3

Ziproxy – HTTP-Traffic Kompression

Ziproxy ist ein nicht HTTP-Proxy Server, welcher Daten nicht zwischenspeichert, diese jedoch komprimiert und weiterleitet. Die meiste Bandbreite wird eingespart, indem Bilder neu-konvertiert werden und andere Daten per gzip komprimiert werden.

Ziproxy benötige keine Client-Software, solange der Browser die gzip-Daten korrekt dekomprimieren kann und auch mit JPEG 2000 Bildern umgehen kann. Der Proxy kann auf unterschiedliche Arten konfiguriert werden, ich hatte bereits vor langer Zeit über Ziproxy berichtet (Mein Proxy-Server) und da ich darauf aufmerksam gemacht wurde, dass die gezeigte Konfiguration in der neuen Version nicht mehr funktioniert, ich jedoch den gezeigten Proxy-Aufbau nicht mehr im Einsatz habe, wollte ich in diesem Blog-Post zumindest die beiden Grundkonfigurationen zeigen. (ggf. wäre ein solcher Proxy auch für Smartphones hilfreich)


1.) Ziproxy als Remote-Proxy

Als erstes die einfachste Variante, hier verbindet sich der Ziproxy über eine schnelle Verbindung (extern) mit dem HTTP-Servern und schickt die Daten über eine langsame Verbindung weiter.


Konfiguration: ziproxy.conf (mit ein paar Kommentaren)




Ziproxy-Standard
Ziproxy-Standard





2.) Ziproxy als Remote-Proxy + Local-Proxy

Die Konfiguration des Remote-Proxys unterscheidet sich im Grunde nicht von der ersten Variante, auch hier wird keine Client-Software benötigt, da ein zweiter lokaler Ziproxy sozusagen als Client fungiert, dies hat den Vorteil:

  • der Browser muss nicht “JPEG 2000″ unterstützen
  • der Client (z.B. Squid) muss nicht “gzip” unterstützen
  • CPU-Last wird auf einen Server verlagert (ggf. wenn der Browser durch “JPEG 2000″-Bilder hohe CPU-Last erzeugt)

Konfiguration: Ziproxy-Client

Port = 8080
Address = "127.0.0.1"
NextProxy="81.169.188.94"
NextPort=3128
ImageQuality = {85,85,85,85}
JP2ImageQuality = {85,85,85,85}
MaxUncompressedGzipRatio = 4000
MinUncompressedGzipStreamEval = 250000
MaxSize = 2097152
Gzip = true
DecompressIncomingGzipData = true




Ziproxy_Dual
Ziproxy_Dual




Link: ziproxy.sourceforge.net

nginx_logo

Webserver beschleunigen

Zurück zur “Webseiten beschleunigen” – Übersicht

5.) Webserver beschleunigen

5.1) Apache-Module deaktivieren


Ggf. kann man auch einige Module (Erweiterungen) von Apache abschaltet, wer z.B. auf seiner Webseite gar keine SSL-Verschlüsselung verwendet, könnte das entsprechende Modul deaktivieren.

a2dismod  ssl
/etc/init.d/apache2 restart

Die momentan aktiven Erweiterungen kann man unter “/etc/apache2/mods-enabled/” einsehen, die installierten Erweiterungen sind unter “/etc/apache2/mods-available/” zu finden.

Dynamische Seiten:
mod_log_config erlaubt die access_log-Dateien in div. Formaten.
- mod_cgi braucht man, wenn man CGI zulassen will.
mod_suexec erlaubt CGIs als ein bestimmter User zu laufen.
mod_perl braucht man nicht um Perl als CGI auszuführen!
mod_php5 ist schneller als suphp (aber nicht so sicher).
mod_suphp führt php Skript mit den Rechten des entsprechenden webs aus.
mod_include erlaubt die Verwendung von SSI.

URL-Manipulationen:
mod_alias braucht man zum Einblenden von virtuellen Verzeichnissen.
mod_rewrite erlaubt URL-Manipulationen, kostet aber Performance.
mod_autoindex & mod_dir erlauben eine Navigation ohne index.html
mod_userdir erlaub User-URLs mit z.B.: www.huschi.net/~huschi/
mod_negotiation analysiert Accept-Anfragen.
mod_vhost_alias erlaubt das Anlegen von virtuellen Hosts.

Environment- & Header-Manipulation:
mod_mime setzt automatisch den richtigen Header anhand der Dateiendung.
mod_env & mod_setenvif erlauben die modifizierung von ENV-Variablen.
mod_expires erlaubt die HTTP-Header Manipulation des Expires-Date (Verfall-Zeit).
- mod_ssl erlaubt die Verwendung von SSL (https).

Zudem kann man folgende Option in der Apache-Konfiguration ändern, so dass man DNS-Lookups reduziert.

vim /etc/apache2/apache2.conf

HostNameLookups off

5.2) Reverse Proxy (Nginx)

nginx_logo
Wir wollen unsere Webseite mal wieder ein wenig beschleunigen, dies können wir auf verschiedenen Wegen bewerkstelligen, heute beschäftigen wir uns mit dem Reverse-Proxy vor einem Webserver, in diesem Beispiel nutzen wir für diesen Zweck Nginx + apache2. Der große Vorteil von einen Proxy vor dem Webserver ist, dass mehrere Anfragen gleichzeitig gestellt werden könne, um die Performance von statischen Daten zu steigern. Die Anfragen an dynamische Inhalte werden dann noch immer an einen zweiten bzw. an mehrere Webserver, hinter dem Proxy weitergereicht.

Wer sich jetzt fragt, warum man nicht komplett auf Nginx umsteigen sollte, da die Benchmarks zeigen, dass dieser schneller ist als der Apache Webserver, derjenige hat nicht bedacht, dass bei diesen Tests nur die Reaktionen des Webservers auf eine gewisse Anzahl von Anfragen geprüft wird, wenn man jedoch mit “nginx + fcgi” viele php-Dateien verarbeiten möchte, ist ein “apache + mod_php” schneller, zudem kann man diese Daten z.B. mittels eAccelerator zusätzlich cachen, was die Geschwindigkeit von php-Daten noch einmal positiv beeinflusst.

Update: Inzwischen konnte ich die ganzer Sache ausgiebig testen und setzte momentan eine Kombination aus “Varnish” + “Nginx” + “php5-fpm” (+ xcache) ein, so werden die Seiten von Varnish zwischengespeichert alle neue Anfragen von Nginx entgegengenommen, Bilder etc. sofort ausgeliefert und PHP-Anfragen an einen laufendem PHP-Daemon weitergereicht, jedoch erst-einmal zurück zum Beispiel mit Nginx als Reverse-Proxy…

Als Lösung für diese Problem habe ich mir einen Nginx-Proxy gebastelt, der statische Daten (Bilder…) ausliefert und diese zusätzlich für 24 Stunden zwischenspeichert, alle andern dynamischen Inhalte (php,cgi…) werden sofort an apache durch-gereicht. In diesem Beispiel laufen sowohl der Proxy als auch Apache auf einem Server.
reverse_proxy

5.2.1.) Apache auf einem neuen Port laufen lassen

Folgende Datei öffnen…

vim /etc/apache2/ports.conf

…Port “80” durch z.B. “127.0.0.1:8080″ ersetzen.

!!! Wichtig ist hier, darauf zu achten, dass der Apache selber nicht mehr über eine Öffentliche IP-Adresse erreichbar ist. !!!

Ggf. helfen dir die folgenden Zeilen weiter, um alle Einträge in einer Datei zu Ändern (mit vi / vim).

:%s/^80/127.0.0.1:8080/g

:%s/SERVER_IP_ADRESSE:80/127.0.0.1:8080/g

SERVER_IP_ADRESSE muss nun noch mit der IP-Adresse des Servers ersetzte werden und anschließend musst du den Apache Webserver noch neu-starten. Ggf. müssen noch weitere Dateien von Apache angepasst werden.

Mit dem folgendem Befehl kannst du prüfen, ob noch weitere Einträge (Port 80) in der Apache Konfiguration sind.

/bin/grep -wr 80 /etc/apache2/


5.2.2) Ggf. ISPConfig anpassen

Falls du z.B. ISPConfig installiert hat, werden wie Änderungen am Apache Webserver, bei der nächsten Änderung über die Admin-Oberfläche wieder verworfen, daher müssen wir das Template von ISPConfig dementsprechend anpassen.

vim ~/ispconfig/isp/conf/vhost.conf.master

NameVirtualHost 127.0.0.1:8080


5.2.3.) Reverse-Proxy: nginx installieren & konfigurieren

aptitude install nginx
vim /etc/nginx/nginx.conf
user www-data;
worker_processes 4;
worker_rlimit_nofile 3000;
pid /var/run/nginx.pid;

# [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log;

#google_perftools_profiles /tmp/profile/;

events {
        worker_connections 2048;
        # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
        use epoll;
        multi_accept on;
}

http {
        server_names_hash_bucket_size 64;

        ## Size Limits
        client_max_body_size        10M;
        client_header_buffer_size   32k;
        client_body_buffer_size     128k;
        large_client_header_buffers 64 8k;

        ## Timeouts
        client_body_timeout   3m;
        client_header_timeout 3m;
        send_timeout          3m;
        #expires              24h;
        keepalive_timeout     120 120;

        ## General Options
        ignore_invalid_headers   on;
        keepalive_requests       100;
        limit_zone normal $binary_remote_addr 5m;
        recursive_error_pages    on;
        sendfile                 on;
        server_name_in_redirect  off;
        server_names_hash_max_size 512;
        server_tokens            off;
        set_real_ip_from 127.0.0.1;
        real_ip_header X-Forwarded-For;

        ## TCP options
        #tcp_nopush on;
        tcp_nodelay off;
        #send_lowat 12000;

        include mime.types;
        default_type application/octet-stream;

        access_log /var/log/nginx/access.log;

        log_format main '$remote_addr - $remote_user [$time_local] $status '
        '\"$request\" $body_bytes_sent \"$http_referer\" '
        '\"$http_user_agent\" \"http_x_forwarded_for\"';

        ## Cache
        open_file_cache max=1000 inactive=24h;
        open_file_cache_valid    24h;
        open_file_cache_min_uses 2;
        open_file_cache_errors   on;

        ## Compression
        gzip              on;
        gzip_static       on;
        gzip_disable      "MSIE [1-6]\.";
        gzip_buffers      32 8k;
        gzip_comp_level   5;
        gzip_http_version 1.0;
        gzip_min_length   0;
        gzip_proxied      any;
        gzip_types text/plain text/css text/xml text/javascript application/json application/xml application/xml+rss application/x-javascript image/x-icon application/x-perl application/x-httpd-cgi;
        gzip_vary         on;

        output_buffers   10 128k;
        postpone_output  1500;

        # Beispiel: Loadbalance
        #upstream webbackend  {
                #ip_hash;
                #server web1.domain.lan weight=10 max_fails=3 fail_timeout=30s;
                #server web2.domain.lan weight=1 backup;
        #}
        # Beispiel: Reverse-Proxy
        #server {
                #access_log  /var/log/nginx/access.proxy.log main;
                #error_log   /var/log/nginx/error.proxy.log;
                #listen      80;
                #server_name _;

                ## PROXY - Web
                #location ~ \.php$ {
                        #proxy_cache            cache;
                        #proxy_pass  http://127.0.0.1:8080;
                #}
        #}

        # Beispiel: HTTP Server (sollte jedoch besser unter /etc/nginx/sites-available/ angelegt werden)
        #server {
                #listen       8000;
                #listen       somename:8080;
                #server_name  somename  alias  another.alias;

                #location / {
                        #root   html;
                        #index  index.html index.htm;
                        #}
                #}

        # Beispiel: HTTPS Server (sollte jedoch besser unter /etc/nginx/sites-available/ angelegt werden)
        #server {
                #listen       443;
                #server_name  localhost;

                #ssl                  on;
                #ssl_certificate      cert.pem;
                #ssl_certificate_key  cert.key;

                #ssl_session_timeout  5m;

                #ssl_protocols  SSLv2 SSLv3 TLSv1;
                #ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
                #ssl_prefer_server_ciphers   on;

                #location / {
                #root   html;
                #index  index.html index.htm;
                #}
        #}

include /etc/nginx/proxy.conf;
include /etc/nginx/sites-enabled/*.conf;
}
vim /etc/nginx/proxy.conf
proxy_buffering            on;
proxy_cache_min_uses       3;
proxy_cache_path           /usr/local/nginx/proxy_cache/ levels=1:2 keys_zone=cache:10m inactive=24h max_size=1000M;
proxy_cache                cache;
proxy_cache_valid          200 24h;
proxy_cache_use_stale      error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_ignore_client_abort  off;
proxy_intercept_errors     on;
proxy_next_upstream        error timeout invalid_header;
proxy_redirect             off;
proxy_set_header           Host            $host;
proxy_set_header           X-Real-IP       $remote_addr;
proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffers              32 1M;
proxy_busy_buffers_size    31M;
proxy_temp_file_write_size 30M;
proxy_buffer_size          30M;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_ignore_headers       Expires Cache-Control;
mkdir /usr/local/nginx/proxy_cache/
chown -R www-data:www-data /usr/local/nginx/proxy_cache/

Link:
wiki.nginx.org/NginxHttpProxyModule

/etc/init.d/apache2 restart
/etc/init.d/nginx restart

Nginx läuft nun auf Port 80 und nimmt die Anfragen von Client an und der Apache wartet auf die weitergeleiteten Anfragen von Reverse-Proxy.

Bei mir hat der cache (Zwischenspeicherung) jedoch Probleme verursacht, so dass Captcha’s nicht mehr funktioniert haben, daher habe ich diesen im Nachhinein abgeschaltet.


Links:
www.joeandmotorboat.com/2008/02/28/apache-vs-nginx


5.2.4.) Logfiles korrigieren

Nun stehen wir noch vor dem Problem, dass im Logfile von apache die IP-Adresse vom Reverse-Proxy auftauscht und zwar nur noch diese, um dies zu umgehen installieren wir nun noch folgendes…

aptitude install libapache2-mod-rpaf

Nun noch folgendes in den Vhost-Einträgen bzw. in dem ISPConfig Template ergänzen.


RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

/etc/init.d/apache2 reload

…und schon haben wir einen Reverse-Proxy (“Apache” + “Nginx”) installiert. Unter Punkt 5.3 zeige ich wie du ganz auf Nginx setzten kannst und somit nicht zwei Webserver, betreiben & konfigurieren musst.

Endian_2_3

Endian Firewall 2.3

Die Hauptaufgabe der Endian Firewall ist es, als Gateway, Router, Firewall und Antivirus-Proxy zu fungieren. Hierbei werden im Normalfall bis zu vier unterschiedliche Netzwerke verwaltet, siehe Abbildung “Schema der Netzwerktopologie”. Für jedes dieser Netze muss eine Netzwerkkarte in den Computer eingebaut werden. Auch sie werden über die Webschnittstelle konfiguriert. Bei Endian werden diese durch farbliche Kodierung differenziert. – Wiki

Schema der Netzwerktopologie:

Rotes Netz: Verbindung zum unsicheren Internet

Grünes Netz: Sicheres Intranet, hier werden die zu schützenden Arbeitsplätze oder Intranet-Server, z.B. Datei-Server, angeschlossen.

Orangenes Netz: Teilsichere Demilitarisierte Zone (DMZ), um eigene Server zu betreiben, die über das Internet erreichbar sein müssen, z.B. Web- oder FTP-Server

Blaues Netz: Teilsicheres WLAN, hierüber werden WLAN-Teilnehmer angeschlossen. Somit sind sie vom grünen Netz getrennt, was dessen Sicherheit erhöht.

Endian_2_3
Endian 2.3

Folgende Dienste können über integrierte Weboberfläche konfiguriert werden:

– Transparenter HTTP-, FTP-, SMTP- und POP3-Proxy (Spam Training & ClamAV Antivirus & Amavis)
– Caching DNS-Server
– DHCP-Server
– Network Address Translation (NAT)
– SIP VoIP-Unterstützung
– Virtual Private Network (VPN) [OpenVPN oder IPsec]
– NTP-Server
– Policy basiertes Routing (Interface, MAC Adresse, Protokoll oder Port)
– SNMP Unterstützung
– VLAN Support (IEEE 802.1Q Trunking)
– Dynamsicher DNS Client (z.B. für DynDNS)
– Trafficshaping (Aufteilung nach Geschwindigkeit & Priorität)
– SNORT (Eindringlingserkennung)
– Traffic Monitoring

Was ist neu in der Version 2.3?

# Backups können nun auf angeschlossene USB Medien oder per Mail verschickt werden. Dies lässt sich über einen Zeitplan sogar automatisieren.

# Die neue Startseite ist ein Dashboard, auf dem live Statistiken über die Bandbreite sowie Systemmeldungen angezeigt werden.

# E-Mail Benachrichtigungen für bestimmte Events können nun automatisch versendet werden.

# Erweiterung der Web Proxy Funktionen (Zeit- und gruppenabhängige Einstellungen).

# Intrusion Prevention, also nicht nur die Erkennung sondern auch die Eindämmung neuer Bedrohungen in Echtzeit.

# Regelbasiertes Routing (“Policy-based routing”) in Abhängigkeit von MAC, Port oder Protokoll eines Pakets.

# Port Forwarding kann nun aus allen Zonen in alle Zonen gemacht werden, sowohl mit wie auch ohne NAT.

# Das Quality of Service Modul wurde stark erweitert und ist nun über Regeln, Klassen und Devices völlig frei konfigurierbar.

# SNMP Support ist nun ebenfalls in die Endian integriert.

# Der SMTP Proxy hat ein neues, noch bedienerfreundliches Web Frontend bekommen.

# VLAN Support nun auch in der Community Edition.

Download:

www.endian.com/en/community/download/

Not my IP

Hide your IP – oder wie Tor funktioniert

Not my IP
Not my IP

Verstecke deine echte öffentliche IP-Adresse unter Windows, indem du mit einen kleinen Tool, einen Proxy aktivierst. Leider kann man bei dieser Methode relativ schnell herausfinden, wer dort wirklich etwas gemacht hat, da die Verbindung nur über einen Proxy geht und somit noch zurückverfolgt werden könnte.

Download:
www.privacy-gateway.com

________________________________

Alternativ und für Menschen mit Verfolgungswahn (wozu ich mich auch zähle) kann man sich auch einen neuen Browser installieren, welche die nachfolgende Funktion direkt integriert hat…

button_download_tor

Das Prinzip von TOR:



… oder man rüstet seinen momentanen Firefox mit Tor nach. Dafür benötigen wir als erstes Tor (am besten mit Benutzeroberfläche) -> Tor + Vidalia <-

dann installieren wir uns noch schnell einige hilfreiche Plugins für Firefox -> Torbutton <-

Andere Programme, die HTTP-Proxys unterstützen, können Tor nutzen, wenn Privoxy als HTTP-Proxy eingerichtet ist (einfach “localhost” und “port 8118″ eingeben). Bei Programmen, die SOCKS direkt nutzen (z.B. Instant-Messaging, Jabber, IRC usw.), trage Tor als Proxy ein (“localhost” und “port 9050″) und

-> FoxyProxy <- um unsern Firefox Browser komfortabel konfigurieren zu können, kann man z.B. die Funktionen von Tor nur auf bestimmte Webseiten anwenden. Nun können wir unter folgender Adresse noch kurz testen, ob alles geklappt hat und Tor auch funktioniert -> check.torproject.org

________________________________

Alternativ kann man auch OperaTor ausprobieren, dies ist eine Kombination aus “Opera + Tor + Privoxy”:

Download:
letwist.net/operator