[BSD] pf+FreeBSD custom route
Beregszászi Attila
melon at m42.hu
2005. Dec. 6., K, 11:08:22 CET
Sziasztok,
van egy problémám, amin nem tudok túljutni. Adott egy FreeBSD router 3 interfésszel:
- em0 - isp1 (default route), gyors kapcsolat, de csak belső cím, a forgalom tőlünk függetlenül van tovább natolva
- em1 - isp2, külső ip cím, ezen keresztül üzemel, dns, mail és web
- em2 - lan sok alias-szal, számukra natol a router az em0-n keresztül.
A default route az em0 felé megy, az em1-en üzemelő szolgáltatásokat reply-to alkalmazásával állítottam be, azaz pl. a kintről (em1) jövő dns kérések válaszai ugyanarra mennek, és nem a default route-on keresztül.
a problémám az, hogy a router egyben mailszerver is, és az önmagáról kiinduló smtp forgalmat is szeretném az em1-en és annak gateway-én keresztül küldeni. Ezt a route-to alkalmazásával próbáltam, de az igazából csak befelé jövő forgalomnál működne. A pf.conf-ban található szabály nem megy (# e-mail forgalom) Kernel routing tábla nem jöhet szóba, mert tetszőleges cím 25-ös portjaira menő forgalmat kellene arra irányítani.
a pf.conf lényegi részei:
############################################################
IFWAN="em0"
IFSUL="em1"
IFLAN="em2"
LAN="172.22.2.0/23"
WANIP="192.168.100.2" # em0
WANGW="192.168.100.1" # em0 gw
SULIP="195.x.x.233" # em1
SULGW="195.x.x.238" # em1 gw
TCP_SERVICES_EXT = "{https,smtp,smtps,pop3,pop3s,imap,imaps}"
TCP_SERVICES_LAN = "{http,https,ntp}"
table <servers> file "/etc/pft.servers"
set block-policy drop
scrub in all
# NAT
#
nat on $IFWAN from <servers> to any -> $IFWAN
nat on $IFWAN from $LAN to any port {21 80 443} -> $IFWAN
# ez akkor kell, ha megszakad az em0 fele a kapcsolat
# olyankor jon a 'route change default 195.x.x.238'
nat on $IFSUL from $LAN to !$LAN -> $IFSUL
# RDR
#
rdr on $IFLAN proto tcp from $LAN to !$LAN port 80 -> \
127.0.0.1 port 3128
block log
pass quick on lo0 all
### WAN
# em0 ping
pass in quick on $IFWAN inet proto icmp from any to ($IFWAN) \
icmp-type 8 keep state
antispoof for $IFWAN
# e-mail forgalom
pass out quick on $IFWAN route-to ($IFSUL $SULGW) proto tcp \
from any to any port 25 keep state
pass out on $IFWAN from any to any keep state
### IFSUL
antispoof for $IFSUL
pass out on $IFSUL all keep state
# icmp echo
pass in quick on $IFSUL reply-to ($IFSUL $SULGW) proto icmp \
from any to ($IFSUL) icmp-type 8 keep state
# ssh
pass in quick on $IFSUL reply-to ($IFSUL $SULGW) proto tcp \
from $TRUSTED_EXT to ($IFSUL) port 22 flags S/SA modulate state
# dns
pass in quick on $IFSUL reply-to ($IFSUL $SULGW) proto { tcp,udp } \
from any to ($IFSUL) port domain keep state
# egyeb tcp
pass in quick on $IFSUL reply-to ($IFSUL $SULGW) proto tcp \
from any to ($IFSUL) port $TCP_SERVICES_EXT modulate state
### LAN
pass on $IFLAN all
############################################################
Köszi,
Attila
További információk a(z) BSD levelezőlistáról