V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liashui
V2EX  ›  程序员

iptables 删除 1.ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED,为啥 ssh 不能登录了?

  •  
  •   liashui · 2017-03-25 13:24:31 +08:00 · 7188 次点击
    这是一个创建于 2800 天前的主题,其中的信息可能已经有所发展或是发生改变。
    centos7

    $:iptables -nL --line-number

    Chain INPUT (policy DROP)
    num target prot opt source destination
    1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
    3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
    4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22


    $:iptables-save
    *filter
    :INPUT DROP [24:3588]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [197:32015]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    13 条回复    2017-03-26 21:31:39 +08:00
    liashui
        1
    liashui  
    OP
       2017-03-25 13:27:09 +08:00
    疑问:
    1.第三条规则是 lo 的,这个可以不用考虑
    2.难道 ssh 除了“ state NEW tcp dpt:22 ”这块的数据,还有 “ state RELATED,ESTABLISHED ”这块的数据,所以需要两条配合起来?
    mytsing520
        2
    mytsing520  
       2017-03-25 13:30:28 +08:00
    NEW 说明这个包是我们看到的第一个包。意思就是,这是 conntrack 模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个 SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是 SYN 包,但它仍会被认为是 NEW 状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。

    ESTABLISHED 已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于 ESTABLISHED 状态的连接是非常容易理解的。只要发送并接到应答,连接就是 ESTABLISHED 的了。一个连接要从 NEW 变为 ESTABLISHED ,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。 ICMP 的错误和重定向等信息包也被看作是 ESTABLISHED ,只要它们是我 们所发出的信息的应答。

    RELATED 是个比较麻烦的状态。当一个连接和某个已处于 ESTABLISHED 状态的连接有关系时,就被认为是 RELATED 的了。换句话说,一个连接要想是 RELATED 的,首先要有一个 ESTABLISHED 的连接。这个 ESTABLISHED 连接再产生一个主连接之外的连接,这个新的连接就是 RELATED 的了,当然前提是 conntrack 模块要能理解 RELATED 。 ftp 是个很好的例子, FTP-data 连接就是和 FTP-control 有 RELATED 的。还有其他的例子,比如,通过 IRC 的 DCC 连接。有了这个状态, ICMP 应 答、 FTP 传输、 DCC 等才能穿过防火墙正常工作。注意,大部分还有一些 UDP 协议都依赖这个机制。这些协议 是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。

    INVALID 说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的 ICMP 错误信息。一般地,我们 DROP 这个状态的任何东西。

    以上来自 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1990048&page=2 ,仅供参考。
    liashui
        3
    liashui  
    OP
       2017-03-25 13:30:42 +08:00
    求不要沉,伟大的 e2vx
    oaix
        4
    oaix  
       2017-03-25 13:31:01 +08:00
    state 是指 tcp 连接状态, state NEW 指客户新建一个到 22 端口的连接,你 accept 了,但是连接建立后,后续的包被 reject 了。
    julyclyde
        5
    julyclyde  
       2017-03-25 13:32:47 +08:00
    为什么你会问“难道”这种话呢?看 NEW 和 ESTABILISHED 这俩词的意思还不明白?
    luojiyin87
        6
    luojiyin87  
       2017-03-25 13:36:11 +08:00
    CentOS7 不是用 firewalld 管理的?
    jasontse
        7
    jasontse  
       2017-03-25 14:06:40 +08:00 via iPad
    你只放过了 state 是 NEW 的包啊,当 TCP 连接建立变成 Established 就被 DROP 了啊。
    pagxir
        8
    pagxir  
       2017-03-25 14:12:22 +08:00 via Android
    难道只有我一个人看到 input 链所有包被 drop 么。其实 你用 iptables -nxvL 就知道哪来被 match 了。
    digimoon
        9
    digimoon  
       2017-03-25 14:46:39 +08:00
    policy DROP 不符合规则的默认全部 drop ,然后你还去掉了 ESTABILISHED 的 accept ,那除了 NEW 的以外不就 drop 了么?
    liashui
        10
    liashui  
    OP
       2017-03-25 14:57:19 +08:00
    @mytsing520 @oaix @julyclyde @jasontse @digimoon 你们是对的,我没有对 new , ESTABILISHED 没有理解
    liashui
        11
    liashui  
    OP
       2017-03-25 14:57:48 +08:00
    @luojiyin87 我禁止了 firewalld ,使用了 iptables
    shiji
        12
    shiji  
       2017-03-26 00:18:32 +08:00 via Android
    哈哈, LZ 学习了就好, iptables 和 ip route 里面的坑不少,一个不小心服务器就连不上了。。
    另外建议把这几个的默认规则都设为 Accept ,在最后一行把所有剩下的 drop 就行。否则小手一抖,给 iptables flush 了,服务器就和互联网失联了。
    julyclyde
        13
    julyclyde  
       2017-03-26 21:31:39 +08:00
    @shiji 说的很对。-P 是个大坑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:35 · PVG 22:35 · LAX 06:35 · JFK 09:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.