1
senghoo 2021-05-27 11:21:19 +08:00
1. ipfw 默认是禁止所有访问,除非配置了 net.inet.ip.fw.default_to_accept="1"
2. keep-state 选项自动建立一个反向的规则,也就是从客户端发来的包到服务器的请求可以被第一个规则匹配而放行,服务器返回回去的包被 keep-state 选项建立的规则匹配而放行。 3. 第二个规则看起来是允许服务器访问外部服务器的 80 端口,比如其他的 API 服务器等。和用户访问你无关。 |
3
dujiangbo OP @senghoo 再麻烦问一下,in 和 out 是必须的吗?如果只开放某 IP 访问服务器的规则,在有 keep-state 的参数下,配置了 in 还需要增加 out 的规则吗?谢谢。
|
4
dujiangbo OP @senghoo 第二个规则我写错了,应该是 me 80 to xxx,查了一下:若不指定 in 与 out,ipfw 同时作用于出入报文。
如果添加规则:allow tcp from xxx.xxx.xxx.xxx to me 80 setup keep-state,是不是等同于两个规则: 1.allow tcp from xxx.xxx.xxx.xxx to me 80 in setup keep-state 2.allow tcp from me 80 to xxx.xxx.xxx.xxx out setup keep-state 在有了 keep-state 参数的前提下,下面两条规则是不是等价的? 1.allow tcp from xxx.xxx.xxx.xxx to me 80 in setup keep-state 2. allow tcp from xxx.xxx.xxx.xxx to me 80 setup keep-state 感谢。 |
5
senghoo 2021-05-27 23:41:29 +08:00
@dujiangbo bsd 的机制我也不是太熟悉,但是一般有 keep-state 或者 linux 下叫 ip_conntrack 这类东西后不需要再为回包建立规则。in 和 out 表示数据包的方向,有些情况下省略会是意想不到的结果,而且根据最小权限原则,还是留着。
keep-state 和你手工指定的方法也是不一样的。keep-state 只会放行已经见过的五元组(来源 /目的 IP 和端口以及协议),所以理论上 keep-state 比直接手工指定更安全。 |