是否有记录 FTP 传输的地方?

是否有记录 FTP 传输的地方?

好吧,假设我负责旧应用程序,我不太了解其详细信息,我正在尝试保护我的服务器,有人建议禁止用于 FTP 的 21 端口。

但我不确定哪些程序正在运行并每天使用 FTP。

假设我没有解决方案来在服务器或网络上安装我想要的工具。我的解决方案是什么?

  • 我应该切断 21 端口并查看防火墙阻止了哪些传输吗?
  • AIX 服务器上是否有一个地方我应该去查看通过此端口访问和正在访问的服务器的列表?如果我有服务器的 IP 和文件名,我将能够跟踪执行此操作的程序。那么FTP有日志文件吗?

编辑:

A)inetd是活跃的并且ftp在其中(感谢@JeffSchaller)

b) 我想知道传入外向的该端口上的流量 - 以及执行的命令(如果可能)。换句话说,我的目标是知道

  • 在本地FTP服务器上执行了哪些命令
  • 本地FTP客户端向其他服务器执行了哪些命令

欢迎任何建议。

答案1

在本地FTP服务器上执行了哪些命令?

要在 AIX 系统上启用 FTP 日志记录,您需要重新配置 FTP(在您的情况下由 inetd 调用)以将调试日志发送到 syslog 并配置 syslog 以将这些日志保存到文件中。

  1. 编辑/etc/inetd.conf并添加-d到 ftpd 行的末尾:

    ftp     stream  tcp6    nowait  root    /usr/sbin/ftpd  ftpd -d
    
  2. 刷新 inetd:refresh -s inetd

  3. 编辑/etc/syslog.conf并添加一行以daemon.debug将日志保存在某处:

    daemon.debug /var/log/ftp.log
    
  4. 创建一个文件供 syslog 写入:touch /var/log/ftp.log

  5. 刷新系统日志:refresh -s syslogd

Syslog 会将任何守护程序的日志发送到此文件,因此您需要使用 来过滤它grep,也许:grep 'daemon:debug ftpd' /var/log/ftp.log

通过 FTP 发送的命令将使用字符串记录command:;这是一个示例:

May 18 10:13:35 ftpserver daemon:debug ftpd[3932700]: command: USER username-here^M
May 18 10:13:35 ftpserver daemon:debug ftpd[3932700]: <--- 331
May 18 10:13:35 ftpserver daemon:debug ftpd[3932700]: Password required for username-here.
May 18 10:13:42 ftpserver daemon:debug ftpd[3932700]: command: PASS
May 18 10:13:42 ftpserver daemon:debug ftpd[3932700]: <--- 230-
May 18 10:13:42 ftpserver daemon:debug ftpd[3932700]: Last login: Fri May 18 10:13:02 EDT 2018 on ftp from ftpclient.example.com
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: <--- 230
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: User username-here logged in.
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: command: PORT 10,1,1,1,229,54^M
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: <--- 200
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: PORT command successful.
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: command: LIST^M
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: <--- 150
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: Opening data connection for /bin/ls.
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: <--- 226
May 18 10:13:43 ftpserver daemon:debug ftpd[3932700]: Transfer complete.

是的,那些 Control-M 就这样出现在日志中!


本地FTP客户端对其他服务器执行了哪些命令?

由于应用程序可以执行自己的 FTP 操作,因此很难包装每个可能的客户端程序(例如/usr/bin/ftp)来捕获此操作。最好的办法是配置远程 FTP 服务器来记录命令,就像我们上面所做的那样。第二好的方法是将 AIX 防火墙配置为允许并记录发往端口 21 的流量。

确保您已安装 ipsec 文件集:

lslpp -L bos.net.ipsec.rte; echo $?

它应该显示列出的文件集,返回代码为 0,而不是:

lslpp: 0504-132  Fileset bos.net.ipsec.rte not installed.

确保 ipsec 设备已启用:

lsdev -l ipsec_v4

您应该收到一行回复说“可用”,而不是“定义”或根本没有回复。

如果没有输出或设备已“定义”:

  1. 跑步smitty ipsec4
  2. 选择Start/Stop IP Security
  3. 选择Start IP Security
  4. 保留默认值Now and After RebootDeny All Non_Secure = no
  5. 按 Enter 键。

ipsec device_v4 现在应显示为“可用”。

使用以下命令创建日志文件:touch /var/log/ipsec.log.

更新系统日志:

echo "local4.debug /var/log/ipsec.log rotate size 100k files 4" >> /etc/syslog.conf
refresh -s syslogd

添加规则以允许并记录发往端口 21 的流量:

# -v 4 == IPv4
# -n 2 == add this after the first rule
# -a P == permit
# -O eq == destination port *equals* 21
# -P 21 == destination port 21
# -w O == outbound connections; change this to “B” to log in both directions
# -c tcp == TCP protocol
# -s, -m, -d, -M = source/dest IP & mask (any)
# -l Y = Log it
# -r L = applies only to packets destined or originated from the local host
genfilt -v 4 -n 2 -a P -O eq -P 21 -w O -c tcp -s 0.0.0.0 -m 0.0.0.0 -d 0.0.0.0 -M 0.0.0.0  -l Y -r L -D “allow and log port 21 traffic”

开始记录:

mkfilt -g start

激活规则集:

mkfilt -u

等待出站 FTP 连接发生,然后:

grep ipsec_logd /var/log/ipsec.log | grep DP:21

您将看到出站 FTP 连接的源和目标 IP 以及时间戳,例如:

May 18 11:29:40 localhost local4:info ipsec_logd: #:0 R:p  O:10.1.1.1 S:10.1.1.1 D:10.2.2.2 P:tcp SP:55091 DP:21 R:l I:en0 F:n T:0 L:0

它不记录内容(命令)FTP 会话,但您将拥有时间戳和目的地。注意每一个每个 FTP 连接的数据包都会被记录!


参考:

答案2

如果您的服务器上安装了VSFTP,则可以使用以下命令查看完整日志:\

cat /var/log/vsftpd.log

相关内容