![hosts.deny 行太长或文件太大?](https://linux22.com/image/802702/hosts.deny%20%E8%A1%8C%E5%A4%AA%E9%95%BF%E6%88%96%E6%96%87%E4%BB%B6%E5%A4%AA%E5%A4%A7%EF%BC%9F.png)
我在 hosts.deny 文件中拒绝了大约 50k 个 IP 地址,该文件由每行最多 7 个地址的脚本生成,并出现此错误:
warning: /etc/hosts.deny, line 4429: missing newline or line too long
第 4429 行是这里中间的行:
ALL: 96.47.225.95, 96.47.225.96, 96.47.225.97, 96.47.225.98, 96.47.225.99, 96.56.113.123, 96.8.112.149
ALL: 98.126.161.178, 98.15.206.118, 98.159.4.16, 98.197.212.67, 98.83.135.94, 98.94.6.213, 98.94.6.78
ALL: 99.167.89.146, 99.177.96.73, 99.235.84.25, 99.244.9.103, 99.49.94.70
怎么了?
更新:
仅当建立连接时,hosts.deny 文件同时被写入时,才会出现警告。(i/o、lock、fopen 写入、fopen 读取问题)。
答案1
在我看来,拥有这么大的“/etc/hosts.deny”文件是没有意义的,原因如下:
- 僵尸网络活动可能来自潜在的合法来源 IP 地址,并且永久阻止 IP 通常是没有意义的,因为它可能只是具有动态地址的受感染家用计算机的临时公共 IP。
- 有更好的工具可以完成这项工作,例如
denyhosts
,,等...它们可以提供一些保护以免受邪恶之人的fail2ban
侵害psad
,而不会落入上一节提到的陷阱。
现在,如果您确实需要维护这样的文件,您可以尝试使用文件,如hosts_access(5)
手册页中的以下PATTERNS
部分所述:
图案
The access control language implements the following patterns: · A string that begins with a `/´ character is treated as a file name. A host name or address is matched if it matches any host name or address pattern listed in the named file. The file format is zero or more lines with zero or more host name or address patterns separated by whitespace. A file name pattern can be used anywhere a host name or address pattern can be used.
我尝试了一下并生成了一个列表:
# echo 123.{1..255}.{1..255}.{1..254} > /etc/list
将其添加到/etc/hosts.deny
文件中:
# echo 'ALL: /etc/list' >> /etc/hosts.deny
尝试了一些连接并检查了我的日志。我无法重现您提到的警告。