如何编写满足SSH限流及日志要求的Nftable规则?
NFTables SSH 限速+日志配置实现
核心配置思路
- 基于filter表的input钩子处理入站流量,优先匹配SSH的TCP 22端口新建连接,避免影响已建立的正常会话
- 用limit模块按单源IP实现速率控制:配置速率为每分钟30次,突发连接上限5,超过阈值的新建连接直接丢弃
- 对通过限速校验的新建SSH连接先打日志,再执行放行动作
完整可运行配置示例
#!/usr/sbin/nft -f # 清空现有规则,避免冲突 flush ruleset # 定义IPv4 filter表 table ip filter { chain input { # 默认策略,可根据自身需求调整 type filter hook input priority 0; policy drop; # 放行本地环回流量 iif "lo" accept # 放行已建立、相关状态的连接,必须配置否则SSH连接建立后会被阻断 ct state { established, related } accept # 匹配SSH 22端口新建TCP连接 tcp dport 22 ct state new { # 单源IP限速:每分钟30次,突发5次 limit rate 30/minute burst 5 type saddr \ # 匹配到限速阈值内的连接打日志,前缀可自定义方便后续排查 log prefix "nft_ssh_accept: " \ # 放行连接 accept # 超过限速的连接直接丢弃 drop } # 其他业务端口的放行规则可在下方补充 } }
生效与验证方法
- 将上述配置保存到
/etc/nftables/ssh_rules.nft - 执行命令加载配置:
nft -f /etc/nftables/ssh_rules.nft - 执行命令查看规则是否加载成功:
nft list ruleset - 系统日志可在
/var/log/auth.log或/var/log/syslog中按配置的日志前缀筛选SSH连接记录
内容的提问来源于stack exchange,提问作者blackbird6666
相关产品推荐
相关产品推荐

