IPFW Syntax

xcvb

Well-Known Member
Hallo.

Wie man erahnen kann nutze ich IPFW als Paketfilter. Ich versuche mich gerade auch an Dummynet, aber darum soll es jetzt nicht gehen. Trotzdem: Die Syntax und Doku für ipfw + dummynet ist für nicht Entwickler echt ne Hürde. Da ist PF meilenweit voraus...

Ich habe ein funktionierendes Regelwerk, wollte aber aufgrund der besseren Lesbarkeit die Konfiguration in zwei Dateien splitten. Doch irgendwie stolpere ich dann über die Syntax.

/etc/ipfw.script
Code:
#!/bin/sh

### Initiate variables
NIC="{nfe0}"
LAN="{1.2.3.4/8}"
PEGASUS="{1.2.3.5}"
HTTPD="{1.2.3.6}"
NGINX="{1.2.3.7}"
SSL="{1.2.3.8}"
JAILS="{ $HTTPD, $NGINX, $SSL }"

### Execute ipfw rules
/sbin/ipfw -q /etc/ipfw.rules

/etc/ipfw.rules
Code:
### flush rules and tables
flush
table all flush

### setup lookup table
table 1 add 1.2.3.4/8
table 1 add 4.3.2.1

### setup loopback
add allow ip from any to any via lo0
add deny ip from any to 127.0.0.1/8
add deny ip from 127.0.0.1/8 to any

### reassemble incoming fragments
add reass all from any to any in

### stateful filtering
add check-state

### for services permitted below
add allow tcp from me to any established

### allow any connection out, adding state for each
add allow tcp from me to any setup keep-state
add allow udp from me to any keep-state
add allow icmp from me to any keep-state

### allow my Router
add allow ip from 1.2.3.1 to me

### allow incoming SSH from trusted hosts or networks
add allow tcp from "table(1)" to any 22 in setup keep-state

### allow incoming SSH from everywhere
#add allow tcp from any to me 22 in setup keep-state

### allow public access to jailed Apache httpd
add allow tcp from any to ${HTTPD} 80 in setup

### other rules... ###

Führe ich nun das erste Skript aus mag der die "table"-Sachen und Variablen nicht:
Code:
Line 40: hostname ``"table(1)"'' unknown
Line 46: hostname ``$'' unknown

Hab schon versucht das anders zu quoten, aber es läuft nicht.
 
Table ist verkehrt geschrieben, table(1), nicht "" setzen

JAILS="{ $HTTPD, $NGINX, $SSL }"

dann $JAILS
from any to $JAILS 80 in setup

Ich würde nicht soviel mit den Variablen spielen, das bringt überhaupt kein Vorteil und besser setzt add Nummer, bei ipfw show suchst du auch weniger.
Gruß
 
Bei table(1) mussten die "" weg. Dann geht das zumindest.
Bei den Variablen hingegen geht das auch ohne "" nicht.
Code:
Regel:
add allow tcp from any to $HTTPD 80 in setup

Fehler:
Line 41: hostname ``$HTTPD'' unknown

Was meinst du mit "add nummer" und Suche??? Die werden doch auch automatisch gesetzt wenn ich das nicht manuell mache.
 
Wenn man das selbst nunmeriert ist dann später weniger sucherei. Außerdem gibts auch Sachen die mit Nummern arbeiten und wenn ipfw sich die beste für sich raussucht kann die Sache witzlos oder auch in die Hose gehen. Beispiel ist delete.

bei dir fehlt auch ein flush:
### Execute ipfw rules
/sbin/ipfw -q -f /etc/ipfw.rules

Hier hast du noch paar Sachen für Jail/s

http://forums.freebsd.org/showthread.php?p=96083
http://freebsd.1045724.n5.nabble.com/Jails-and-IPFW-td3972145.html

Ich hab gerade gesehen bei dir steht ja zweimal HTTPD und ich hab mir das verkehrte rausgesucht

das HTTPD="{1.2.3.6}" ändern zu HTTPD="1.2.3.6" , die Klammern weglassen.
rules:
add allow tcp from any to $HTTPD 80 in setup

da hat bei mir noch was von dem schwarzen Zeugs gefehlt

Gruß
 
Zuletzt bearbeitet:
bei dir fehlt auch ein flush:
### Execute ipfw rules
/sbin/ipfw -q -f /etc/ipfw.rules

Nö, das glaub ich nicht. In den manpage steht:
−q Be quiet when executing the add, nat, zero, resetlog or flush commands; (implies −f).

Also, es ist wohl so, dass mir die Variablen die ich in /etc/ipfw.script definiert habe, mir gar nicht in /etc/ipfw.rules zur Verfügung stehen. Deswegen kennt er die dann auch nicht und wirft Fehler.
 
ja, okay, im zweiten Script /etc/ipfw.rules steht ja auch flush

Definier einfach jeden Jail für sich und gut ist die Sache oder packst die drei oder vier ip's in eine Tafel. Die Variablen muß nicht sein und bringt nicht viel
und das funzt nicht:

HTTPD="{1.2.3.6}"
NGINX="{1.2.3.7}"
SSL="{1.2.3.8}"
rule:
add Nummer proto from any to ip ip ip 80 in setup

und ssl läuft auf port 80
Gruß
 
Zuletzt bearbeitet:
Zurück
Oben