DEVIL-LINUX TDSL-Router HOWTO
DEVIL-LINUX als "state of the art" TDSL-Router/Firewall (und mehr) einrichten:
von Arnd Großmann [arnd (AT) ctag DOT de]
Version 0.5 vom #, #
Table of Contents
1.Was wollen wir erreichen 2
1.1.HARDWARE 2
1.2.SOFTWARE 2
1.3.LAN Konfiguration 2
2.VORBEREITUNG 2
2.1.Grundkonfiguration: 2
3.Dienste einrichten 4
3.1.LOGFILE auf anderem Rechner 4
3.1.1.Auf der FIREWALL 4
3.1.2.Auf dem LOG-RECHNER 4
3.2.TDSL 4
3.2.1.TDSL Verbinding beim Start automatisch starten 5
4.Ein simples Firewall-script 6
4.1.DDUP / dyndns.org nameservice 7
4.2.NTP Zeitserver 7
4.3.SQUID als transparenter HTTP Proxy 7
4.4.JFTPGW als transparenter FTP Proxy 8
4.5.SSH weiterleiten 8
4.6.HTTP weiterleiten 8
4.7.eDonkey freigeben 9
4.8.POSTFIX als SMTP-Server 9
Netzwerk: 192.168.0.0/24 "my.lan"
Router/FW: 192.168.0.1 "firewall.my.lan"
HTTP Server: 192.168.0.2
DHCP: nein
tar xzf etc.tar.gz
etc/sysconfig/config: (Konfiguration und zu startende Dienste)
KEYBOARD_LAYOUT="de-latin1"
TIMEZONE="CET"
UTC=0
HOSTNAME=firewall.my.lan
DOMAIN=my.lan
START_ROUTING=yes
START_FIREWALL=yes
START_SSHD=yes
etc/sysconfig/software: (Zu instalierende Software, welche Programme überhaupt zur Verfügung stehen sollen)
INSTALL_OPENSSH=yes
INSTALL_PPP=yes
INSTALL_RP_PPPOE=yes
etc/sysconfig/nic/ifcfg-eth0: (Konfiguration der 1. Netzwerkarte, ins LAN, 100MBit)
DHCP=no
ONBOOT=yes
DEVICE=eth0
IP=192.168.0.1
NETMASK=255.255.255.0
MODULE=3c59x
etc/sysconfig/nic/ifcfg-eth0: (Konfiguration der 2. Netzwerkarte, zum TDSL-Router, 10MBit)
DEVICE=eth1
ONBOOT=no
DHCP=no
#IP=192.168.1.1
NETMASK=255.255.255.0
#BROADCAST=
MODULE=3c59x
Alles weitere können wir jetzt von einem anderen Rechner im LAN konfigurieren, SSH sei dank.
Dazu gibt es mehrere Möglichkeiten:
1. LINUX Konsole:
ssh root@192.168.0.1
2. KDE3 KONQUEROR und KATE zum editieren (einfach cool :-)
sftp://root@192.168.0.1/etc
3. Windows: putty
In diesem Kapittel beschreibe ich für jedem Dienst wie dieser konfiguriert und aktiviert wird.
Damit wir das Logfile komfortabel von einem anderen Rechner (hier 192.168.0.2) aus betrachten können, leiten wir jetzt die Meldungen unserer Firewall auf diesen Rechner um.
/etc/syslog-ng/syslog-ng.conf
destination loghost { udp("192.168.0.2" port(514)); };
log { source(src); destination(loghost); };
/etc/init.d/syslog-ng restart
Hier ein MANDRAKE LINUX 8.1 Rechner mit syslog
/etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0 -r -a 192.168.0.254:syslog"
/etc/init.d/syslog restart
Wenn alles funktioniert sollte auf dem LOG-Rechner in /var/log/messages jetzt auch die Meldungen der Firewall zu sehen sein.
save-config nicht vergessen.
Jetzt richten wir noch den Zugang für TDSL ein, damit unsere Firewall auch eine Verbindung ins Internet hat :-)
/etc/sysconfig/config:
# install PPP?
INSTALL_PPP=yes
# install RP-PPPoE?
INSTALL_RP_PPPOE=yes
/etc/ppp/pppoe.conf:
ETH='eth1'
USER='0001234567890123456789010001@t-online.de' # Dein t-online benutzer name
DEMAND=300
DNSTYPE=SERVER
USEPEERDNS=YES
DEFAULTROUTE=yes
CLAMPMSS=1412
FIREWALL=MASQUERADE
/etc/ppp/pap-secrets & /etc/ppp/chap-secrets:
"0001234567890123456789010001@t-online.de" * "123456789"
save-config nicht vergessen.
So jetzt sollte durch Eingabe von adsl-start eine Internetverbindung hergestellt werden.
Am besten testet Ihr jetzt mit ping www.ctag.de ob dem so ist.
Aber Vorsicht: Ihr habt momentan keine richtige Firewall, so daß Ihr nicht lange online bleiben solltet. (also adsl-stop)
Jetzt noch dafür sorgen das unser firewall Skript (/etc/init.d/firewall.rules) automatisch gestartet wird:
cd /etc/ppp
mv firewall-masq firewall-masq.old
ln -s ../init.d/firewall.rules firewall-masq
mv firewall-standalone firewall-standalone.old
ln -s ../init.d/firewall.rules firewall-standalone
Wenn Ihr wie ich eine FlatRate habt, wollt Ihr wahrscheinlich auch, das die Verbindung jederzeit ohne eine zusätzliche Eingabe zur Verfügung steht. Dabei wird die Verbindung aufgebaut, sobald Daten nach außen gesendet werden und nach 300 (siehe /etc/ppp/pppoe.conf: DEMAND=300) Sekunden ohne gesendete Daten wieder beendet.
/etc/init.d/adsl:
#!/bin/bash
# settings
source /etc/sysconfig/config
# parameters
NAME="ADSL service"
CONFIGNAME=ADSL
DAEMON=/usr/sbin/adsl-start
PARAMETER=
# source function library
source /etc/init.d/functions
eval START=\$START_$CONFIGNAME
[ "$START" = "yes" ] || exit 0
if [ ! -e $DAEMON ]; then
echo
echo "$DAEMON not found. Did you install the package?"
exit 1
fi
case "$1" in
start)
echo -n "Starting $NAME: "
adsl-start
;;
stop)
echo -n "Shutting down $NAME: "
adsl-stop
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
/etc/sysconfig/config:
START_ADSL=yes
Jetzt müssen wir nur noch dafür sorgen dass der ADSL Dienst beim Start auch gestartet und beim Herunterfahren auch beendet wird. Dazu legen wir in Verzeichnis /etc/init.d/rc3.d zwei Symbolische Links an:
cd /etc/init.d/rc3.d
ln -s ../adsl S10adsl
ln -s ../adsl K11adsl
So jetzt sollte der ADSL-Link beim start der Firewall erstellt werden.
Ein ersteinmal ein simples, rudimentäres Firewall Skript welches als default alles sperrt, Masquerading einschaltet, den lokalen Prozessen alles erlaubt und den Port für die Logfile-Weiterleitung freigibt. Alle weiteren Regeln ergeben sich aus den unten beschriebenen Diensten und werden dort angegeben.
/etc/init.d/firewall.rules
# Path to IPTABLES executable
IPTABLES=/usr/sbin/iptables
LAN=192.168.0.0/24
INTERNET=0.0.0.0/0
EXTIF=ppp0
INTIF=eth0
IP=`/sbin/ifconfig $EXTIF | grep inet | cut -d : -f 2 | cut -d ' ' -f 1`
INTIP=192.168.0.1
LOGIP=192.168.0.2
# Turn on IP forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward &> /dev/null
# Turn on kernel IP spoof protection &> /dev/null
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts &> /dev/null
# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies &> /dev/null
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route &> /dev/null
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects &> /dev/null
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects &> /dev/null
modprobe ip_tables
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_MASQUERADE
$IPTABLES -X # delete all userdefined chains
$IPTABLES -F # flush aller chains (Tabelle filter)
$IPTABLES -t nat -F # flush aller chains (Tabelle nat)
# erstmal alles sperren
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
# MASQUERADE the connection
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -s $LAN -j MASQUERADE
$IPTABLES -A FORWARD -o $EXTIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
# lokale Prozesse, alles erlauben
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
# syslog to other server in lan
$IPTABLES -A OUTPUT -p udp --sport 514 -d $LOGIP -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 1024: ! --syn -j ACCEPT
Durch diesen kostenlosen service wird es uns ermöglicht, unsere Firewall, wenn sie online ist, über einen Namen (z.B. "test.dyndns.org") zu erreichen. Und das ist gerade bei dynamischer IP-Adressvergabe sehr nützlich :-)
Solltest Du noch kein account bei dyndns.org haben, so solltest Du diesen jetzt bei www.dyndns.org einrichten.
Jetzt zur eigentlichen Konfiguration:
ddup --makeconf
Gib deinen Usernamen und das Passwort an. Auf die Frage welcher User ddup benutzen darf antworte mit: root
Jetzt binden wir ddup noch in das ip-up-Skript ein, damit bei jeder Einwahl die ggf. neue IP-Adresse unserer Firewall an den dyndns.org Dienst übermittelt wird.
/etc/ppp/ip-up
ddup --host test.dyndns.org
/etc/ntp.conf
server 195.145.119.188 prefer # ntp1.sda.t-online.de prefer
server ntp0.fau.de
server ntps1-0.uni-erlangen.de
server ntps1-1.uni-erlangen.de
/etc/ppp/ip-up
/etc/init.d/xntpd start
Transparent heißt hier, daß jeglicher HTTP-Verkehr über einen Proxy auf der Firewall läuft. Das hat den Vorteil, daß wir keine Programme speziell konfigurieren müssen, die Übertragung durch Zwischenspeicherung beschleunigt wird und wir die Verbindungen, wenn gewünscht, auch überwachen/filtern/sperren können.
Um squid nutzen zu können brauchen wir für den cache ein Verzeichnis auf der Festplatte, so daß wir jetzt die Festplatte einrichten müssen :-( (Vielleicht können wir in Zukunft auch eine RAM-Disk nutzen, so daß die Festplatte wieder überflüssig wird)
etc/sysconfig/software
# install Squid HTTP Proxy?
INSTALL_SQUID=yes
etc/sysconfig/config
# Start Squid HTTP Proxy?
START_SQUID=yes
/etc/init.d/firewall.rules
$IPTABLES -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-port 3128
/etc/squid.conf
acl lan src 192.168.0.0/24
http_access allow lan
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on .
Transparent heißt auch hier, daß jeglicher FTP-Verkehr über einen Proxy auf der Firewall läuft. Das hat den Vorteil, daß wir keine Programme speziell konfigurieren müssen und wir die Verbindungen, wenn gewünscht, auch überwachen/filtern/sperren können.
etc/sysconfig/software
# install JFTPGW?
INSTALL_JFTPGW=yes
etc/sysconfig/config
# Start JFTPGW?
START_JFTPGW=yes
/etc/init.d/firewall.rules
$IPTABLES -t nat -A PREROUTING -i $INTIF -p tcp --dport 21 -j REDIRECT --to-port 2370
/etc/jftpgw.conf
transparent-proxy on
Mit diesen Einstellungen leiten wir den Port 23 auf der Firewall auf den SSH Port (22) des Rechners 192.168.0.2 um. Damit können wir vom Internet aus auch diesen Rechner direkt mit SSH (ssh -p 23 test.dyndns.org) ansprechen.
/etc/init.d/firewall.rules
$IPTABLES -A FORWARD -i $EXTIF -p tcp -s $INTERNET --dport 22 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $EXTIF -s $INTERNET -p tcp -d $IP --dport 23 -j DNAT --to 192.168.0.2:22
Hier konfigurieren wir eine Portweiterleitung des Port 80 (http/webserver) auf einen Rechner (192.168.0.2) im LAN auf dem ein Webserver läuft.
/etc/init.d/firewall.rules
# WEBSERVER HTTPD auf anderem Rechner
$IPTABLES -A FORWARD -i $EXTIF -p tcp -s $INTERNET --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -p tcp -d $INTERNET --sport 80 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $EXTIF -s $INTERNET -p tcp -d $IP --dport 80 -j DNAT --to 192.168.0.2
Wir Ihr den eDonkey Dienst auf einen bestimmten Rechner (hier 192.168.0.2) in anspruch nehmend wollt, solltet Ihr folgende FirewallRegeln hinzufügen.
/etc/init.d/firewall.rules:
#eDonkey
$IPTABLES -t nat -A PREROUTING -i $EXTIF -s $INTERNET -p tcp -d $IP --dport 4661 -j DNAT --to 192.168.0.2:4661
$IPTABLES -t nat -A PREROUTING -i $EXTIF -s $INTERNET -p tcp -d $IP --dport 4662 -j DNAT --to 192.168.0.2:4662
$IPTABLES -t nat -A PREROUTING -i $EXTIF -s $INTERNET -p tcp -d $IP --dport 6343 -j DNAT --to 192.168.0.2:6343
$IPTABLES -t nat -A PREROUTING -i $EXTIF -s $INTERNET -p udp -d $IP --dport 4665 -j DNA
T --to 192.168.0.2:4665
$PTABLES -A FORWARD -i $EXTIF -s $INTERNET -p tcp --dport 4661:4662 -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -s $LAN -p tcp --dport 4661:4662 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -s $INTERNET -p tcp --dport 6343 -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -s $LAN -p tcp --dport 6343 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -s $INTERNET -p udp --dport 4665 -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -s $LAN -p udp --dport 4665 -j ACCEPT
Wahrscheinlich gibt es bessere Lösungen, aber diese funktioniert hier :-)
SMTP steht für Simple Mail Transfer Protocol und wird meist für den Versand von eMails benutzt. Damit nicht jeder Computer in unserem lokalen Netzwerk seine Mails direkt zu einem solchen Server verschicken muß, benutzen wird unsere Firewall/Route einfach als Zwischenspeicher. Das beschleunigt zum einen den Mailversand auf den Rechnern im Lan, wir breuchen nicht extra den SMTP-Port auf der Firewall zu öffnen und wird brauchen uns nicht irgendwelche fremden SMTP_server Namen/IP-Adressen zu merken :-)
Hierfür gibt es zwei Möglichkeiten:
/etc/postfix/main.cf
myhostname = mail.my.lan
mynetworks = 192.168.0.0/24
relayhost = smtprelay.t-online.de
Für die 2. Variante die relayhost Zeile einfach auskommentieren (# am Anfang der Zeile einfügen)
/etc/init.d/postfix
#!/bin/bash
source /etc/sysconfig/config
NAME="postfix mail service"
CONFIGNAME=POSTFIX
DAEMON=/usr/bin/postfix
source /etc/init.d/functions
eval START=\$START_$CONFIGNAME
[ "$START" = "yes" ] || exit 0
if [ ! -e $DAEMON ]; then
echo
echo "$DAEMON not found. Did you install the package?"
exit 1
fi
case "$1" in
start)
echo -n "Starting $NAME: "
loadproc $DAEMON start
;;
stop)
echo -n "Shutting down $NAME: "
loadproc $DAEMON stop
#killproc $DAEMON
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
Jetzt noch die fehlenden symbolischen Links anlegen, damit postfix auch beim Systemstart gestartet wird:
cd /etc/init.d/rc3.d
ln -s ../postfix S12postfix
ln -s ../postfix K09postfix
Mit /etc/init.d/postfix start kann der smtp-Dienst jetzt gestartet werden.
http://www.tu-harburg.de/dlhp/HOWTO/DE-DNS-HOWTO.html
Eine erste gute Anlaufstelle ist das Deutsche Linux HowTo Projekt (http://www.tu-harburg.de/dlhp/)
Das online Buch "Linux - Wegweiser für Netzwerker" (http://www.oreilly.de/german/freebooks/linag2/inhalt.htm)
more to come / Mehr kommt später :-)