在Linux系统下配置防火墙以允许SFTP(SSH File Transfer Protocol)连接,通常涉及以下几个步骤。以下以iptables
和firewalld
两种常见的防火墙管理工具为例进行说明。
iptables
配置防火墙允许SSH端口(默认22)
SFTP依赖于SSH,因此首先需要确保SSH端口是开放的。
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许SFTP数据传输端口范围
默认情况下,SFTP使用与SSH相同的端口(22)。如果你使用了动态端口范围,可以允许该范围内的端口。例如,允许端口范围1024到65535:
sudo iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT
注意: 如果你的系统配置了特定的防火墙规则,确保这些规则不会与SSH端口冲突。
保存iptables规则
不同的Linux发行版保存iptables规则的方法可能不同。例如,在Debian/Ubuntu上可以使用iptables-persistent
:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload
在CentOS/RHEL上,可以使用service
命令:
sudo service iptables save
重启防火墙服务(如有必要)
sudo systemctl restart iptables
firewalld
配置防火墙firewalld
是许多现代Linux发行版(如CentOS 7及以上、Fedora、RHEL 7及以上)默认的动态防火墙管理工具。
启动并启用firewalld服务
sudo systemctl start firewalld
sudo systemctl enable firewalld
允许SSH端口(默认22)
sudo firewall-cmd --permanent --add-service=ssh
重新加载firewalld配置
sudo firewall-cmd --reload
(可选)允许特定端口范围
如果需要允许特定的端口范围用于SFTP数据传输,可以使用rich rules
:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的IP地址" port protocol="tcp" port="1024-65535" accept'
sudo firewall-cmd --reload
注意: 将
你的IP地址
替换为允许访问的实际IP地址,以增强安全性。
验证防火墙规则
查看当前的防火墙状态和规则:
sudo firewall-cmd --list-all
使用密钥认证:尽量使用SSH密钥对进行身份验证,避免使用密码认证,提高安全性。
限制SSH用户权限:通过配置sshd_config
,限制可以SFTP访问的用户,并禁止其执行shell访问。
编辑/etc/ssh/sshd_config
,添加或修改以下配置:
Match User your_sftp_user
ChrootDirectory /home/your_sftp_user
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
然后重启SSH服务:
sudo systemctl restart sshd
监控SSH/SFTP连接:定期检查SSH和SFTP的日志文件(通常位于/var/log/auth.log
或/var/log/secure
),监控异常活动。
通过以上步骤,你应该能够在Linux系统下成功配置防火墙以支持SFTP连接,同时确保系统的安全性。