如何设置CentOS防火墙以实现SFTP传输的安全与高效?

更新于
2026-08-13 19:15:02
6阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

您可能需要通过SFTP进行安全文件传输,但常常会遇到防火墙配置问题导致连接失败或速度缓慢。" src="/img02/2738222536,2719305305&fm=253&app=138&f=jpg"/>

1. 准备工作:安装和启动firewalld

确保您的CentOS程序已安装firewalld服务。如果未安装,请执行以下命令:

sudo yum install firewalld

安装完成后启动并设置为开机自启动:

sudo systemctl start firewalld
sudo systemctl enable firewalld

2. 配置firewalld允许SFTP流量

SFTP通常使用SSH协议。所以需要确保防火墙允许通过端口22的TCP流量。说到执行以下命令,

sudo firewall-cmd --permanent --add-service=sftp
sudo firewall-cmd --reload

注意事项这方面。检查规则是否生效

验证规则是否成功添加:

sudo firewall-cmd --list-all
services: ssh sftp
从ports来看,22/tcp

说到常见问题,防火墙规则无效?

即使服务运行了防火墙规则可能仍然不生效。老实说,检查iptables状态: iptables -L

3. 配置SELinux策略

如何设置CentOS防火墙以实现SFTP传输的安全与高效?

sudo setsebool -P sftp_home_dir on
sudo setsebool -P ssh_sysadm_login on
# 检查是否生效:
getsebool -a | grep sftp_home_dir
sftp_home_dir --> on 

\* 警告 *\

4. 配置SSH服务

* 重启SSH服务以使配置生效 *:

sudo systemctl restart sshd
# 检查状态:
systemctl status sshd | grep Active
从Active来看。active 

\*\* 快速测试 \*\*

  1. 至于创建测试账号,
    $ sudo useradd testuser$ passwd testuser
    New password:
    Retype new password:
    passwd的观点是,password updated successfully
    $ sudo chmod 750 /home/testuser # 修正权限!$ sudo chown root:root /home/testuser # 安全措施!怎么说呢,$ sudo chmod +t /home/testuser # 强制sticky bit!$ sudo restorecon -Rv /home/testuser # SELinux恢复上下文!restoring SELinux security context of /home/testuser/... OK!restoring SELinux security context of /home/testuser/.bash_logout...
    restoring SELinux security context of ...
    OK!
  2. sftp testuser@your_server_ip
    Password:
    Connected to your_server_ip.
    sftp> ls -l
    -rw------- 1 testuser users 0 Sep 17 10:48 .bash_history*
    drwx------ 7 testuser users 4096 Sep 17 10:48 .cache/
    -rw-r--r-- 1 testuser users 75 Sep 17 10:48 .profile*
    drwx------ 8 testuser users 4096 Sep 17 10:48 .ssh/
    

\*\* 错误排查 \*\*

  序号    错误表现    方法  

 => <==>  - Connection refused - Timeout - Permission denied - 检查 /var/log/secure.log - 验证 /etc/firewall-cmd/services/sftp.xml - 测试临时禁用firewall: # systemctl stop firewalld.service # sftp user@host # 测试! - 检查sshd_config: PermitRootLogin prohibit-password Subsystem sftp internal-sftp Match User usergroup shell=/bin/bash ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no

