奇怪的 iptables - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生的内容
phttc
V2EX    程序员

奇怪的 iptables

  •  
  •   phttc 2016-04-03 10:37:22 +08:00 4315 次点击
    这是一个创建于 3483 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的是 centos6.5 ,, iptables 配置如下

    filter

    INPUT DROP [53:7426]

    FORWARD ACCEPT [0:0]

    OUTPUT ACCEPT [108:16569]

    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

    -A INPUT -p icmp -j ACCEPT

    -A INPUT -i lo -j ACCEPT

    COMMIT

    mysql 的 user 表中:

    mysql> select host,user from user;

    +-----------+-----------+

    | host | user |

    +-----------+-----------+

    | % | turing |

    | 127.0.0.1 | root |

    | localhost | root |

    +-----------+-----------+

    然而事实情况是,当我打开 iptables , mysql 就连接超时,关闭 iptables 就可以正常连接。。。很奇怪。

    14 条回复    2016-04-05 23:08:23 +08:00
    jasontse
        1
    jasontse  
       2016-04-03 10:56:04 +08:00 via iPad   1
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    j4fun
        2
    j4fun  
       2016-04-03 12:33:16 +08:00
    INPUT DROP [53:7426] 并不奇怪,你的 INPUT 默认是 drop
    phttc
        3
    phttc  
    OP
       2016-04-03 12:36:23 +08:00
    @j4fun 3306 的端口是开放的。。还要把 1 楼的那个给加进去才行。
    shiji
        4
    shiji  
       2016-04-03 12:52:00 +08:00
    个人觉得一楼的没用,你当前已经开放 3306 ,不管什么 state 都会畅通无阻。
    我觉得问题在你的
    INPUT DROP [53:7426] 这一行。还没等后面的开门呢,这句就直接把数据包扔了。

    所以改成这样应该就行了:
    filter

    INPUT ACCEPT [0:0]

    FORWARD ACCEPT [0:0]

    OUTPUT ACCEPT [108:16569]

    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

    -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

    -A INPUT -p icmp -j ACCEPT

    -A INPUT -i lo -j ACCEPT

    -A INPUT -j DROP

    COMMIT

    ======================
    另一个方法:
    把你所有的-A 改成-I
    -A 是 append ,规则往后插
    -I 是 Insert , 规则往前插,这样不管之前有什么规则,你这条优先执行
    shiji
        5
    shiji  
       2016-04-03 13:03:09 +08:00
    另外以后的那句插进去也有好处。
    主要体现在你 SSH 的时候更新 Iptables 不会不小心断开连接。
    比如你不小心屏蔽了 tcp22 ,刷新了 iptables 之后你的 SSH 依旧会保持连接因为是之前创建的连接,属于 ESTABLISHED ,放行。但是你想再新开一个 SSH 就不行了,因为新的这个 State 属于 NEW ,数据包被扔~
    Devin
        6
    Devin  
       2016-04-03 14:36:26 +08:00 via iPhone
    @shiji INPUT ACCEPT
    默认进入规则为放行,你确定?
    raysonx
        7
    raysonx  
       2016-04-03 14:40:08 +08:00
    我觉得楼主的规则没有问题,楼主执行一下`iptables -L -n`看看?
    有没有试过重启 iptables ?
    @Devin 个人也认为默认 DROP 不是个好习惯,什么时候手滑执行了`iptables -F`, SSH 连接直接跪。
    Lentin
        8
    Lentin  
       2016-04-03 14:50:41 +08:00
    DROP 放在最后
    phttc
        9
    phttc  
    OP
       2016-04-03 15:20:38 +08:00
    @shiji 22 和 3306 我是一起加进去的, 22 和 80 没问题的,我试过。唯独 3306 超时了。我根据 2 楼的加了那条以后就可以了。。。我猜想是 RELATED 这个状态,但是又无法说服自己。
    phttc
        10
    phttc  
    OP
       2016-04-03 15:38:26 +08:00
    @j4fun
    @raysonx
    @shiji 我终于找到原因了。。我之前用的是 sequel pro ,连接会超时,当我用命令行去连接的时候,竟然连上了。。。猜想是 sequel pro 会建立一个别的端口链接,就像 ftp 那样。当 Accept 了 RELATED 状态的时候, iptables 会放行。
    shiji
        11
    shiji  
       2016-04-03 21:45:31 +08:00
    @Devin 我搞错了。。。 前面那三行都是统计用的,不知道前面的冒号哪去了,不好意思
    @phttc 当我那没说 :)
    phycgp
        12
    phycgp  
       2016-04-05 11:03:07 +08:00 via iPhone
    @phttc 一个 MySQL 只有一个端口提供服务的, ftp 多端口是一个控制一个数据。所以 sequel pro 连 MySQL 应该不会有其他端口的。

    你这里应该还是别的问题。
    phttc
        13
    phttc  
    OP
       2016-04-05 11:44:03 +08:00
    @phycgp 是的。后来我在折腾另外一个问题的时候找到了原因。如果光是这样配置 iptables ,会导致 yum , wget 之类的都会超时,也就是说,当服务器自己发起一些行为的时候,也会被防火墙给干了。解决的方式同样是加入-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 。来源于 http://www.server110.com/linux/201309/1858.html 不过他只说了解决方法,却没说原因
    hzqim
        14
    hzqim  
       2016-04-05 23:08:23 +08:00
    @phttc 这位仁兄有解析 http://dallascao.com/cn/iptables-tutorial-for-newbies/
    为毛要允许状态 ESTABLISHED 和 RELATED 的入站数据呢?因为你的服务器同时也是台电脑,还要从别的服务器下载东西。下载时,你的服务器先向别的服务器发出连接请求(new),别的服务器允许你连接,连接建立(ESTABLISHED)之后,就需要接受别的服务器发来的数据,对于你的服务器来讲属于 INPUT 。也就是说,如果没有 iptables -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT 这句, wget curl 啥的就都不工作了。

    数据是双向的,服务器的另一个身份是客户端。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1036 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:34 PVG 02:34 LAX 11:34 JFK 14:34
    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