跳转至

如何设置 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

默认策略

iptablesfilterINPUT链,默认策略设置为 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主动模式和被动模式的区别,有心人讲解的非常详细,请参考这里

参考

回到页面顶部