温馨提示×

Linux SFTP配置中如何使用防火墙

小樊
42
2025-12-07 00:20:58
栏目: 智能运维

Linux SFTP配置中的防火墙实践

一 基础放行与验证

  • SFTP基于SSH,默认使用端口22/TCP。在防火墙中放行该端口即可对外提供SFTP服务。
  • 常用防火墙工具与命令示例:
    • firewalld(CentOS/RHEL/Fedora)
      • 放行SSH服务:sudo firewall-cmd --permanent --zone=public --add-service=ssh
      • 放行指定端口(如自定义端口2222):sudo firewall-cmd --permanent --zone=public --add-port=2222/tcp
      • 使配置生效:sudo firewall-cmd --reload
    • UFW(Ubuntu/Debian)
      • 放行SSH:sudo ufw allow sshsudo ufw allow 22/tcp
      • 启用防火墙:sudo ufw enable
    • iptables(通用)
      • 放行22端口:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 验证
    • 查看规则:
      • firewalld:sudo firewall-cmd --list-all
      • UFW:sudo ufw status verbose
      • iptables:sudo iptables -L -v -n
    • 连通性测试(从客户端):ssh -p 22 your_user@your_serversftp -P 22 your_user@your_server

二 限制来源IP

  • firewalld 基于“源地址”的白名单
    • 将可信网段/主机加入trusted区域,再在该区域放行SSH:
      • 添加源:sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24
      • 在trusted区域放行SSH:sudo firewall-cmd --permanent --zone=trusted --add-service=ssh
      • 可选:将public区域默认策略设为拒绝,仅放行trusted:sudo firewall-cmd --set-default-zone=trusted(变更前务必确保当前SSH会话不被中断)
      • 使配置生效:sudo firewall-cmd --reload
  • UFW 按来源放行
    • 仅允许指定IP访问22端口:sudo ufw allow from 203.0.113.10 to any port 22
  • iptables 按来源放行
    • 仅允许指定IP访问22端口:sudo iptables -A INPUT -p tcp --dport 22 -s 203.0.113.10 -j ACCEPT
  • 提示:如需更细粒度控制,可在/etc/ssh/sshd_config中使用Match Address对特定IP应用SFTP策略,作为防火墙的互补手段。

三 修改SFTP端口后的防火墙配合

  • 修改SSH端口(示例改为2222
    • 编辑/etc/ssh/sshd_configPort 22Port 2222(建议先保留22以便回滚)
    • 重启服务:Debian/Ubuntu 用 sudo systemctl restart ssh,CentOS/RHEL 用 sudo systemctl restart sshd
    • 验证监听:ss -lntp | grep -E ':(22|2222)'
  • 防火墙同步放行新端口
    • firewalld:sudo firewall-cmd --permanent --zone=public --add-port=2222/tcp && sudo firewall-cmd --reload
    • UFW:sudo ufw allow 2222/tcp
    • iptables:sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
  • SELinux 场景(仅限RHEL/CentOS启用SELinux)
    • 允许新端口作为SSH端口:sudo semanage port -a -t ssh_port_t -p tcp 2222
  • 回滚建议:确认新端口稳定后再关闭旧端口,避免中断现有会话。

四 连接数限制与抗洪策略

  • 限制每IP并发连接到SSH/SFTP端口(iptables + connlimit)
    • 限制每个来源IP到22端口的最大并发连接数为50
      • sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP
      • sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    • 说明:--connlimit-mask 32表示按单个IP统计,如需按网段统计可改为24等掩码。
  • 缓解SYN Flood(速率限制)
    • 允许每秒1个SYN,突发3个:sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
    • 其余SYN丢弃:sudo iptables -A INPUT -p tcp --syn -j DROP
  • 提示:在生产环境应用前,先在测试环境验证规则,并结合日志与监控观察连接行为。

五 安全加固清单

  • 仅开放必要端口与服务,优先采用基于源地址的白名单策略(firewalld的trusted区域或UFW按IP放行)。
  • 修改默认端口只是“安全通过 obscurity”,务必配合密钥认证、禁用root登录、限制可登录用户与目录(如Chroot/内部SFTP)。
  • 变更防火墙或SSH端口前,保持一个已验证可用的回退通道(如保留22端口一段时间、控制台访问等),避免被锁死。
  • 定期审计规则与监听端口:ss -lntp | grep sshsudo firewall-cmd --list-allsudo ufw statussudo iptables -L -v -n

0