温馨提示×

如何在SFTP中配置防火墙规则

小樊
38
2025-11-09 07:53:12
栏目: 编程语言

SFTP防火墙配置指南(基于Linux常见防火墙工具)
SFTP(SSH File Transfer Protocol)基于SSH协议传输数据,默认使用TCP 22端口。配置防火墙时,核心目标是允许该端口的入站连接,同时可通过规则限制访问IP、端口范围等,提升安全性。以下是具体配置步骤:

一、前置准备

  1. 确认SFTP服务状态:确保SSH服务(SFTP依赖SSH)已启动并运行。

    sudo systemctl status sshd  # CentOS/RHEL
    sudo systemctl status ssh   # Debian/Ubuntu
    

    若未运行,使用sudo systemctl start sshd启动并设置开机自启(sudo systemctl enable sshd)。

  2. 确认防火墙工具:Linux常见防火墙工具为iptables(传统)和firewalld(动态管理,推荐)。通过以下命令确认:

    sudo systemctl status firewalld  # 检查firewalld状态
    sudo iptables -L -n              # 检查iptables规则(若有输出则表示已安装)
    

二、使用firewalld配置SFTP防火墙规则(推荐)

firewalld是现代Linux发行版(如CentOS 7+、Fedora、RHEL 7+)的默认防火墙工具,支持动态规则管理和Zone概念,配置更灵活。

1. 基础配置:允许SFTP默认端口(22)

# 允许SSH服务(包含SFTP)通过防火墙(永久生效)
sudo firewall-cmd --permanent --add-service=ssh

# 重新加载firewalld以应用规则
sudo firewall-cmd --reload

2. 可选:限制访问IP(增强安全性)

若仅需特定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

3. 可选:修改SFTP端口(非默认22时)

若已将SSH/SFTP端口修改为其他端口(如2222),需允许新端口:

# 允许新端口(如2222)通过防火墙(永久生效)
sudo firewall-cmd --permanent --add-port=2222/tcp

# 重新加载规则
sudo firewall-cmd --reload

4. 验证规则

查看当前firewalld规则,确认SFTP端口已开放:

sudo firewall-cmd --list-all

输出应包含ssh服务或指定的端口(如22/tcp2222/tcp)。

三、使用iptables配置SFTP防火墙规则(传统)

iptables是较老的防火墙工具,适用于需要精细控制流量的场景。

1. 基础配置:允许SFTP默认端口(22)

# 允许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及以下

2. 可选:限制访问IP

# 允许指定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

# 保存规则(同上)

3. 可选:允许端口范围(若SFTP使用动态端口)

若SFTP配置了动态端口范围(如1024-65535),需允许该范围:

sudo iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables.rules

4. 验证规则

查看当前iptables规则:

sudo iptables -L -n -v

确认ACCEPT规则中包含tcp dpt:22(或自定义端口)。

四、其他安全建议(配合防火墙使用)

  1. 禁用密码认证,使用密钥认证:编辑/etc/ssh/sshd_config,设置:

    PasswordAuthentication no
    PubkeyAuthentication yes
    

    重启SSH服务:sudo systemctl restart sshd

  2. 限制SFTP用户权限:通过sshd_configMatch指令,将用户限制在特定目录(chroot),禁止shell访问:

    Match User sftpuser
        ChrootDirectory /home/sftpuser
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no
    

    重启SSH服务。

  3. 监控连接日志:定期检查/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL),排查异常登录行为。

通过以上步骤,可完成SFTP防火墙配置,确保安全的同时允许合法连接。需根据实际环境调整规则(如IP范围、端口),避免过度限制或暴露风险。

0