Re: DSL+nat+ipfw+dummynet+apache

From: Malte von dem Hagen <DocValde(at)GMX.de>
Date: Wed, 19 Feb 2003 06:15:36 +0100

Hallo Skalla Raabjorn,
am Mittwoch, 19. Februar 2003 um 03:09:27 schrieben Sie:

> aber um die ganze sache etwas vernünftiger zu gestalten, und vor allem
> dummynet zu benutzen, stelle ich hier einfach mal die frage, wie mache ich
> das?

Eins vorweg: Ich bin da auch noch Rookie, also alles ohne Gewähr, Fehler
bitte verzeihen. Desweiteren bin ich noch in der Testphase, die Kiste
ist also noch nicht so dicht, wie sie sein könnte.

Die Reihenfolge sieht so aus:

1. Kernel kompilieren.
2. NAT einrichten
3. Firewalling einrichten
4. Traffic Shaping einrichten

bei mir funktioniert das so:

in der Kernel Config stehen bei mir zusätzlich

options MROUTING # Wofür ist das eigentlich?
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
options IPDIVERT
options IPSTEALTH # Und das hier?
options TCPDEBUG # Und das hier?
options IPFW2

bzgl. IPFW2 bitte http://michael.gargantuan.com/FreeBSD/ipfw2.htm
beachten. Was ich nicht übernommen habe von dort, brauchte ich bislang
nicht. IPFIREWALL_DEFAULT_TO_ACCEPT hab ich gesetzt, um mich nicht im
Zweifelsfall selbst auszusperren, das hebt das Regelset nachher wieder
auf.

/etc/sysctl.conf:

# $FreeBSD: src/etc/sysctl.conf,v 1.1.2.3 2002/04/15 00:44:13 dougb Exp $
#
# This file is read when going to multi-user and its contents piped thru
# ``sysctl'' to adjust kernel values. ``man 5 sysctl.conf'' for details.
#
sysctl net.inet.tcp.blackhole=2
sysctl net.inet.udp.blackhole=1

/etc/rc.conf:

font8x14="cp850-8x14"
font8x16="cp850-8x16"
font8x8="cp850-8x8"
gateway_enable="YES"
hostname="gwendoline.docvalde.local"
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_ed0="inet 10.0.0.1 netmask 255.0.0.0"
kern_securelevel_enable="NO"
keymap="german.cp850"
moused_enable="NO"
moused_type="NO"
router="/sbin/routed"
router_enable="YES"
router_flags="-q"
saver="fire"
sendmail_enable="NONE"
sshd_enable="YES"
usbd_enable="NO"
ppp_enable="YES"
ppp_profile="default"
ppp_mode="ddial"
ppp_nat="NO"
named_enable="YES"
font8x8="/usr/share/syscons/fonts/iso02-8x8.fnt"
allscreens_flags="132x43"
sshd_flags="-4"
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
firewall_enable="YES"
firewall_script="/etc/ipfw.conf"
firewall_type="open"
firewall_logging="YES"

/etc/natd.conf:

log no
deny_incoming no
same_ports yes
dynamic yes
verbose no
interface tun0
#
# Destination NAT für ftp, ssh, http, WinMX, eMule, passives FTP
redirect_port tcp 192.168.0.4:21 21
redirect_port tcp 192.168.0.4:22 22
redirect_port tcp 192.168.0.4:80 80
redirect_port tcp 192.168.0.4:4661 4661
redirect_port tcp 192.168.0.4:6699 6699
redirect_port udp 192.168.0.4:6700 6700
redirect_port tcp 192.168.0.4:10000-10100 10000-10100

/etc/ipf.conf:

# loopback lo0
ipfw add allow ip from any to any via lo0

# alles via PPPoE NATen
ipfw add divert natd all from any to any via tun0

# ICMP erlauben
ipfw add permit icmp from any to any

#
# Von innen nach außen ist alles erlaubt
#
# eingehenden Verbindungen aus dem lokalen Netz erlauben
ipfw add permit ip from 192.168.0.0/24 to any recv rl0 keep-state
#
# ausgehende Verbindung ins Internet erlauben
ipfw add permit ip from any to any xmit tun0 keep-state

#
# Von außen nach innen sind nur bestimmte Dienste erlaubt
#
# eingehende Verbindungen zu den angebotenen Diensten erlauben
ipfw add permit tcp from any to any 21,22,80 recv tun0 keep-state
ipfw add permit tcp from any to any 10000-10100 recv tun0 keep-state
ipfw add permit tcp from any to any 4661,6699 recv tun0 keep-state
ipfw add permit udp from any to any 6700 recv tun0
#
# lokal ausgehende Verbindungen zu den Diensten erlauben
ipfw add permit tcp from any to 192.168.0.4 21,22,80 xmit rl0 keep-state
ipfw add permit tcp from any to 192.168.0.4 10000-10100 xmit rl0 keep-state
ipfw add permit tcp from any to 192.168.0.2 4661,6699 xmit rl0 keep-state
ipfw add permit udp from any to 192.168.0.2 6700 xmit rl0

# alles andere verbieten
ipfw add reject ip from any to any

Diese Firewall Config ist noch ziemlich roh - ICMP Feintuning fehlt bspw
noch, Anti-Spoofing auch, und daß von innen nach außen alles erlaubt
ist, wird auch noch geändert. Das bekommst Du aber sicher mit den
entsprechenden Google-Ergebnissen hin. Das gröbste deckt sie jedoch ab.
Zusätzlich machen noch Kernel Securelevel, Tripwire, Logging, IDS,
Proxying Sinn. Aber eins nach dem anderen.

Soweit schon mal das. Das funktioniert bei mir soweit - ich bitte um
peer review! Nun fehlt nur noch das traffic shaping - da ist "man ipfw"
Dein Freund. Die Doku zu dummynet ist ziemlich bescheiden, da bin ich
selbst noch nicht durch, was das priorisieren von Diensten angeht.
Bandbreitenbegrenzung funktioniert aber ganz gut, da gibt's auch
Beispiele im Netz.

Vielleicht kommt von anderen hier ja auch noch mehr an Hinweisen.

Gruß,

Malte.

-- 
Malte von dem Hagen
DocValde(at)gmx.de
http://www.docvalde.net/
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 19 Feb 2003 - 06:14:53 CET

search this site