Linux · 3 5 月, 2022 0

Linux防火墙中的INPUT/OUTPUT以及各个元素都对应什么

前言

对Linux内置防火墙iptables或者firewalld少有了解的小伙伴应该听说过“链”(chain)的概念。在实践中,有时需要通过配置INPUT和OUTPUT这两个chain来控制主机对外部以及外部对主机的访问。配置参数有:

  • 源地址(-s)/端口(–sport)
  • 目的地址(-d)/端口(–dport)
  • 入口接口(-i)
  • 出口接口(-o)

听起来容易做起来难。为了防止发生在配置过程中产生诸如“对于OUTPUT而言到底谁是源谁是目的”这样的疑问,这里稍微做一下直观的总结。上图——

怎么做

如果仅是为了实现简单的访问控制,建议一台主机仅配置INPUT或OUTPUT,避免混乱。

在OUTPUT世界观中

如图,本机IP、端口为“源”,远程为“目的”。所有设置对出口接口(-o)有效。它可以实现以下案例(这里使用firewall-cmd):

# 阻止主机访问远程22/tcp端口
firewall-cmd --add-rule ipv4 filter OUTPUT 0 -p tcp -o eth0 --dport 22 -j DROP
# 阻止主机8000/tcp端口被远程访问
firewall-cmd --add-rule ipv4 filter OUTPUT 0 -p tcp --sport 8000 -o eth0 -j DROP

由以上案例可以看出,在使用白名单方式设置时(即高优先级规则采取ACCEPT,最低优先级规则全局DROP/REJECT)既要保证主机对远程特定IP/端口的访问,也要保证主机的开放端口能被远程访问
(最典型的杯具:忘记设置远程对主机22端口的访问权限导致SSH当场断开且再也无法连接主机)

在INPUT世界观中

所有设置对入口接口(-i)有效。同样可以进行双向访问控制。对应关系看图,篇幅有限(作者偷懒)不再赘述。
另外,CentOS7上测试时发现INPUT的源地址/端口访问控制似乎不起作用。所以这里还是建议尽可能去折腾OUTPUT比较稳妥。