- "Could not create directory"... - "Failed to open session" - 检查目录所有者与权限: /bin/chown root:sftponly /chrootdir/ /bin/chmod go-wsrx /chrootdir/ /usr/sbin/restorecon -RvF /chrootdir/

  • 目录层级权限必须正确设置:
    • /chrootdir = root:sftponly。mode 'r-xr-xr-x'
    • /chrootdir/home = root:sftponly,mode 'r-xr-xr-x'
    • /chrootdir/home/user = user:sftponly,mode 'rw-r----- '

  • 避免使用默认shell:/sbin/nologin!
  • ',

    : Limit login attempts with fail2ban! > 调整内核参数!<\b>:

    cat>/etc/sysctl.d/99-security.conf <'EOF'
    net.ipv4.tcpsyncookies = On net.ipv4.icmpechoignorebroadcasts = On kernel.sysrq = Off EOF sysctl --system # Apply immediately!EOF,auditctl -A -a exit,always -F arch=b64 \
    -F euid!=unconfinedu \
    -F auid!=unconfinedt \
    -F exe=/usr/libexec/sftpd \
    -F success=no \
    -k SFTPAUDITFAIL

    sed '/^\/{n;s/#//}' \ -i.bak /etc/ssh/sshdconfig sed '/^\/{n;s/#//}' \ -i.bak /etc/ssh/sshdconfig

    echo 'SessionTimeoutIdleSec=$)'>/etc/systemd/logind.conf.d/local.conf echo 'SessionLockingMode=enforce'>/etc/pam.d/common-session.d/enable-locking.conf auth required pamtally.so deny=userlock unlocktime=$) resettime=$) auth pamlistfile.so item=user sense=deny file=/etc/security/passwd-blacklist dirsep=/ auth sufficient pamunix.so nullok tryfirstpass usefirstpass auth required pamdeny.so account required pampermit.so account pamlistfile.so item=user sense=deny file=/etc/security/user-blacklist dirsep=/ account sufficient pamunix.so session required pamlimits.so session optional pammotd.so motd=/run/motd.dynamic noupdate session optional pammotd.so motd=/run/motd.nologin noupdate session optional pamlastlog.so noupdate showfailed session optional pammail.so quiet session required pamenv.so envfile=/etc/default/login envfileprefix=- DEFMAXSIZETMPFS=$) DEFSIZELOGINDEF=$) DEFTIMEOUTSYSTEMD=$) EOF;chattr +aiCjsuSeT ~+/.bashrc ~+/.bashprofile ~/.ssh/config ~/.ssh/idrsa;find ~/ \,\!\,\!\ ) | xargs rm {} \;find ~/ \ | xargs du {} \;>~/tmp/disk-report.txt && sort {}.txt | tail && cat {}.txt && rm {}.txt echo '{USERNAME} ALL= NOPASSWD:/usr/bin/scp,:/usr/bin/sftp,:/usr/bin/sudoedit。/usr/bin/vim,:/usr/libexec/sftpd,:/var/log/audit/*':$>>~+/tmp/allowed-commands.txt mv ~+/tmp/allowed-commands.txt ~+/tmp/allowed-commands.txt.bak $;do`done)&

    关键提示: ⚠️ 若出现"Permission denied"错误,请仔细检查SELinux策略和目录权限!

    标签:CentOS

    您可能需要通过SFTP进行安全文件传输,但常常会遇到防火墙配置问题导致连接失败或速度缓慢。" src="/img02/2738222536,2719305305&fm=253&app=138&f=jpg"/>

    1. 准备工作:安装和启动firewalld

    确保您的CentOS程序已安装firewalld服务。如果未安装,请执行以下命令:

    sudo yum install firewalld

    安装完成后启动并设置为开机自启动:

    sudo systemctl start firewalld
    sudo systemctl enable firewalld

    2. 配置firewalld允许SFTP流量

    SFTP通常使用SSH协议。所以需要确保防火墙允许通过端口22的TCP流量。说到执行以下命令,

    sudo firewall-cmd --permanent --add-service=sftp
    sudo firewall-cmd --reload

    注意事项这方面。检查规则是否生效

    验证规则是否成功添加:

    sudo firewall-cmd --list-all
    services: ssh sftp
    从ports来看,22/tcp

    说到常见问题,防火墙规则无效?

    即使服务运行了防火墙规则可能仍然不生效。老实说,检查iptables状态: iptables -L

    3. 配置SELinux策略

    如何设置CentOS防火墙以实现SFTP传输的安全与高效?

    sudo setsebool -P sftp_home_dir on
    sudo setsebool -P ssh_sysadm_login on
    # 检查是否生效:
    getsebool -a | grep sftp_home_dir
    sftp_home_dir --> on 

    \* 警告 *\

    4. 配置SSH服务

    * 重启SSH服务以使配置生效 *:

    sudo systemctl restart sshd
    # 检查状态:
    systemctl status sshd | grep Active
    从Active来看。active 

    \*\* 快速测试 \*\*

    1. 至于创建测试账号,
      $ sudo useradd testuser$ passwd testuser
      New password:
      Retype new password:
      passwd的观点是,password updated successfully
      $ sudo chmod 750 /home/testuser # 修正权限!$ sudo chown root:root /home/testuser # 安全措施!怎么说呢,$ sudo chmod +t /home/testuser # 强制sticky bit!$ sudo restorecon -Rv /home/testuser # SELinux恢复上下文!restoring SELinux security context of /home/testuser/... OK!restoring SELinux security context of /home/testuser/.bash_logout...
      restoring SELinux security context of ...
      OK!
    2. sftp testuser@your_server_ip
      Password:
      Connected to your_server_ip.
      sftp> ls -l
      -rw------- 1 testuser users 0 Sep 17 10:48 .bash_history*
      drwx------ 7 testuser users 4096 Sep 17 10:48 .cache/
      -rw-r--r-- 1 testuser users 75 Sep 17 10:48 .profile*
      drwx------ 8 testuser users 4096 Sep 17 10:48 .ssh/
      

    \*\* 错误排查 \*\*

      序号    错误表现    方法  

     => <==>  - Connection refused - Timeout - Permission denied - 检查 /var/log/secure.log - 验证 /etc/firewall-cmd/services/sftp.xml - 测试临时禁用firewall: # systemctl stop firewalld.service # sftp user@host # 测试! - 检查sshd_config: PermitRootLogin prohibit-password Subsystem sftp internal-sftp Match User usergroup shell=/bin/bash ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no

    - "Could not create directory"... - "Failed to open session" - 检查目录所有者与权限: /bin/chown root:sftponly /chrootdir/ /bin/chmod go-wsrx /chrootdir/ /usr/sbin/restorecon -RvF /chrootdir/

    • 目录层级权限必须正确设置:
      • /chrootdir = root:sftponly。mode 'r-xr-xr-x'
      • /chrootdir/home = root:sftponly,mode 'r-xr-xr-x'
      • /chrootdir/home/user = user:sftponly,mode 'rw-r----- '

  • 避免使用默认shell:/sbin/nologin!
  • ',

    : Limit login attempts with fail2ban! > 调整内核参数!<\b>:

    cat>/etc/sysctl.d/99-security.conf <'EOF'
    net.ipv4.tcpsyncookies = On net.ipv4.icmpechoignorebroadcasts = On kernel.sysrq = Off EOF sysctl --system # Apply immediately!EOF,auditctl -A -a exit,always -F arch=b64 \
    -F euid!=unconfinedu \
    -F auid!=unconfinedt \
    -F exe=/usr/libexec/sftpd \
    -F success=no \
    -k SFTPAUDITFAIL

    sed '/^\/{n;s/#//}' \ -i.bak /etc/ssh/sshdconfig sed '/^\/{n;s/#//}' \ -i.bak /etc/ssh/sshdconfig

    echo 'SessionTimeoutIdleSec=$)'>/etc/systemd/logind.conf.d/local.conf echo 'SessionLockingMode=enforce'>/etc/pam.d/common-session.d/enable-locking.conf auth required pamtally.so deny=userlock unlocktime=$) resettime=$) auth pamlistfile.so item=user sense=deny file=/etc/security/passwd-blacklist dirsep=/ auth sufficient pamunix.so nullok tryfirstpass usefirstpass auth required pamdeny.so account required pampermit.so account pamlistfile.so item=user sense=deny file=/etc/security/user-blacklist dirsep=/ account sufficient pamunix.so session required pamlimits.so session optional pammotd.so motd=/run/motd.dynamic noupdate session optional pammotd.so motd=/run/motd.nologin noupdate session optional pamlastlog.so noupdate showfailed session optional pammail.so quiet session required pamenv.so envfile=/etc/default/login envfileprefix=- DEFMAXSIZETMPFS=$) DEFSIZELOGINDEF=$) DEFTIMEOUTSYSTEMD=$) EOF;chattr +aiCjsuSeT ~+/.bashrc ~+/.bashprofile ~/.ssh/config ~/.ssh/idrsa;find ~/ \,\!\,\!\ ) | xargs rm {} \;find ~/ \ | xargs du {} \;>~/tmp/disk-report.txt && sort {}.txt | tail && cat {}.txt && rm {}.txt echo '{USERNAME} ALL= NOPASSWD:/usr/bin/scp,:/usr/bin/sftp,:/usr/bin/sudoedit。/usr/bin/vim,:/usr/libexec/sftpd,:/var/log/audit/*':$>>~+/tmp/allowed-commands.txt mv ~+/tmp/allowed-commands.txt ~+/tmp/allowed-commands.txt.bak $;do`done)&

    关键提示: ⚠️ 若出现"Permission denied"错误,请仔细检查SELinux策略和目录权限!

    标签:CentOS