V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
raincious
V2EX  ›  服务器

为啥这个 iptables 的配置无法工作?

  •  
  •   raincious · 2015-06-18 11:57:23 +08:00 · 2792 次点击
    这是一个创建于 3450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    故事是我在配置一个OCServ服务器,然后为了安全,当然要走个HTTP Proxy,否则分享出去被人用来下BT就会有麻烦了。

    然后,HTTP Proxy配置是正常的,通过

    wget www.google.com -e use_proxy=yes -e http_proxy=http://127.0.0.1:3128
    

    访问没问题

    VPN服务器也是正常的,可以正常连接和访问。

    但是一旦加上下面这句,80端口就超时无法打开了,同时Nginx(HTTP Proxy)日志里没有提到有访问记录(可能根本没链接到嘛),其他端口倒是仍然正常(当然

    iptables -t nat -A PREROUTING -s 192.168.251.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
    

    然后我改成

    iptables -t nat -A PREROUTING -i vpns+ -p tcp --dport 80 -j REDIRECT --to-port 3128
    

    也不行。

    整个配置在这里:

    #!/bin/bash
    
    # iptables
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp --dport (SSH端口,不给你看) -j ACCEPT
    
    # ocserv
    iptables -t filter -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    iptables -t filter -A INPUT -p udp -m udp --dport 443 -j ACCEPT
    
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -d 192.168.251.0/24 -j DROP
    iptables -t filter -A FORWARD -d 192.168.251.0/24 -j ACCEPT
    
    iptables -t nat -A PREROUTING -s 192.168.251.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128 (就是这神秘的一句
    
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 3128 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p udp --dport 53 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 53 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 21 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 80 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 443 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 993 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 465 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp -j REJECT --reject-with tcp-reset
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -j DROP
    
    iptables -t nat -A POSTROUTING -s 192.168.251.0/24 -j MASQUERADE
    
    /opt/ocserv/sbin/ocserv -c /opt/ocserv/etc/config
    

    求解,感谢!
    (俺好菜啊,怎么办)

    第 1 条附言  ·  2015-06-18 14:27:06 +08:00
    这是新的,能用的iptables配置。

    #!/bin/bash

    # DEFAULT
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp --dport 28194 -j ACCEPT

    # OCserv
    iptables -t filter -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    iptables -t filter -A INPUT -p udp -m udp --dport 443 -j ACCEPT

    iptables -t filter -A FORWARD -s 192.168.251.0/24 -d 192.168.251.0/24 -j DROP
    iptables -t filter -A FORWARD -d 192.168.251.0/24 -j ACCEPT

    iptables -t nat -A PREROUTING -s 192.168.251.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
    iptables -t filter -A INPUT -s 192.168.251.0/24 -p tcp --dport 3128 -j ACCEPT

    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p udp --dport 53 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 53 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 21 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 443 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 993 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp --dport 465 -j ACCEPT
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -p tcp -j REJECT --reject-with tcp-reset
    iptables -t filter -A FORWARD -s 192.168.251.0/24 -j DROP

    iptables -t nat -A POSTROUTING -s 192.168.251.0/24 -j MASQUERADE

    /opt/ocserv/sbin/ocserv -c /opt/ocserv/etc/config
    6 条回复    2015-06-18 20:43:05 +08:00
    ryd994
        1
    ryd994  
       2015-06-18 13:31:28 +08:00 via Android   ❤️ 1
    squid 配置里加了intercept没?http://www.squid-cache.org/Doc/config/http_port/
    ryd994
        2
    ryd994  
       2015-06-18 13:36:58 +08:00 via Android   ❤️ 1
    3128是谁在listen?
    是bind0.0.0.0还是只bind本地?
    bind全部interface试试,如果行的话再做讨论。

    另外iptables filter表有打开3128端口么?redirect之后就不是允许80而是允许3128了。filter表在nat表之后
    elyamen
        3
    elyamen  
       2015-06-18 13:37:51 +08:00   ❤️ 1
    破头像害我点了两次
    iCodex
        4
    iCodex  
       2015-06-18 14:18:07 +08:00   ❤️ 1
    iptables -t nat -A => iptables -t nat -I
    raincious
        5
    raincious  
    OP
       2015-06-18 14:26:00 +08:00
    @ryd994 好吧,我做了测试,貌似如果直接

    iptables -A INPUT -s 192.168.251.0/24 -p tcp --dport 3128 -j ACCEPT,

    然后让Nginx听全部端口的话就可以连接了

    再然后我看了一眼Nginx的日志:

    192.168.251.46 - - [18/Jun/2015:02:16:35 -0400] "GET /m/gne/suggest/v2?q=http%3A%2F%2Fportquiz.net%2Fddd.avi&hl=zh-CN&app=iss&appv=141338691&platform=android&pff=1&feeds=qs,ns HTTP/1.1" 404 151 "-" "Android/1.0 (umts_everest I.7.1-45)"

    192.168.251.46....

    (唔脸,原来真相是这样……
    ryd994
        6
    ryd994  
       2015-06-18 20:43:05 +08:00 via Android   ❤️ 1
    @raincious 是这样的
    某些系统内核禁止其他端口转发到lo,而且你也没有redirect 到127.0.0.1

    源是外面的IP并没有错
    DNAT工作方法就是这样:直接改包头

    其实如果你如果是劫持,而且网站比较多的话还是建议squid比较方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:40 · PVG 18:40 · LAX 02:40 · JFK 05:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.