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

请教:如何设置 Linux 的 iptables 只允许 http(s)的 get 请求

  •  
  •   herozzm · 2019-10-21 08:49:43 +08:00 · 5790 次点击
    这是一个创建于 1858 天前的主题,其中的信息可能已经有所发展或是发生改变。
    27 条回复    2019-10-25 17:48:01 +08:00
    0ZXYDDu796nVCFxq
        1
    0ZXYDDu796nVCFxq  
       2019-10-21 08:52:24 +08:00 via Android
    实现不了

    如果是 Nginx 看下 limit_except
    predator
        2
    predator  
       2019-10-21 08:52:50 +08:00
    iptbles 负责过滤 80/443
    web server 负责过滤非 get 请求
    retanoj
        3
    retanoj  
       2019-10-21 08:54:33 +08:00 via iPhone
    我觉得严格意义上做不到,个人感觉原生 iptables 不认识应用层协议。

    求大牛来拍醒
    paradislover
        4
    paradislover  
       2019-10-21 09:01:09 +08:00 via Android
    NDPI
    clino
        5
    clino  
       2019-10-21 09:07:10 +08:00 via Android
    有啥意义呢?

    或者用 iptables 设置只能通过 proxy 访问,在 proxy 里就可以设只能 get 了吧
    herozzm
        6
    herozzm  
    OP
       2019-10-21 09:10:12 +08:00
    @clino 有个程序模式全部开放访问的,get 是读取模式,想只给外部只读权限
    TimePPT
        7
    TimePPT  
       2019-10-21 09:28:40 +08:00 via iPhone
    @herozzm 你这在应用层做鉴权更合适。
    gamexg
        8
    gamexg  
       2019-10-21 09:38:19 +08:00
    http 不在乎杀可以做到,https 加密就别指望了。
    这个需求最好前面加个反代,反代上面做拦截解决问题。
    clino
        9
    clino  
       2019-10-21 09:40:48 +08:00
    同意楼上的,感觉应用层做比较合适
    比如如果知道如何判断外部,可以在 nginx 里给请求加 header,然后在应用这里判断 header 就行了
    lc7029
        10
    lc7029  
       2019-10-21 09:45:06 +08:00
    不能实现
    iptables 是包过滤防火墙,工作在四层,只能进行端口层的过滤。
    楼主说的只允许 http-get 请求属于应用层,需要进行七层过滤。
    Vegetable
        11
    Vegetable  
       2019-10-21 09:45:25 +08:00
    iptables 应该是在底层工作的,https 还可以通过端口识别,报文内容就读不到了吧,况且还是密文
    Drinker
        12
    Drinker  
       2019-10-21 09:56:56 +08:00
    get 和 post 应该再应用层设置。iptables 应该不行。
    kungfuchicken
        13
    kungfuchicken  
       2019-10-21 10:02:36 +08:00
    nginx 上可以做
    caskeep
        14
    caskeep  
       2019-10-21 10:04:44 +08:00 via iPhone
    这个应该不行吧? l4 和 l7 的差距吧
    fangjinmin
        15
    fangjinmin  
       2019-10-21 10:06:47 +08:00
    办不到。协议层不一样,iptables 能设置的是第 3 层的网络层。
    HTTP(S)协议层是应用层(在第 4 层以上),你应该在自己的程序中,或者是 Web 服务器上设置。
    newtype0092
        16
    newtype0092  
       2019-10-21 10:09:03 +08:00
    你用网络层的墙来拦应用层的协议?
    reus
        17
    reus  
       2019-10-21 10:11:16 +08:00
    做不到
    izoabr
        18
    izoabr  
       2019-10-21 10:12:05 +08:00
    可以的,我记得 iptables 有 7 层协议的模块插件的
    lihongjie0209
        19
    lihongjie0209  
       2019-10-21 10:12:44 +08:00
    IP/TCP 层的应用拦截 HTTP 层的请求?
    richzhu
        20
    richzhu  
       2019-10-21 10:19:29 +08:00
    你需要的是 7 层防火墙,不是 3 层
    westoy
        21
    westoy  
       2019-10-21 10:25:17 +08:00
    @izoabr l7filter 做不到的
    xduanx
        22
    xduanx  
       2019-10-21 11:27:28 +08:00 via iPhone
    把 nginx 配成反向代理,nginx get_method 指令可以获取请求方法,然后在 location 里写具体指令,比如拒绝,重定向,返回 404 之类的
    coolloves
        23
    coolloves  
       2019-10-21 12:47:47 +08:00
    nginx 只开 443 只允许 get,
    izoabr
        24
    izoabr  
       2019-10-21 12:54:43 +08:00
    或者干脆直接上 mod_security 得了,这种开源的 WAF 应该还有好几款,这样灵活性更好一些。
    msg7086
        25
    msg7086  
       2019-10-21 14:32:28 +08:00
    而且你真的以为只允许 get 请求就是只读了?
    saltedFish666
        26
    saltedFish666  
       2019-10-21 15:16:13 +08:00
    iptables 处理不了协议把,一般不是用来设置端口吗
    reus
        27
    reus  
       2019-10-25 17:48:01 +08:00
    https 是端对端加密,中间过滤是不知道内容的

    即使是 http,要做过滤,也需要解包再打包,还不如直接放在负载均衡、反向代理或者应用服务器上做
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:08 · PVG 03:08 · LAX 11:08 · JFK 14:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.