| |||
|
rigel.ulm.go-itservice.de
IBM Thinkpad T40 mit Debian Squeeze VorbereitungDen guten alten T40 hatte ich vor polaris als Laptop verwendet und die letzten Jahre nur mehr sporadisch. Nun kommt er als Server und Firewall wieder zum Einsatz.Als Festplatte verwendete ich eine 32GB SSD. Beim T40 passt im Gegensatz zum X40 eine ganz normale 2,5" Platte. Linux installieren:Booten von der Debian Squeeze 6.0.1 Netboot CD, wobei ich das DVD Laufwerk beim Booten als temporäres Bootmedium wählte.Der übliche Installationsdialog mit Land/Tastaturbelegung ec. Partitionierung folgt. Das Netzwerk stellte ich manuell ein, ich habe den Rechner erstmal mit der IP .2 versehen, später wird er dann als Ersatz für den alten rigel als Server und Firewall auf .1 umgestellt... Konfiguration: manuell (auswahl) IP Adresse: 192.168.80.2 Netmask: 255.255.255.0 Gateway: 192.168.80.1 DNS: 192.168.80.1 Rechnername: rigel Domäne: ulm.go-itservice.deResthardwareerkennung, Partitionierung Festplatte: manuell 31,0 GB sda1 / ext3 1,0 GB swapÄnderungen schreiben, Partitionierung erfolgt. Als Zielverwendung wählte ich: webserver notebookAnschliessend wird das Grundsystem installiert, was etwas dauert, da alles über DSL heruntergeladen werden muss. Zuletzt wird der neue GRUB Bootloader im MBR installiert, die CD ausgeworfen und um Neustart gebeten ... nach dem neu booten und anmelden an der Konsole, aptitude starten, nicht installierte Pakete auswählen,
am besten über "Suche":
+ bind9 + catdoc (wegen xls2csv) + cryptsetup + debconf-utils + dhcp3 server + hdparm + imagemagix + iptables + ldap-utils + lynx + mcrypt + mysql-client (= mysql-client-5.1 + mysql-common) + mysql-server (= mysql-server-5.1 + mysql-common) + ntpdate + perlmodule (unter nicht-installiert -> perl, siehe "Allgemeines zu squeeze") + php5 (incl diverser Module , siehe "Allgemeines zu squeeze") + phpldapadmin + phpmyadmin + rsh-redone-client + rsync + samba + slapd + squid + squidguard + ssh + sysutils (wegen dos2unix)Installieren, anschliessend wird einiges zur Konfiguration gefragt. Die Daten vom alten rigel Lenny habe ich in den Unterordner /OLD kopiert.
# cat /OLD/etc/passwd >> /etc/passwd # cat /OLD/etc/shadow >> /etc/shadow # cat /OLD/etc/groups >> /etc/groups # vi etc/passwd ..alle doppelten,allgemeinen User und Gruppen löschenl, dabei Vorsicht! Serverdienste einrichtenbind 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.dhcp3 in /etc/dhcpd/dhcpd.conf einrichtenStartskripte Datei obi1 in /etc/init.d erstellen, wichtig, neues Format verwenden!
dann update-rc.d obi1 start ausführen. Hierdurch wird der Link Snnobi1 korrekt in
/etc/rcn.d angelegt.Apache2 konfigurieren: 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. Hier wurden beide Verzeichnisse
vom alten Server kopiertmysql Datenbanken anlegen: Als root an der Datenbank anmelden, dann sukzessive die einzelnen Datenbanken nebst GRANTS anlegen (z.B. myulm): > CREATE DATABASE myulm; > GRANT ALL PRIVILEGES ON myulm.* TO USER@localhost IDENTIFIED BY 'PASSWD';am alten Server werden die Daten exportiert und auf den neuen übertragen: mysqldump -uUSER -pPASSWD myulm > myulm.sql scp myulm.sql root@192.168.80.1:/tmpam neuen einspielen: mysql -uUSER -pPASSWD myulm < myulm.sql Proxy squid und Zusatz squidguard installierenVon 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.confDie 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" Die shallalist Regeldaten holen von http://www.shallalist.de/Downloads/shallalist.tar.gz Dieses Datei verschieben nach /var/lib/squidguard/db/ . Es wird davon ausgegangen das squid unter dem User
proxy läuft.
# cd /var/lib/squidguard/db/ # gunzip shallalist.tar.gz # tar -xvf shallalist.tar # chown -r proxy:proxy BL # /etc/init.d/squid restart # tail -F /var/log/squid/blocked.logjetzt lossurfen mit rigel als Proxy. Auf den meisten Mainstreamwebseiten tauchen sofort Einträge in der blocked.log
auf. Weiterer Vorteil der Werbeausblendung: Surfen ist merklich schneller und die CPU Auslastung durch den Browser oft wesentlich
niedriger.
Firewall mit IP-Tablesals Gateway und Firewall verwende ich ein aus verschiedenen Quellen zusammengebautes Shellskript. Das Skript ist hier im Anhang und wird beim Booten ausgeführtslapd, phpldapadmin, ldaptoolsIn 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 4096Sizelimit 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 konfigurierenin der/etc/ntp.conf folgende Zeile eintragen oder anpassen:
broadcast 192.168.80.255 Rechner als Gateway verwendenBis 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/interfacesZusätzlich: /root/fwmask /root/fwstart /etc/dhcp3/dhcpd.conf /etc/mysql/my.cnf /etc/squid/squid.conf /etc/squid/squidGuard.confin 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 networkund 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:8080Achtung, 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 # # go@guenther-obermaier.de, 2002 # EXT_IF="eth2" INT_IF="eth1" 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 -m limit --limit $LOG_RATE --limit-burst $LOG_BURST -j LOG --log-prefix "XMAS scan:" 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, but limited in rate # iptables -A INPUT -m limit --limit $ICMP_RATE --limit-burst $ICMP_BURST -p icmp -j icmp-policy iptables -A INPUT -p icmp -j icmp-policy # iptables -A OUTPUT -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 # Forward :81 to LAN-Cam .47:80 iptables -t nat -A PREROUTING -i "$EXT_IF" -p tcp --dport 81 -j DNAT --to 192.168.80.47:80 iptables -A FORWARD -d 192.168.80.47 -i "$EXT_IF" -p tcp --dport 80 -j ACCEPT # 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 53 -m state --state NEW -j ACCEPT iptables -A INPUT -i "$EXT_IF" -p udp --dport 53 -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 udp --dport 123 -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 563 -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 21 -m state --state NEW -j ACCEPT 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 389 -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 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://myulm.go-itservice.com:80/images/pixel_C0C0C0.gif log blocked.log } dest obi { domainlist obi/domains urllist obi/urls redirect 302:http://myulm.go-itservice.com:80/images/pixel_C0C0C0.gif log blocked.log } acl { default { pass !adv all } } |