我在带有 Fail2Ban 的 Web 服务器上运行 pure-ftpd。Fail2Ban 允许 apache2 连接,但拒绝除本地主机之外的任何 FTP 连接。我尝试修改 jail.local 和 jail.conf 文件,但仍然遇到问题。
这是我的 jail.local 文件的 pure-ftpd 部分:
[pure-ftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = pure-ftpd
logpath = /var/log/auth.log
maxretry = 6
这是我的 iptables -L -n 的视图:
Chain INPUT (policy DROP)
target prot opt source destination
fail2ban-postfix tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443,25,587,110,995,143,993,4190
fail2ban-dovecot tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443,25,587,110,995,143,993,4190
fail2ban-roundcube tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443,25,587,110,995,143,993,4190
fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
fail2ban-pure-ftpd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 21,20,990,989
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:587
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-dovecot (1 references)
如果我手动运行以下命令,FTP 可以工作(作为主动,仍然无法使被动工作),但我真的希望它与 Fail2Ban 一起工作:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
关于如何让 fail2ban 正确配置 iptables 有什么想法吗?如果没有,我需要设置哪些规则才能使主动和被动 FTP 正常工作?
答案1
我在 /etc/default/iptables 中找到了默认的 IPTABLES 配置,并添加了以下内容,然后重新启动了 iptables 服务,并且 ftp 现在可以正常工作:
-A INPUT -p tcp --dport 20 -j ACCEPT
-A INPUT -p tcp --dport 21 -j ACCEPT
答案2
如何为 Pure-FTPd 设置被动端口(以及设置防火墙):
在此文件中设置最大并发 ftp 连接数:
/etc/pure-ftpd/conf/MaxClientsNumber
例如:
50
在此文件中设置所需的被动端口范围:
/etc/pure-ftpd/conf/PassivePortRange
例如:
42420 42520
提示:
- 输入两个以空格分隔的端口号。
- 打开两倍于您在 MaxClientsNumber 中设置的端口数,例如 MaxClientsNumber = 50 -> 打开 100 个被动端口。
- 端口必须处于空闲端口范围内(您的机器上尚未被其他服务使用,也未被任何其他标准服务使用)。
- 被动端口范围示例:29100-29200 或 32770-32870 或 42420-42520 或 51899-51999。查看标准 IP 端口的完整列表这里. 使用 检查您机器上使用的端口
sudo iptables -nvL
。
在防火墙中打开端口:
我可以建议使用联邦水务局除了 iptables 之外还有什么?这将使设置防火墙规则变得更加容易,并且还能使规则持久。
无论何时更改防火墙上的设置,都要注意不要将自己锁定在机器之外!如果您通过 ssh 连接,请检查端口 22/ssh 是否打开。
安装 UFW,拒绝任何传入流量(首先关闭所有内容,然后只打开所需的端口),打开端口 22/ssh,然后启动 UFW:
sudo apt-get install ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw enable
打开FTP端口:(请将42420:42520替换为您自己的端口。)
sudo ufw allow ftp sudo ufw allow proto tcp from any to any port 42420:42520
打开你的网络服务器的端口:
sudo ufw allow http sudo ufw allow https
打开邮件服务器的端口:(也许你不需要所有这些端口。有关好的建议,请参阅这里。
sudo ufw allow 25 sudo ufw allow 110 sudo ufw allow 143 sudo ufw allow 465 sudo ufw allow 587 sudo ufw allow 993 sudo ufw allow 995 sudo ufw allow 4190
最后检查您的设置并永久启用它们:
sudo ufw status verbose sudo ufw disable sudo ufw enable
最后一步:再次检查 UFW 安装是否处理了您之前的所有 iptables 规则 - 如果没有,则手动删除它们。
iptables -nvL --line numbers iptables -D INPUT X
将 X 替换为您从第一个命令的输出中读取的行号,然后对要删除的每个 iptables 规则重复(两个命令!)。
特别再次检查 IPUT 链上的此 iptables 规则(如上面的数据所示),使用选项“-v”
sudo iptables -nvL
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
如果您看到此行中显示“lo”的列,则一切正常,无需在此处执行任何操作。如果此行中没有“lo”,则可能意味着您的防火墙将接受所有端口上的所有流量(就像您根本没有防火墙一样),因此应将其删除。
现在您应该拥有 Pure-FTPd 接受被动端口和 UFW 设置,以便轻松处理防火墙管理。