我正在尝试在 Centos 7 上安装 vsftpd。我可以从本地主机连接到服务器,但不能从远程机器连接到它。我对系统和网络管理这个话题还不太熟悉。
以下是我寻找答案的一些地方:
无法通过firewalld打开ftp端口
添加规则后 Centos 不会打开端口
端口 80 已过滤 nmap
我已经启动并运行 vsftpd 服务:
> netstat -plnt | grep ':21. '
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 12393/vsftpd
我可以使用 正常登录ftp localhost
。但是当我尝试远程登录时,几秒钟后出现“连接超时”提示。所以我怀疑是防火墙的问题。
(另外,来自vsftpd 服务的 FTP 端口已关闭
lsof -i:21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 12393 root 3u IPv4 63746670 0t0 TCP *:ftp (LISTEN)
)
因为这是 Centos,所以我使用防火墙。端口 21出现开放:
> firewall-cmd --list-services
dhcpv6-client ftp https ssh
和:
> firewall-cmd --list-ports
433/tcp 21/tcp 80/tcp 20/tcp
还:
> firewall-cmd --get-default-zone
public
> firewall-cmd --get-active-zone
public
interfaces: enp0s25
我已经通过以下方式重新加载了firewalldfirewall-cmd --reload
但是如果我从远程机器尝试 nmap,它会声称端口 20 和 21 已被过滤:
> nmap -p20,21 my.ftp.server.com
Starting Nmap 6.40 ( http://nmap.org ) at 2017-03-27 13:48 PDT
Nmap scan report for rrcs-xx-xx-xx-xx
(xx.xx.xx.xx)
Host is up (0.035s latency).
PORT STATE SERVICE
20/tcp filtered ftp-data
21/tcp filtered ftp
我甚至跟踪了所有的 iptables 规则,遵循了firewalld 的各种链,发现了这些:
> iptables -S IN_public_allow
-N IN_public_allow
-A IN_public_allow -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW -j ACCEPT
iptables -S
如果有人认为这会有帮助,我很乐意发布整个输出。
最后,我关闭了 SELinux 足够长的时间来确定关闭和打开 SELinux 时得到的行为是相同的。
我的问题是:
是否有其他机器可能在端口 21 流量到达我的机器之前对其进行过滤?(这台机器上还有一个我可以正常连接的 Web 服务器)。如果是这样,我该如何确定呢?
我可以检查其他什么东西来调试这个问题吗?
非常感谢任何帮助。
答案1
nmap“过滤”本身并不意味着您的 FTP 访问被阻止——可能只是意味着中间防火墙检测到您正在运行 nmap 扫描和探测并丢弃了数据包。这是一个非常常见的“功能”。不幸的是,在防火墙开始丢弃您的 ftp 数据包后,您必须等待一段时间才能清除状态,以便您可以合法地尝试登录。
除此之外,除了firewalld和iptables之外,还有其他用户/端口控制服务可能会产生干扰。其中一个是/etc/hosts.allow或/etc/hosts.deny,它通过tcp_wrappers提供
尝试在您的 hosts.allow 文件中添加一行内容:
ALL : YOUR_IP_ADDRESS_HERE : allow
这表示“所有端口”:IP:允许访问。
另一个问题是,您是否可以通过服务器的外部接口而不是本地主机环回别名登录。 ftp MY_IP
即使关闭“监听”,通常也允许本地主机登录,例如 /etc/vsftpd.conf
LISTEN=NO
# 这是在你的 vsftpd.conf 文件中吗?
这是因为它实际上并没有“监听”外部 ipv4 或 ipv6 接口。
另外,请检查您的/etc/services
文件,以下几行是否被注释掉了?
services:ftp-data 20/tcp
services:ftp-data 20/udp
关于 iptables,如果你担心规则会干扰,只需刷新它们:
iptables -F
所以我认为操作/检查的顺序是这样的:
- 尝试从服务器 ftp 到外部 IP
- 如果连接失败,请检查
netstat -al
,并检查您的 /etc/vsftp.conf、/etc/services、/etc/hosts.allow——再试一次。
如果好的,那么中间或基于源的数据包过滤就是您的敌人 3. 如果失败,请刷新 iptables,然后重试 4. 如果仍然失败,则仍有其他问题阻止您通过本地服务器登录。
如果在第 2 点,您可以登录,您仍然需要尝试刷新 iptables 并检查系统日志中的错误消息。对于失败的 tcp_wrappers 传入连接,它通常会说“连接从源断开...”。
还要在 vsftpd.conf 中查找这些行
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
如果您无法缩小服务器上的连接范围,那么是时候开始traceroute MY_SERVER_IP
从主机或traceroute MY_CLIENT_IP
服务器查看到服务器的路由了。此命令也可以tracepath
。我会说它相当不太可能托管设施中靠近服务器的防火墙会阻止您的连接。如果是企业环境,这种情况很有可能发生,甚至很有可能发生,但如果您的服务器所在的环境是托管设施或教育机构,则在路由器上阻止 FTP 端口的情况就少见得多。对于 Comcast 等客户 ISP 来说,这种情况也并不常见。
远程机器距离有多远?例如,有多少个网络跳数?如果您与服务器位于同一子网,那么显然这是服务器配置的问题。