Linux网络访问控制方案_安全通信策略说明【指导】

7次阅读

新系统优先用 nftables,因其原子提交、映射支持等优势;老系统如 CentOS 7 仍用 iptables。防火墙策略应默认拒绝、显式放行,并限制源地址;防暴力 SSH 宜用 limit+counter 组合;出站流量必须限制,避免 C2 外连。

Linux 网络访问控制方案_安全通信策略说明【指导】

iptables 和 nftables 哪个该用?

新系统优先选 nftables,不是因为更“高级”,而是 iptables 在内核 5.10+ 已被标记为 legacy,且规则同步、原子提交、表达能力都弱于 nftables。但如果你维护的是 CentOS 7 或 Ubuntu 18.04 这类老系统,iptables 仍是默认且稳定的选择。

  • iptables 规则靠链式追加,iptables-restore 加载时无法保证原子性;nftablesnft -f 是原子加载,避免中间态开放 端口
  • nftables 支持映射(maps)、动态集合(dynamic sets),适合做 IP 黑名单 自动更新;iptables 需依赖 ipset 配合才能达到类似效果
  • 别混用:同一台机器上同时运行 iptablesnftables 可能导致规则冲突或跳过预期链,尤其在 netfilter hook 点重叠时

只允许 SSH 和 HTTPS 入站,怎么写最稳?

核心是「默认拒绝 + 显式放行」,且必须限制源地址范围(哪怕只是内网段)。直接放通 0.0.0.0/022443 是高危操作,真实环境中几乎总要配合来源控制。

nft add table inet filter nft add chain inet filter input {type filter hook input priority 0 ; policy drop ;} nft add rule inet filter input iifname "eth0" ip saddr 192.168.10.0/24 tcp dport 22 accept nft add rule inet filter input iifname "eth0" tcp dport 443 ct state established,related accept nft add rule inet filter input iifname "eth0" tcp dport 443 ip saddr {203.0.113.5, 203.0.113.12} accept
  • 第一条 accept 针对内网管理流量,带明确 ip saddr
  • 第二条放行已建立连接的返回包(避免影响长连接),必须放在第三条之前
  • 第三条才是对外暴露的 HTTPS 白名单,用 {} 语法定义多个 CIDR 或 IP,比写多条 rule 更高效

如何阻止暴力 SSH 登录又不封错人?

nftableslimit + counter 组合比单纯封 IP 更可控,避免因误操作或共享出口 IP 导致大面积误伤。

nft add rule inet filter input tcp dport 22 ct state new limit rate 5/minute burst 10 packets counter reject with icmp type host-unreachable
  • limit rate 5/minute burst 10 表示每分钟最多 5 次新连接请求,允许突发 10 次(应对合法用户快速重试)
  • ct state new 确保只限速新建连接,不影响已有会话
  • reject 而非 drop,让客户端立刻收到失败响应,减少重试等待时间,也降低扫描器停留时长
  • 搭配 counter 可后续用 nft list ruleset | grep ssh 查看命中次数,判断是否需调参

出站流量要不要限制?容易被忽略的关键点

多数人只盯入站,但恶意软件一旦上线,第一件事就是外连 C2 服务器。出站不限制,等于 防火墙 只关了一半门。

  • 默认策略设为 policy dropoutput 链必须配白名单:至少放开 lo、DNS(udp dport 53)、NTP(udp dport 123)、HTTPS(tcp dport 443)——但注意:不能无条件放通所有 443,应结合 ip daddr 或域名(需配合应用层代理)
  • output 链中 oifname 要明确指定物理接口(如 eth0),否则容器或虚拟网卡可能绕过规则
  • 若系统跑 Docker,docker0 网桥流量默认不经过 output 链,得额外在 forward 链处理容器出站,或改用 iptables -t nat -A POSTROUTING 做 SNAT 控制

text=ZqhQzanResources