请问这样配置的防火墙为什么可以 web 访问?
- 0次
- 2021-06-11 22:08:24
- idczone
服务器用的 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 协议时如果没有指定端口是不是默认放开所有国外服务器端口?
1. ipfw 默认是禁止所有访问,除非配置了 net.inet.ip.fw.default_to_accept="1"
2. keep-state 选项自动建立一个反向的规则,也就是从客户端发来的包到服务器的请求可以被第一个规则匹配而放行,服务器返回回去的包被 keep-state 选项建立的规则匹配而放行。
3. 第二个规则看起来是允许服务器访问外部服务器的 80 端口,比如其他的 API 服务器等。和用户访问你无关。
谢谢,这次明白了。
再麻烦问一下,in 和 out 是必须的吗?如果只开放某 IP 访问服务器的规则,在有 keep-state 的参数下,配置了 in 还需要增加 out 的规则吗?谢谢。
第二个规则我写错了,应该是 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
感谢。
bsd 的机制我也不是太熟悉,但是一般有 keep-state 或者 linux 下叫 ip_conntrack 这类东西后不需要再为回包建立规则。in 和 out 表示数据包的方向,有些情况下省略会是意想不到的结果,而且根据最小权限原则,还是留着。
keep-state 和你手工指定的方法也是不一样的。keep-state 只会放行已经见过的五元组(来源 /目的 IP 和端口以及协议),所以理论上 keep-state 比直接手工指定更安全。
如果配置规则的机器只是一个服务器,不是路由器之类的。上面你说的那些,效果上看来一样的。但是可能指定 in/out 再匹配时会不会减少一些负担得看 bsd 的相关实现了。这些就得靠其他大神解答了。
谢谢您的回复,一下子就明白了,感谢!