Linux vsftpd防火墙配置:保护服务器安全的分步指南
FTP服务依赖控制连接(默认端口21,用于身份验证)和数据连接(默认端口20,用于文件传输),需首先放行这些基础端口。此外,为避免被动模式(PASV)下的连接问题,需额外开放数据端口范围。
# 允许FTP控制端口(21)
sudo ufw allow 21/tcp
# 允许FTP数据端口(20)
sudo ufw allow 20/tcp
# 允许被动模式数据端口范围(示例:30000-31000,需与vsftpd配置一致)
sudo ufw allow 30000:31000/tcp
# 重新加载ufw以应用规则
sudo ufw reload
# 允许FTP服务(自动包含21端口)
sudo firewall-cmd --permanent --add-service=ftp
# 允许被动模式数据端口范围(示例:30000-31000)
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
# 重新加载firewalld以应用规则
sudo firewall-cmd --reload
# 允许FTP控制端口(21)
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# 允许FTP数据端口(20)
sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 允许被动模式数据端口范围(示例:30000-31000),并允许已建立的连接
sudo iptables -A INPUT -p tcp --dport 30000:31000 -m state --state NEW,ESTABLISHED -j ACCEPT
# 保存iptables规则(CentOS 7及以上需使用systemctl保存)
sudo service iptables save # 或 sudo /sbin/iptables-save > /etc/sysconfig/iptables
防火墙规则需与vsftpd配置协同工作,避免因配置冲突导致安全漏洞。
匿名用户无需认证即可登录,存在极大安全隐患,需彻底禁用:
编辑/etc/vsftpd.conf,设置:
anonymous_enable=NO
将用户限制在自己的主目录(家目录),防止越权访问系统文件:
chroot_local_user=YES
allow_writeable_chroot=YES # 允许chroot目录可写(避免用户无法上传文件)
FTP传输默认明文,需启用SSL/TLS加密保护数据隐私:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
vsftpd.conf,启用SSL:ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
force_local_data_ssl=YES # 强制数据连接使用SSL
force_local_logins_ssl=YES # 强制登录过程使用SSL
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH
被动模式下,服务器需开放指定端口范围供客户端连接,需与防火墙规则一致:
pasv_enable=YES
pasv_min_port=30000 # 起始端口(与防火墙规则一致)
pasv_max_port=31000 # 结束端口(与防火墙规则一致)
pasv_address=服务器公网IP # 指定服务器IP(避免客户端获取到内网IP)
为降低被扫描或攻击的风险,建议限制可访问FTP服务的IP地址,仅允许可信IP连接。
# 仅允许特定IP段(示例:192.168.1.0/24)访问FTP控制端口(21)
sudo ufw allow from 192.168.1.0/24 to any port 21/tcp
# 删除之前的全局允许规则(若有)
sudo ufw delete allow 21/tcp
# 仅允许特定IP(示例:192.168.1.100)访问FTP服务
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ftp" accept'
# 删除之前的全局允许规则(若有)
sudo firewall-cmd --permanent --remove-service=ftp
# 重新加载firewalld
sudo firewall-cmd --reload
隐藏vsftpd版本信息,避免攻击者利用版本漏洞发起针对性攻击:
编辑/etc/vsftpd.conf,添加:
ftpd_banner=Welcome to FTP Server. All activities are monitored.
记录FTP操作日志,便于追踪异常行为:
编辑/etc/vsftpd.conf,添加:
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
及时更新vsftpd及系统组件,修复已知安全漏洞:
# Ubuntu/Debian
sudo apt update && sudo apt upgrade vsftpd
# CentOS/RHEL
sudo yum update vsftpd
通过以上步骤,可构建“防火墙+vsftpd配置”的双重安全防线,有效保护Linux服务器上的vsftpd服务免受非法访问和攻击。