请问这样配置的防火墙为什么可以 web 访问? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
dujiangbo
V2EX    Linux

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

  •  
  •   dujiangbo 2021-05-27 11:08:11 +08:00 via iPhone 2350 次点击
    这是一个创建于 1624 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器用的 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     Solana     975 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:59 PVG 02:59 LAX 10:59 JFK 13:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86