如何在命令行上停止对特定 IP 地址的 telnet 访问?
答案1
比以下更通用的解决方案劳伦蒂乌·罗斯库的方法是使用 iptables,它在每个发行版中的工作原理都是相同的,并且基本上与安装哪个软件无关。
# iptables -A INPUT -p tcp -s <ip_address> --dport telnet -j DROP
您可以选择使用-j REJECT
而不是-j DROP
.使用 REJECT 将告诉另一端的任何人该特定端口上没有任何内容;使用 DROP 将丢弃数据包,这会导致在远程主机的连接超时间隔过后连接尝试超时。
您可能需要在任何可能已存在的“接受”规则之前插入该规则。如果是这样,我喜欢这样做:
# iptables -L INPUT --line-number
<some or lots of output>
# iptables -I INPUT <number of telnet accept rule> ...
其中是上面命令中以后的...
所有内容。-p tcp
本质上,-I INPUT n
替换-A INPUT
. (-I 在位置之前插入n, -A 是附加。)
您可以使用,--dport telnet
因为telnet
在 /etc/services 中列出。grep telnet /etc/services
如果你好奇的话就试试吧。如果不是,您必须使用数字端口号,即23
。
您可能需要使用类似的方法iptables-save
来在重新启动后保留规则。有关详细信息将取决于您的发行版和设置,因此无法一概而论。如果您指定您的发行版和版本,有人可能能够提供相关的具体见解(或者作为一个单独的问题“如何在发行版 X 版本 Y 中重新启动时保留 iptables 规则?”可能会更好)。
那就是说,我同意这一点应该使用 SSH 来代替。但您可能仍然希望阻止来自某些 IP 的访问,并且可以执行的级别越低,堆栈的较高级别部分中出现错误导致妥协或拒绝服务的风险就越小。
答案2
在 /etc/host.deny 中添加:
telnet: <ip_addres>
但你应该使用 ssh 来代替。