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

请教一个关于 iptables 的问题

  •  
  •   xiaoz
    helloxz 2017-01-05 16:32:16 +08:00 3682 次点击
    这是一个创建于 3279 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假如 ss 端口监听为 9000 , iptables 放行 9000 后, telnet 测试 9000 正常,但是 ss 连接超时,那么 service iptables stop 关闭后, ss 连接正常,应该就是 iptables 规则导致,但是又无法找到具体原因。完整规则如下:

    *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :syn-flood - [0:0] -A INPUT -p udp -m state --state NEW -m udp --dport 9000:9999 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 9000:9999 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 20000:50000 -j ACCEPT -A INPUT -p udp -m state --state NEW -m udp --dport 20000:50000 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood -A INPUT -j REJECT --reject-with icmp-host-prohibited -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN -A syn-flood -j REJECT --reject-with icmp-port-unreachable COMMIT 

    再次说明一下,端口 telnet 是正常的,但是 ss 无法使用,关闭 iptables 后正常。

    29 条回复    2017-01-09 17:03:46 +08:00
    Devin
        1
    Devin  
       2017-01-05 19:35:13 +08:00 via iPhone   1
    开启 iptables 日志记录(我最近的主题刚好有),看日志排查
    b1eberg0n
        2
    b1eberg0n  
       2017-01-05 23:18:50 +08:00 via iPhone   1
    INPUT DROP 改为 ACCEPT?
    xiaoz
        3
    xiaoz  
    OP
       2017-01-05 23:21:24 +08:00 via iPhone
    @b1eberg0n 这样会不会很危险?
    INPUT DROP 是先拒绝所有,再放行指定,如果改成 ACCEPT 就是先允许所有可。
    b1eberg0n
        4
    b1eberg0n  
       2017-01-05 23:26:09 +08:00 via iPhone
    弄这么严格 是生产服么?
    拒绝所有的话可能还要放行 input --sport 80 /443
    iCyMind
        5
    iCyMind  
       2017-01-05 23:44:13 +08:00 via Adroid   1
    为什么写得那么嗦,试试以下:

    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    #ssh port: 11235
    iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
    iptables -A INPUT -p udp --dport 9000 -j ACCEPT
    iCyMind
        6
    iCyMind  
       2017-01-05 23:45:43 +08:00 via Android   1
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    忘了 ssh....希望楼主还没看到上一条吧
    kuretru
        7
    kuretru  
       2017-01-05 23:48:13 +08:00 via iPhone   1
    把-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 放到 ss 前面
    lcdtyph
        8
    lcdtyph  
       2017-01-05 23:53:04 +08:00
    指定协议不是-p 吗= =||
    -A INPUT -p udp -m state --state NEW -p udp --dport 9000:9999 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -p tcp --dport 9000:9999 -j ACCEPT
    这样?
    iCyMind
        9
    iCyMind  
       2017-01-06 00:03:11 +08:00 via Android
    你的规则问题可能在于,发往服务器 9000 端口的 udp 数据被丢弃了。
    因为 udp 是无状态的,跟 udp 9000 端口有关的两条规则它都匹配不上:
    -A INPUT -p udp -m state --state NEW -m udp --dport 9000:9999 -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    raysonx
        10
    raysonx  
       2017-01-06 00:20:55 +08:00 via iPad
    @iCyMind 目测楼主执行 iptables -F 后,已被挡在 ssh 外面
    iCyMind
        11
    iCyMind  
       2017-01-06 00:41:23 +08:00
    @raysonx good jop? 2333
    shiji
        12
    shiji  
       2017-01-06 00:57:28 +08:00 via Android
    @raysonx 哈哈,我也想说这个。都是被坑过的人啊
    des
        13
    des  
       2017-01-06 06:05:21 +08:00 via Android   1
    @shiji 话说就没人先写个比如半个小时关闭防火墙的定时任务?
    同被坑过
    ryd994
        14
    ryd994  
       2017-01-06 07:06:19 +08:00 via Android
    @des 怕什么嘛,大不了拔线重启
    @iCyMind
    @raysonx
    xiaoz
        15
    xiaoz  
    OP
       2017-01-06 09:09:46 +08:00
    @des 这是一个好办法
    xiaoz
        16
    xiaoz  
    OP
       2017-01-06 09:10:19 +08:00
    @raysonx 昨天改错了规则,然后就被挡在外面了,最后通过控制台进入把 iptables 停了才进去。
    raysonx
        17
    raysonx  
       2017-01-06 10:42:46 +08:00
    @ryd994 当年维护学校机房的服务器,没有远程控制卡,被挡在外面只能找领导批条子进机房手动重启。。。。
    jimzhong
        18
    jimzhong  
       2017-01-06 16:58:58 +08:00
    既然 telnet 正常说明外面是可以访问 TCP9000 的,把 DROP 的日志打出来看看把。
    ryd994
        19
    ryd994  
       2017-01-07 02:39:28 +08:00 via Android
    @iCyMind 你说 UDP 无状态所以不匹配是不对的
    iptables 里的 new 和 established 不是连接意义上的,而是之前是否见过相关包。没见过就是 new 。是以四元组判断。所以才有使用 net-speeder 后 iptables 无效的问题。
    iCyMind
        20
    iCyMind  
       2017-01-07 09:26:17 +08:00
    @ryd994 我去看了下, 真的如你所说, 谢谢纠正.
    或许楼主的规则错在 -m udp --dport 9000:9999 和 -m tcp --dport 9000:9999
    要匹配某协议的端口号, 一般都是这么写吧:
    -p udp --dport 9000:9999

    文档里没见有 -m tcp 这种写法
    http://ipset.netfilter.org/iptables-extensions.man.html#lbCL
    julyclyde
        21
    julyclyde  
       2017-01-07 11:18:53 +08:00
    @iCyMind -m 肯定没错的。只是被-p 给隐含了而已
    -m tcp 是 match tcp
    xiaoz
        22
    xiaoz  
    OP
       2017-01-07 11:30:36 +08:00 via iPhone
    @iCyMind 但是我这样写 telnet 端口的确是通的
    iCyMind
        23
    iCyMind  
       2017-01-07 11:42:29 +08:00
    @xiaoz 如果找到问题所在, 请 @ 我.
    我也想知道原因在哪

    @julyclyde 嗯, 你是对的. 刚试了下, 就算是执行
    iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
    iptables -S 出来的结果都是
    -A INPUT -p tcp -m tcp --dport 9000 -j ACCEPT
    xiaoz
        24
    xiaoz  
    OP
       2017-01-09 16:46:31 +08:00
    @iCyMind 原来是规则顺序问题导致,好坑呀,按照 7 楼的办法修改了下规则顺序,然后启动 iptables ,居然可以了。
    xiaoz
        25
    xiaoz  
    OP
       2017-01-09 16:46:57 +08:00
    @kuretru 非常感谢,按照您说的,修改了下顺序居然可以了。是什么原因呢?
    iCyMind
        26
    iCyMind  
       2017-01-09 16:58:02 +08:00
    @xiaoz 顺序应该不是问题所在, 我把
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    改到了最后面, 一样能连上.

    你是不是用了 docker?
    xiaoz
        27
    xiaoz  
    OP
       2017-01-09 17:01:31 +08:00
    @iCyMind 不对,刚刚可能幻觉了,试了下还是不行,应该不是顺序导致。我是 docker ,就是 centos 部署的 ss
    xiaoz
        28
    xiaoz  
    OP
       2017-01-09 17:01:45 +08:00
    @xiaoz 不是 docker
    iCyMind
        29
    iCyMind  
       2017-01-09 17:03:46 +08:00
    @xiaoz 这些规则不行?
    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
    iptables -A INPUT -p udp --dport 9000 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5403 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 07:54 PVG 15:54 LAX 23:54 JFK 02:54
    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