Nabend.
Wie so oft, es entscheidet die Religionszugehörigkeit darüber was besser ist oder auch nicht.
Da Du als firewall IPFW einsetzen willst (so sah es bisher zumindest aus), kannst Du auch NATD gleich rennen lassen. Dazu braucht es auch des divert sockets.
Alles andere wie man NATD einsetzt hatte ich ja in den vorherigen postings schon geschrieben, kann das aber gerne nochmals machen.
Dein Kernel sollte für PPPoE
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_PPPOE
dies haben, und für IPFW und NATD
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPDIVERT
dies.
Hmm, wenn ich mich recht entsinne kann man vieles aber auch schon mit "kldload" als Module nachladen, musst Du mal ausprobieren, das kann ich nicht mit Sicherheit sagen.
Aber ACHTUNG bei IPFW.
Wenn Du obiges in den Kernel einbaust, und nach bau des Kernels neu startest, wirst Du von aussen nicht mehr auf den Rechner kommen, ebenso wird jeder Zugriff von diesem Rechner nach aussen geblockt. Warum? Nun, als einzige, wenn auch letzte rule, wird als Standard hierbei
65534 add deny ip from any to any
gesetzt.
Im Prinzip gut, denn Du kannst Deine Rules dann später in Deiner eignene ipfw rules Datei darüber bauen, und alles was diesen rules dann nicht entspricht, wird automatisch geblockt.
Daher, setze auch folgendes in die /etc/rc.conf ein:
firewall_type="OPEN"
Wenn Du entsprechende eigene rules geschrieben hast, die WIRKEN sollen, das natürlich wieder rausnehmen.
Der Eintrag, in die /etc/rc.conf, sieht dann folgendermassen aus, wenn Du rules geschrieben hast und die obige Zeile dann auch löschst:
firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
firewall_logging="YES"
Zweite Zeile entsprechend ändern, je nachdem wo Deine Datei liegt. Ich habe die firewall rules und natd.conf beide im gleichen Verzeichnis liegen.
Hier der Inhalt von /etc/firewall/fwrules:
ipfw add 10 divert natd all from any to any via tun0
# Blockiert den port 6000 (X)
ipfw add deny log tcp from any to any 6000 in recv tun0
ipfw add allow ip from any to any via lo0
ipfw add allow ip from any to any via xl0
# Erlaubt alle Verbindungen welche von hier initiiert wurden
ipfw add allow tcp from any to any out xmit tun0 setup
# Wenn die Verbindung einmal hergestellt wurde, erlaube dieser offen zu stehen
ipfw add allow tcp from any to any via tun0 established
ipfw add allow log tcp from any to any 80 setup
ipfw add allow log tcp from any to any 22 setup
ipfw add allow log tcp from any to any 25 setup
ipfw add allow log tcp from any to any 21 setup
ipfw add allow log tcp from any to any 1022 setup
# This sends a RESET to all ident packets.
ipfw add reset log tcp from any to any 113 in recv tun0
# Erlaubt ausgehende DNS queries NUR auf die beiden angegebenen Server
ipfw add allow udp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow udp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow udp from any to 217.5.99.105 53 out xmit tun0
ipfw add allow tcp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow tcp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow tcp from any to 217.5.99.105 53 out xmit tun0
# Erlaubt die Antwort der DNS Nachfragen
ipfw add allow udp from 195.20.224.234 53 to any in recv tun0
ipfw add allow udp from 194.25.2.129 53 to any in recv tun0
ipfw add allow udp from 217.5.99.105 53 to any in recv tun0
ipfw add allow tcp from 217.5.99.105 53 to any in recv tun0
ipfw add allow tcp from 194.25.2.129 53 to any in recv tun0
ipfw add allow tcp from 217.5.99.105 53 to any in recv tun0
# Loggt ICMP Anfragen (echo und dest. unreachable) == script kiddies
ipfw add allow log icmp from any to any in recv tun0 icmptype 3
ipfw add allow log icmp from any to any in recv tun0 icmptype 8
# ICMP erlauben
ipfw add allow icmp from any to any
# Blockiert alle Anfragen auf ports unter 1000
ipfw add deny log tcp from any to any 0-1000 in recv tun0 setup
# 2049 == NFS
ipfw add deny log tcp from any to any 2049 in recv tun0 setup
# Loggt netbux connections
ipfw add deny log tcp from any to any 12345 in recv tun0
ipfw add deny log tcp from any to any 20034 in recv tun0
Wenn Du diese rules übernimmst, dann tut das für Dich erstmal.
Ok, nochmals schnell wie man NATD zum rennen bekommt:
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic -f /etc/firewall/natd.conf"
Letzte Zeile entsprechend ändern, je nachdem wo Deine natd.conf liegt.
Diese hat dann beispielsweise den folgenden Inhalt:
redirect_port tcp 192.168.0.203:80 80
redirect_port udp 192.168.0.203:80 80
redirect_port tcp 192.168.0.202:22 22
redirect_port udp 192.168.0.202:22 22
redirect_port tcp 192.168.0.203:21 21
redirect_port udp 192.168.0.203:21 21
Hier siehst Du das Anfragen an Port 80 (http) auf die IP 192.168.0.203 auf Port 80 weitergeleitet werden (eine IP einer Jail auf dem selben Rechner bei mir).
Ebenso verhält es sicht mit den anderen Einträgen.
Das wars dann auch schon.
ppp_nat funktioniert ähnlich, wobei Du in der /etc/rc.conf mittels "-nat" schon die zu maskierende Adresse und port mitgeben kannst. Alles weitere dazu siehe "man ppp". Da ich es nicht nutze müsste ich auch erst mal einen Blick reinwerfen, aber das kannst Du selbst machen, wenn es Probleme damit gibt kann ich dann ebenfalls mal reinsehen.
Ok, nun habe ich doch mehr geschrieben als ich wollte, hoffe das hilft Dir weiter.