IT-Service GmbH 


rigel.ulm.go-itservice.de

Via Board mit Debian 5.0 Lenny
Eins vorneweg: Diese Anleitung ist nicht wirklich exakt, da die eigentliche Installation als Kopie eines alten Servers, Umbau in andere Hardware und anschliessendem Update auf Lenny erfolgte. Auch habe ich den Rechner ursprünglich im 192.168.80.0 Netz betrieben und in dann erst als Gateway zwischen 192.168.70.0 und 192.168.80.0 konfiguriert. Mit etwas Linurroutine sollt es aber zu schaffen sein.

Hardware:

  • Via Board
  • HD 100 GB (2,5 ") als 1.Master
  • zur Installation: DVD ueber USB
  • Bootreihenfolge im BIOS: CDROM - HD0
    Netzwerk erstmal ausstecken (wegen DHCP)

    Linux installieren:

    Mit Debian NetBoot DVD
    	Language:	German<enter>
    	Land:		Deutschland
    	Tastatur:	deutsch<
    
    dann startet Hardwareerkennung und die DVD wird durchsucht... (dauert ca 1 Minute) Debian installer wird geladen, Hardwareerkennung (Netzwerk), ich habe den Rechner erstmal mit der IP .13 versehen, später dann als Firewall und Gateway auf .1 umgestellt...
    	Konfiguration:	manuell (auswahl)
    	IP Adresse:	192.168.80.13
    	Netmask:	255.255.255.0
    	Gateway:	192.168.80.1
    	DNS:		192.168.80.10
    	Rechnername	rigel
    	Domäne:	ulm.go-itservice.de
    
    Resthardwareerkennung
    	Festplatte:	manuell
    	(Cursor auf Partition,  ...)
    			Bootflag setzen, Grössen auswählen, Mountpoint /
    	10,0 GB 	hda1 	ext2
    	1,0 GB 		swap
    
    änderungen schreiben, Partitionierung erfolgt. Anschliessend wird das Grundsystem installiert (dauert ca 10 Minuten auf der alten Miniplatte) und der Bootloader:
    	Bootloader	MBR 
    
    Die installation wird beendet, DVD ausgeworfen und um Neustart gebeten:
    	Neustart 	<weiter>
    
    nach erfolgtem Neustart
    	Konfiguration	
    	Uhrzeit:	GMT
    	Zeitzone:	Berlin
    	Rootpasswort:	****	(und Bestätigung)
    	User:		Guenther Obermaier
    	Account:	go
    	Passwort:	****	(und Bestätigung)
    	apt Zugriff:	cdrom	(vorher DVD 1 einlegen)
    
    die Durchsuchung dauert ...
    aptitude starten:
    # aptitude
    
    nicht installierte Pakete auswählen, am besten über "Suche":
    	+ apache2-mpm-prefork 
    	+ bind9
    	+ catdoc (wegen xls2csv)
    	+ cryptsetup
    	+ debconf-utils
    	+ dhcp3 server
    	+ hdparm
    	+ libapache2-mod-php4
    	+ imagemagix
    	+ iptables
    	+ ldap-utils
    	+ lynx
    	+ mcrypt	
    	+ mysql-client (= mysql-client-5.0 + mysql-common)
    	+ mysql-server  (= mysql-server-5.0 + mysql-common)
    	+ ntpdate
    	+ ntp-server
    	+ perlmodule	(unter nicht-installiert -> perl, siehe Allgemein zu "Lenny")
    	+ php5		(incl diverser Module siehe Allgemein zu "Lenny")
    	+ phpldapadmin
    	+ phpmyadmin
    	+ rsh-redone-client
    	+ rsync
    	+ samba
    	+ slapd
    	+ squid
    	+ squidguard
    	+ ssh
    	+ sysutils	(wegen dos2unix)
    	+ usbmount
    
    Pakete ausschliessen ist bei rigel wegen der grossen Systempartition nicht nötig.
    Installieren, anschliessend wird einiges zur Konfiguration gefragt:
    	PHPldaproot:	o=go-itservice,c=de
    	PHPldapadm:	cn=admin,o=go-itservice,c=de	
    	PHPldapstore:	config
    	PHPldappaswd:
    
    folgende User werden eingerichtet:
    	User go   (UID 801,GID 200)  /home/go
    	User uw   (UID 899,GID 200)  /home/uw
    	User gast (UID 898,GID 200)  /home/common
    
    User einrichten und /home/name übergeben:
    # chown -R username:obi /home/username
    # chmod 700 /home/username
    # chown -R gast:obi /home/common
    # chmod 770 /home/common

    Serverdienste einrichten

    bind konfigurieren (/etc/bind/named.conf.local, /etc/bind/named.conf.options) forwarder eintragen, local dir auf /etc/bind setzen /etc/resolv.conf anpassen. hosts anpassen. security.debian.org via base-config zu apt Quellen sgrX1 hinzufügen
    dhcp3 in /etc/dhcpd/dhcpd.conf einrichten
    Startskripte Datei obi1 & obi2 in /etc/init.d erstellen, die mounten Netzlaufwerk ec Apache2konfigurieren:
    sites (nur einzelne virtual Host Abschitte) in /etc/apache2/sites-available anlegen und dann einen link aus /etc/apache2/sites-enabled auf das Konfigfile anlegen.
    goweb installieren: Dateien nach /home/go/httpd spielen (sollte von altem Rechner her noch tun) im data/tools Ordner bei jeder installierten Seite das Skript
    >./bootstrap -U go -P passwd site 
    
    aufrufen, dann die vorher mit table2csv exportierten Daten wieder mit ./csv2table all site einspielen. Das Bootstrap Skript erzeugt die DB und sorgt für den grant.

    Proxy squid und Zusatz squidguard installieren

    Von blinkenden Werbebannern und anderen lässtigen "Ads" genervt, wollte ich diese loswerden. Meine Wahl fiel auf die Kombination squid mit squidguard, was gut funktioniert und recht leicht zu installieren ist. Schritte:
    squid installieren
    squidguard installieren, beide via aptitude
    Die Weiterleitung Squid => squidguard einrichten oder anpassen, diese steht in der letzten Zeile der /etc/squid/squid.conf
    redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
    
    Die Konfigdateien fuer SquidGuard ist hier als /etc/squid/squidGuard.conf festgelegt
    In der /etc/squid/squidGuard.conf verwende ich im ersten Abschnitt das voreingestellte Thema "adv" für Werbung und ein zweites eigendefiniertes namens "obi"
    Regeldaten nach /var/lib/squidguard/db/ entpacken. Diese sind kein Bestandteil von squidguard und müssen extra heruntergeladen werden.
    Rechte anpassen

    Firewall mit IP-Tables

    als Gateway und Firewall verwende ich ein aus verschiedenen Quellen zusammengebautes Shellskript. Das Skript ist hier im Anhang und wird beim Booten ausgeführt

    slapd, phpldapadmin, ldaptools

    In den Dateien /etc/ldap/slapd.conf
    suffix	"o=go-itservice, c=de"
    rootdn	"cn=admin, o=go-itservice, c=de"
    rootpw	***
    
    in der /etc/ldap/ldap.conf
    BASE		o=go-itservice,c=de
    HOST		wega.ulm.go-itservice.de
    PORT		389
    SIZELIMIT	4096
    
    Sizelimit muss wegen dem automatischen Import durch adressen2ldap (von goweb) auf einen Wert grösser als die Zeilenzahl der adressen.xls Datei gesetzt werden! in der /etc/phpldapadmin/config.php
    $servers[$i]['name'] = 'wega'; 
    $servers[$i]['host'] = '127.0.0.1';
    $servers[$i]['base'] = 'o=go-itservice, c=de';
    $servers[$i]['port'] = 389;
    $servers[$i]['auth_type'] = 'config';
    $servers[$i]['login_dn'] = 'cn=admin, o=go-itservice, c=de';
    $servers[$i]['login_pass'] = 'PASSWD';
    
    slapd und apache2 neu starten, voila!

    ntp-server konfigurieren

    in der /etc/ntp.conf folgende Zeile eintragen oder anpassen:
    broadcast 192.168.80.255
    

    Rechner als Gateway verwenden

    Bis hierher wurde der Rechner mit der IP 192.168.80.13 als Testrechner betrieben, Nun soll er als Firewall/Proxy/Gateway zwischen den Router (bisher 192.168.80.1) und das Interne Netz geschaltet werden. Es wird also ein Transfernetz zwischen Router und Internem Netz aufgebaut. Hierzu wird die IP Adresse des Routers auf 192.168.70.1 geändert. Als Client dient das Notebook polaris, auf dem mit Skripten schnell IP-Adresse, Gateway und DNS umgestellt werden könen.
    Die grundsätzlichen Änderungen sind hier beschrieben, nochmal der Vollständigkeit halber:
    /etc/hosts
    /etc/hostname
    /etc/mailname
    /etc/exim4/update-exim4.conf.conf
    /etc/network/interfaces
    
    Zusätzlich:
    /root/fwmask	
    /root/fwstart 
    /etc/dhcp3/dhcpd.conf
    /etc/mysql/my.cnf
    /etc/squid/squid.conf
    /etc/squid/squidGuard.conf
    
    in der /etc/squid/squid.conf sind es 2 Stellen:
    Die zum Zugriff erlaubten Adressen
    acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
    
    und die IP-Adressen:Ports, auf denen squid lauschen soll
    http_port 192.168.70.10:3128
    http_port 192.168.70.10:8080
    http_port 192.168.80.1:3128
    http_port 192.168.80.1:8080
    
    Achtung, wichtig in der /etc/default/dhcp3-server muss das Interfache (ethX) eintragen werden, auf dem der DHCP Server antwortet. Dies war durch meine Umbauaktionen nicht mehr richtig!

    Skript fwstart

    #!/bin/sh
    # Firewallscript "fwstart" fuer Router mit 2.4 Kernel
    # aus dem Internet zusammengestopselt von
    #
    # OBI, 2002
    # 
    EXT_IF="eth3"
    INT_IF="eth4"
    MYNET=192.168.80.0/255.255.255.0
    ALL=0.0.0.0/0.0.0.0
    
    ICMP_RATE=50/s
    ICMP_BURST=50
    LOG_RATE=10/h
    LOG_BURST=50
    
    
    echo "Starting Firewall..."
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    #--------------#
    # Prep Section #
    #--------------#
    
    ##
    ## Temporarily block all traffic until new tables are finished
    ##
    
    # Set strict filtering defaults to protect while chains are flushed
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    
    # Flush Rules
    iptables -F
    iptables -X 
    
    # Insert temporary blocking rules
    iptables -I INPUT 1 -j DROP
    iptables -I FORWARD 1 -j DROP
    iptables -I OUTPUT 1 -j DROP
    
    #-------------------#
    # Filtering Section #
    #-------------------#
    
    ##
    ## General Policies for icmp packets
    ##
    
    # Create new chain
    iptables -N icmp-policy
    
    # Allow error icmp messages
    iptables -A icmp-policy -p icmp --icmp-type destination-unreachable -j ACCEPT
    iptables -A icmp-policy -p icmp --icmp-type source-quench -j ACCEPT
    iptables -A icmp-policy -p icmp --icmp-type time-exceeded -j ACCEPT
    iptables -A icmp-policy -p icmp --icmp-type parameter-problem -j ACCEPT
    
    # Allow pings _from_ inside and privileged net
    iptables -A icmp-policy -i $EXT_IF -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A icmp-policy -i $INT_IF -p icmp --icmp-type echo-request -j ACCEPT
    
    # Allow pings _to_ anywhere
    iptables -A icmp-policy -p icmp --icmp-type echo-reply -j ACCEPT
    
    ##
    ## General Policies for tcp packets
    ##
    iptables -N tcp-policy
    
    # Log then drop suspicious packets (just one example...)
    iptables -A tcp-policy -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "XMAS scan:" 
    iptables -A tcp-policy -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    
    # Allow local traffic on server
    iptables -A INPUT -i lo -j ACCEPT
    
    # Allow approved types of icmp
    iptables -A INPUT -p icmp -j icmp-policy
    iptables -A INPUT -p icmp -j DROP
    
    # Screen out malformed tcp packets
    iptables -A INPUT -p tcp -j tcp-policy
    
    # Forward packets from internal to external net
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    iptables -A FORWARD -i $INT_IF -j ACCEPT
    
    # Allow new/established outgoing packets
    iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
    iptables -A OUTPUT -o "$EXT_IF" -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o "$INT_IF" -m state --state NEW,ESTABLISHED -j ACCEPT
    
    # established incoming packets on external network and internal network 
    iptables -A INPUT -i "$EXT_IF" -m state --state ESTABLISHED -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -m state --state ESTABLISHED -j ACCEPT
    # ... forward them
    iptables -A FORWARD -i "$EXT_IF" -m state --state ESTABLISHED -j ACCEPT
    
    # Stop Traffic to/from some servers
    iptables -A OUTPUT -d 62.109.129.145 	-j DROP # Adserver, nervt 
    iptables -A OUTPUT -d 193.28.197.8	-j DROP # Adserver, nervt 
    
    # Allow related ICMP packets from external network
    iptables -A INPUT -i "$EXT_IF" -p icmp -m state --state RELATED -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p icmp -m state --state RELATED -j ACCEPT
    
    # Allow some traffic to firewall from extern
    iptables -A INPUT -i "$EXT_IF" -p tcp --dport 22 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$EXT_IF" -p tcp --dport 80 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$EXT_IF" -p tcp --dport 389 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$EXT_IF" -p tcp --dport 3128 -m state --state NEW -j ACCEPT
    
    # Allow some traffic to firewall from intern
    iptables -A INPUT -i "$INT_IF" -p tcp --dport 22 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p tcp --dport 53 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p udp --dport 53 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p tcp --dport 80 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p udp --dport 123 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p tcp --dport 443 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p tcp --dport 389 -m state --state NEW -j ACCEPT
    iptables -A INPUT -i "$INT_IF" -p tcp --dport 3128 -m state --state NEW -j ACCEPT
    
    # Anything else is logged at a reasonable rate then dropped
    # iptables -A INPUT -i $EXT_IF -m limit --limit $LOG_RATE --limit-burst $LOG_BURST -j LOG --log-prefix "Blocked from external net:" 
    # iptables -A INPUT -i $INT_IF -m limit --limit $LOG_RATE --limit-burst $LOG_BURST -j LOG --log-prefix "Blocked from internal net:" 
    iptables -A INPUT -j DROP 
    
    #--------------#
    # Post Section #
    #--------------#
    
    # Mask all outgoing
    iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
    
    ##
    ## Restore traffic
    ##
    
    # Restore normal defaults now that rules are finished
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    
    
    # Delete temporary blocking rules
    iptables -D INPUT 1
    iptables -D FORWARD 1
    iptables -D OUTPUT 1
    
    echo ".... ok"
    

    Konfigurationsdatei /etc/squid/sqidGuard.conf

    #
    dbhome /var/lib/squidguard/db/BL
    logdir /var/log/squid
    
    dest adv {
    	domainlist	adv/domains
    	urllist		adv/urls
    	redirect 302:http://192.168.80.1:80/images/pixel_C0C0C0.gif
    	log blocked.log
    }
    
    dest obi {
    	domainlist	obi/domains
    	urllist		obi/urls
    	redirect 302:http://192.168.80.1:80/images/pixel_C0C0C0.gif
    	log blocked.log
    }
    
    acl {
    	default {
    		pass !adv all
    	}
    }