SFTP防火墙配置指南(基于Linux常见防火墙工具)
SFTP(SSH File Transfer Protocol)基于SSH协议传输数据,默认使用TCP 22端口。配置防火墙时,核心目标是允许该端口的入站连接,同时可通过规则限制访问IP、端口范围等,提升安全性。以下是具体配置步骤:
确认SFTP服务状态:确保SSH服务(SFTP依赖SSH)已启动并运行。
sudo systemctl status sshd # CentOS/RHEL
sudo systemctl status ssh # Debian/Ubuntu
若未运行,使用sudo systemctl start sshd启动并设置开机自启(sudo systemctl enable sshd)。
确认防火墙工具:Linux常见防火墙工具为iptables(传统)和firewalld(动态管理,推荐)。通过以下命令确认:
sudo systemctl status firewalld # 检查firewalld状态
sudo iptables -L -n # 检查iptables规则(若有输出则表示已安装)
firewalld是现代Linux发行版(如CentOS 7+、Fedora、RHEL 7+)的默认防火墙工具,支持动态规则管理和Zone概念,配置更灵活。
# 允许SSH服务(包含SFTP)通过防火墙(永久生效)
sudo firewall-cmd --permanent --add-service=ssh
# 重新加载firewalld以应用规则
sudo firewall-cmd --reload
若仅需特定IP访问SFTP,可使用rich规则(替代基础规则):
# 允许指定IP(如192.168.1.100)访问SFTP端口22
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
# 拒绝其他所有IP访问SFTP端口(可选,需谨慎使用)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22" reject'
# 重新加载规则
sudo firewall-cmd --reload
若已将SSH/SFTP端口修改为其他端口(如2222),需允许新端口:
# 允许新端口(如2222)通过防火墙(永久生效)
sudo firewall-cmd --permanent --add-port=2222/tcp
# 重新加载规则
sudo firewall-cmd --reload
查看当前firewalld规则,确认SFTP端口已开放:
sudo firewall-cmd --list-all
输出应包含ssh服务或指定的端口(如22/tcp或2222/tcp)。
iptables是较老的防火墙工具,适用于需要精细控制流量的场景。
# 允许TCP 22端口的入站连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 设置默认策略(可选,增强安全性):拒绝所有其他入站连接
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 保存规则(根据发行版选择)
sudo iptables-save | sudo tee /etc/iptables.rules # Debian/Ubuntu
sudo service iptables save # CentOS 6及以下
# 允许指定IP(如192.168.1.100)访问22端口
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
# 拒绝其他所有IP访问22端口
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
# 保存规则(同上)
若SFTP配置了动态端口范围(如1024-65535),需允许该范围:
sudo iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables.rules
查看当前iptables规则:
sudo iptables -L -n -v
确认ACCEPT规则中包含tcp dpt:22(或自定义端口)。
禁用密码认证,使用密钥认证:编辑/etc/ssh/sshd_config,设置:
PasswordAuthentication no
PubkeyAuthentication yes
重启SSH服务:sudo systemctl restart sshd。
限制SFTP用户权限:通过sshd_config的Match指令,将用户限制在特定目录(chroot),禁止shell访问:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
重启SSH服务。
监控连接日志:定期检查/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL),排查异常登录行为。
通过以上步骤,可完成SFTP防火墙配置,确保安全的同时允许合法连接。需根据实际环境调整规则(如IP范围、端口),避免过度限制或暴露风险。