请问这样配置的防火墙为什么可以 web 访问?

2021-05-27 11:08:11 +08:00
 dujiangbo
服务器用的 IPFW,规则如下:
Ipfw -q add allow tcp from xxx.xxx.xxx.xxx to me 80 in setup keep-state
Ipfw -q add allow tcp from me to xxx.xxx.xxx.xxx 80 out setup keep-state
第一个规则是允许客户端访问服务器的 80 端口,这个没有问题,第二个规则应该是允许服务器发送数据到客户端的 80 端口,这个规则我觉得有问题,客户端访问服务器时是随机接口,不一定是 80,但这样配置后客户端可以使用 web 服务,请问为什么?谢谢。
另外配置 tcp 协议时如果没有指定端口是不是默认放开所有端口?
2020 次点击
所在节点    Linux
7 条回复
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 服务器等。和用户访问你无关。
dujiangbo
2021-05-27 11:38:03 +08:00
@senghoo 谢谢,这次明白了。
dujiangbo
2021-05-27 11:41:58 +08:00
@senghoo 再麻烦问一下,in 和 out 是必须的吗?如果只开放某 IP 访问服务器的规则,在有 keep-state 的参数下,配置了 in 还需要增加 out 的规则吗?谢谢。
dujiangbo
2021-05-27 12:01:18 +08:00
@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
感谢。
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 比直接手工指定更安全。
senghoo
2021-05-27 23:47:32 +08:00
@senghoo 如果配置规则的机器只是一个服务器,不是路由器之类的。上面你说的那些,效果上看来一样的。但是可能指定 in/out 再匹配时会不会减少一些负担得看 bsd 的相关实现了。这些就得靠其他大神解答了。
dujiangbo
2021-05-28 10:17:51 +08:00
@senghoo 谢谢您的回复,一下子就明白了,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX