如何设置 ftp 被动模式的 iptables 防火墙规则?
2018-08-28 by dongnan
目标
设置 FTP
服务器上的 iptables
规则,允许使用 被动模式 访问 FTP
服务。
环境
软件 | 版本 |
---|---|
CentOS | 7.5 amd64 |
iptables | v1.4.21 |
vsftpd | 3.0.2 |
数据流
Client --> Server { Firewall -> FTP Deamon }
FTP 服务器,开启了 iptables
防火墙。
FTP 基础
FTP 通过TCP
连接,FTP不同于其它服务的是它使用了两个端口,一个数据端口和一个命令端口(或称为控制端口)。
通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20
了。
运行模式
使用被动模式 passive mode
,命令端口 TCP:21
,数据端口 TCP:10030 - 10035
(可自定义)。
配置文件
awk '!/^(#|$)/' /etc/vsftpd/vsftpd.conf
local_umask=022
connect_from_port_20=YES
use_localtime=YES
local_enable=YES
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/dir
listen=YES
pam_service_name=vsftpd.pam
userlist_enable=YES
tcp_wrappers=YES
userlist_enable=YES
allow_writeable_chroot=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
xferlog_file=/var/log/vsftpd.log
xferlog_enable=YES
pasv_enable=YES
pasv_min_port=10030
pasv_max_port=10035
iptables
默认策略
iptables
的 filter
表 INPUT
链,默认策略设置为 DROP
。
FTP 规则
设置 开放TCP TCP:21
端口, TCP:10030 - 10035
端口 (自定义端口)。
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 10030:10035 -j ACCEPT
加载内核模块
/usr/sbin/modprobe ip_conntrack_ftp
/usr/sbin/modprobe ip_nat_ftp
验证
# 连接服务器
ftp 1.1.1.1
Connected to 1.1.1.1.
220 (vsFTPd 3.0.2)
# 输入帐号&密码
Name (1.1.1.1:root): support
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
# 使用被动模式
ftp> passive
Passive mode on.
# 当前目录(命令通道)
ftp> dir
227 Entering Passive Mode (1,1,1,1,39,51).
150 Here comes the directory listing.
-rw-r--r-- 1 1002 1002 1673 Jun 19 16:41 anaconda-ks.cfg
226 Directory send OK.
# 上传文件(数据通道)
ftp> put abc.txt
local: abc.txt remote: abc.txt
227 Entering Passive Mode (1,1,1,1,39,51).
150 Ok to send data.
226 Transfer complete.
# 验证上传文件
ftp> dir
227 Entering Passive Mode (1,1,1,1,39,50).
150 Here comes the directory listing.
-rw-r--r-- 1 1002 1002 0 Jun 20 16:24 abc.txt
-rw-r--r-- 1 1002 1002 1673 Jun 19 16:41 anaconda-ks.cfg
226 Directory send OK.
# 关闭连接
ftp> quit
221 Goodbye.
小结
上述就是FTP
被动模式设置防火墙规则,如需要更多关于 FTP主动模式和被动模式的区别,有心人讲解的非常详细,请参考这里。