限制 FTP 访问 IP 的实用做法
一、前置说明
二、方法一 防火墙限制(推荐,简单可靠)
使用 iptables(通用 Linux)
sudo iptables -A INPUT -p tcp --dport 21 -s 203.0.113.10 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -j DROP
sudo iptables -A INPUT -p tcp --dport 21 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -j DROP
sudo iptables -A INPUT -p tcp --dport 10000:10100 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
使用 firewalld(CentOS/RHEL/Fedora)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port port="21" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="21" protocol="tcp" drop'
sudo firewall-cmd --permanent --add-port=10000-10100/tcp # 被动端口范围
sudo firewall-cmd --reload
使用 ufw(Ubuntu)
sudo ufw allow from 203.0.113.10 to any port 21
sudo ufw deny 21/tcp
sudo ufw reload
三、方法二 在 FTP 服务内限制(以 vsftpd 为例)
tcp_wrappers=YES
# /etc/hosts.deny
vsftpd: ALL
# /etc/hosts.allow
vsftpd: 203.0.113.10
# 或允许网段
vsftpd: 192.168.1.0/24
sudo systemctl restart vsftpd
pasv_enable=YES
pasv_address=你的服务器公网IP
pasv_min_port=10000
pasv_max_port=10100
并确保防火墙已放通上述端口范围。四、方法三 进阶与运维建议
# /etc/vsftpd.conf
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO # 仅列表内用户可登录
[DEFAULT]
bantime = 600
findtime = 600
maxretry = 3
[vsftpd]
enabled = true
port = ftp
filter = vsftpd
logpath = /var/log/vsftpd.log
banaction = iptables-multiport
sudo setsebool -P ftp_home_dir on
sudo chcon -Rv --type=ftp_home_t /home/用户名