V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
dujiangbo
V2EX  ›  Linux

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

  •  
  •   dujiangbo · 2021-05-27 11:08:11 +08:00 via iPhone · 2009 次点击
    这是一个创建于 1294 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器用的 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 协议时如果没有指定端口是不是默认放开所有端口?
    7 条回复    2021-05-28 10:17:51 +08:00
    senghoo
        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 服务器等。和用户访问你无关。
    dujiangbo
        2
    dujiangbo  
    OP
       2021-05-27 11:38:03 +08:00 via iPhone
    @senghoo 谢谢,这次明白了。
    dujiangbo
        3
    dujiangbo  
    OP
       2021-05-27 11:41:58 +08:00 via iPhone
    @senghoo 再麻烦问一下,in 和 out 是必须的吗?如果只开放某 IP 访问服务器的规则,在有 keep-state 的参数下,配置了 in 还需要增加 out 的规则吗?谢谢。
    dujiangbo
        4
    dujiangbo  
    OP
       2021-05-27 12:01:18 +08:00 via iPhone
    @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
        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 比直接手工指定更安全。
    senghoo
        6
    senghoo  
       2021-05-27 23:47:32 +08:00
    @senghoo 如果配置规则的机器只是一个服务器,不是路由器之类的。上面你说的那些,效果上看来一样的。但是可能指定 in/out 再匹配时会不会减少一些负担得看 bsd 的相关实现了。这些就得靠其他大神解答了。
    dujiangbo
        7
    dujiangbo  
    OP
       2021-05-28 10:17:51 +08:00 via iPhone
    @senghoo 谢谢您的回复,一下子就明白了,感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 22:01 · PVG 06:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.