dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2168
  • 铜币13301枚
  • 威望5857点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:193回复:1

如何设置 vsftpd 的 iptables 防火墙规则?

楼主#
更多 发布于:2018-08-28 10:38
目标
设置 FTP 服务器上的 iptables 规则,允许使用 '被动模式' 访问 FTP 服务。

环境
1. 拓扑
FTP 服务器,开启了 Iptables 防火墙。
Client --> Server { Firewall -> FTP Deamon }

2. 版本
CentOS 7.5 amd64
iptables v1.4.21
vsftpd 3.0.2

FTP 基础
FTP 只通过TCP连接,FTP不同于其它服务的是它使用了两个端口,一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

1. 运行模式
使用被动模式(passive mode),命令端口 TCP:21,数据端口 TCP:10030 - 10035 (可自定义)。

# 关于 FTP主动模式和被动模式的区别
已经有有心人讲解的非常详细,请参考这里

2. FTP 配置文件
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 规则

1. 默认策略
iptable ,filter 表 INPUT 链,默认策略设置为 DROP

2. 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


3. 加载内核模块
/usr/sbin/modprobe ip_conntrack_ftp
/usr/sbin/modprobe ip_nat_ftp


验证
1. 链接服务器
ftp 1.1.1.1
Connected to 1.1.1.1.
220 (vsFTPd 3.0.2)

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.

3. 使用被动模式
ftp> passive
Passive mode on.

4. 当前目录(命令通道)
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.

5. 上传文件(数据通道)
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.

6. 验证上传文件
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.

7. 关闭连接
ftp> quit
221 Goodbye.

参考
iptables 中配置vsftp的访问
FTP主动模式和被动模式的区别
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2168
  • 铜币13301枚
  • 威望5857点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2018-08-28 10:46
扩展: tcpdupm 抓取 FTP交互通信数据,注意是最后的数据端口。
http://zongming.net/read-225#1380
游客

返回顶部