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

 

Was wollen wir erreichen

 

HARDWARE

 

SOFTWARE

 

LAN Konfiguration

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

 

 

VORBEREITUNG

 

Grundkonfiguration:

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

 

Dienste einrichten

In diesem Kapittel beschreibe ich für jedem Dienst wie dieser konfiguriert und aktiviert wird.

 

LOGFILE auf anderem Rechner

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.

 

Auf der FIREWALL

/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

 

Auf dem LOG-RECHNER

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.

 

TDSL

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

 

 

TDSL Verbinding beim Start automatisch starten

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 simples Firewall-script

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

 

 

DDUP / dyndns.org nameservice

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

 

NTP Zeitserver

 

/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

 

SQUID als transparenter HTTP Proxy

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 .

 

JFTPGW als transparenter FTP Proxy

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

 

SSH weiterleiten

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

 

HTTP weiterleiten

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

 

eDonkey freigeben

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 :-)

 

POSTFIX als SMTP-Server

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:

  1. postfix als mail relay, alle Mails werden an smtprelay.t-online.de weitergeleitet.
  2. postfix liefert die Mails direkt an den Mailserver des Empfängers

 

/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.

 

BIND als DNS Server

http://www.tu-harburg.de/dlhp/HOWTO/DE-DNS-HOWTO.html

 

DHCP Server

 

 

Weitere Informationen

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 :-)