规则:
ipfw add 00010 allow ip from any to any via lo0
ipfw add 00015 check-state
ipfw add 00112 allow tcp from any to any dst-port 53 out setup keep-state
ipfw add 00113 allow udp from any to any dst-port 53 out keep-state
进出的数据包只需要在数据流向对应网卡接口的in方向打开端口即可,如下:
# ipfw show
00010 0 0 allow ip from any to any via lo0
00015 0 0 check-state
00117 288 24392 allow udp from any to any dst-port 53 in via bge0 keep-state // 允放DNS解析服务-出站
00440 6444 561444 allow tcp from any to any dst-port 22 in via re0 setup limit src-addr 2 // 允许入站SSH
00441 304 17952 allow tcp from any to any dst-port 22 in via bge0 setup limit src-addr 2 // 允许出站SSH
00442 3177 386802 allow tcp from any to me dst-port 22 in via rl0 setup limit src-addr 5 // 允许本机入站的SSH
00443 22 1298 allow tcp from me to any dst-port 22 out via rl0 setup keep-state
00546 2720 170112 allow icmp from any to any in via re0 keep-state // 允许ICMP
00547 20 1680 allow icmp from any to any in via bge0 keep-state
00600 32 1636 allow tcp from any to any dst-port 3306 in via re0 setup limit src-addr 200 // 允许入站mysql请求
00601 32 2020 allow tcp from any to any dst-port 3306 out via re0 setup keep-state
65535 484726 56152407 deny ip from any to any // 拒绝所有
IPFW手册使用recv,xmit确实能控制的更精确,目前正在测试。
recv,xmit的相关资料很少,我只找到下面的一点,不好理解,请问你测试的怎么样了,
via 会使接口永远都会被检查,如果用另一个关键词 recv ,则表示只检查接收的封包,而 xmit 则是送出的封包。这二个选项有时也很有用,例如要限制进出的接口不同时: ipfw add 100 deny ip from any to any out recv vr0 xmit ed1 recv 接口可以检查流入或流出的封包,而 xmit 接口只能检查流出的封包。所以在上面这里一定要用 out 而不能用 in,只要有使用 xmit 就一定要使用 out。另外,如果 via 和 recv 或 xmit 一起使用是没有效的。