搭建简易路由器与防火墙
最后更新于
# printf 'inet autoconf\n' > /etc/hostname.re0# cat > /etc/hostname.re0 <<'EOF'
inet 203.0.113.10 255.255.255.0 203.0.113.255
EOF# cat > /etc/hostname.re1 <<'EOF'
inet 10.0.0.1 255.255.255.0 10.0.0.255
EOF# sh /etc/netstart$ ifconfig re0
$ ifconfig re1subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.1;
option domain-name-servers 10.0.0.1;
range 10.0.0.51 10.0.0.250;
}host server1 {
fixed-address 10.0.0.30;
hardware ethernet 00:00:00:00:00:00;
}# rcctl enable dhcpd
# rcctl set dhcpd flags re1
# rcctl start dhcpd
# rcctl check dhcpd# /etc/pf.conf - 面向 LAN 的最小化路由器/防火墙(含 NAT)
# 接口与网络
lan_if = "re1"
lan_net = "10.0.0.0/24"
# 不可路由与保留地址空间
table <martians> { \
0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, \
172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 198.18.0.0/15, \
198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/3, 192.168.0.0/16 \
}
# 默认行为
set block-policy drop
set loginterface egress
set skip on lo
# 规范化流量
match in all scrub (no-df random-id max-mss 1440)
# 为 LAN 到当前出口地址做 NAT
match out on egress inet from $lan_net to any nat-to (egress:0)
# 防欺骗
antispoof quick for { egress, $lan_if }
block in quick on egress from <martians> to any
block return out quick on egress from any to <martians>
# 默认拒绝
block all
# 允许已建立与相关联的流量
pass out on egress inet keep state
# 允许 LAN 访问任意地址
pass in on $lan_if inet from $lan_net to any keep state# pfctl -nf /etc/pf.conf
# pfctl -f /etc/pf.conf
# rcctl enable pf
# pfctl -e
# pfctl -sr
# pfctl -snserver:
interface: 10.0.0.1
interface: 127.0.0.1
interface: ::1
access-control: 10.0.0.0/24 allow
access-control: 127.0.0.0/8 allow
access-control: ::1 allow
access-control: 0.0.0.0/0 refuse
access-control: ::0/0 refuse
hide-identity: yes
hide-version: yes
forward-zone:
name: "."
forward-addr: 64.6.64.6 # Verisign
forward-addr: 94.75.228.29 # CCC
forward-first: yes# rcctl enable unbound
# rcctl start unbound
# rcctl check unbound$ ping -n 8.8.8.8
$ ftp -o - https://example.com/ >/dev/null# pfctl -ss
# pfctl -s state