我在关闭港口时有疑问,我想我有一些奇怪的事情。
当我使用执行
nmap --top-ports 10 192.168.1.1
它表明23 / TCP端口已打开。
但是当我执行
nmap --top-ports 10 localhost
它表明23 / tcp端口已关闭。
其中哪一个是正确的?我想在整个系统上关闭此端口,该怎么办?
我在关闭港口时有疑问,我想我有一些奇怪的事情。
当我使用执行
nmap --top-ports 10 192.168.1.1
它表明23 / TCP端口已打开。
但是当我执行
nmap --top-ports 10 localhost
它表明23 / tcp端口已关闭。
其中哪一个是正确的?我想在整个系统上关闭此端口,该怎么办?
Answers:
Nmap是一个很棒的端口扫描程序,但是有时候您想要更权威的东西。您可以使用netstat
实用程序询问内核哪些进程打开了哪些端口:
我@我的主机:〜$ sudo netstat -tlnp 活动的Internet连接(仅服务器) Proto Recv-Q Send-Q本地地址外部地址状态PID /程序名称 tcp 0 0 127.0.0.1:53 0.0.0.0:*监听1004 / dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:*监听380 / sshd tcp 0 0 127.0.0.1:631 0.0.0.0:*听822 / cupsd tcp6 0 0 ::: 22 ::: *听380 / sshd tcp6 0 0 :: 1:631 ::: *听822 / cupsd
我给的选项是:
-t
仅TCP-l
仅侦听端口-n
不查找服务和主机名,仅显示数字-p
显示进程信息(需要root特权)在这种情况下,我们可以看到它sshd
正在侦听任何接口(0.0.0.0
)端口22,并且cupsd
正在侦听回送(127.0.0.1
)端口631。您的输出可能显示telnetd
本地地址为192.168.1.1:23
,这意味着它不会响应回送适配器上的连接(例如,您不能telnet 127.0.0.1
)。
还有其他工具可以显示类似的信息(例如lsof
或/proc
),但是netstat是使用最广泛的工具。它甚至可以在Windows(netstat -anb
)上运行。BSD netstat有所不同:您必须使用sockstat(1)来获取进程信息。
有了进程ID和程序名后,如果您想关闭端口,则可以继续查找进程并终止它。为了进行更细粒度的控制,可以使用防火墙(在Linux上为iptables)将访问权限限制为仅对某些地址进行访问。您可能需要禁用服务启动。如果PID在Linux上为“-”,则可能是一个内核进程(例如,这在NFS中很常见),所以很幸运找到它是什么。
注意:我说“具有权威性”是因为您不受网络状况和防火墙的限制。如果您信任自己的计算机,那就太好了。但是,如果您怀疑自己被黑客入侵,则可能无法信任计算机上的工具。在攻击者中,将标准实用程序(有时甚至是系统调用)替换为隐藏某些进程或端口(也称为Rootkit)的实用程序是一种标准做法。此时最好的选择是对磁盘进行取证复制并从备份中还原。然后使用副本确定他们进入的方式并关闭它。
Linux系统具有所谓的回送接口,用于内部通信。它的主机名是localhost
,其IP地址是127.0.0.1
。
在上运行nmap
时localhost
,实际上是在虚拟环回接口上运行portscan 。192.168.1.1
是您的物理(最可能是eth0
)接口的IP地址。
因此,您已经nmap
在两个不同的网络接口上运行,这就是为什么开放端口有所不同的原因。他们都是真的。
如果您打开了TCP端口23,则可能您telnet
正在运行服务器(由于缺少加密,这不是一件好事),或者您的计算机上装有某种特洛伊木马。
iptables
根据附近的答案建议添加一条规则,但这将使服务保持未使用状态,这会消耗资源。因此,如果您telnetd
正在跑步,请将其关闭。
要“关闭”您可以使用的端口 iptables
sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP
DROP
正如它所说的那样,它会看到数据包,然后将其忽略。正常情况下(未启用iptables),内核将发送回ICMP端口不可达的数据包(可以使用REJECT
target代替来模拟DROP
)。
REJECT
target通过写入来生成-j REJECT --reject-with tcp-reset
。
如果您有一个正在端口23上运行并监听的服务,那么停止(监听)监听端口23的进程(telnet
使其保持运行并关闭或阻塞端口23的使用)可能更干净iptables
。
当没有进程监听端口时,即使没有防火墙阻止,任何尝试连接到该端口的操作都应立即导致“连接被拒绝”(ECONNREFUSED
到connect(2)
)
找到侦听端口23的进程(及其pid)的一种方法(如果有)是:
sudo lsof -i -P | grep ':23 '
在上面的-i
列表中,打开Internet端口(UDP和TCP),并且-P禁止将端口转换为服务名称(通过/etc/services
)
找到正在监听端口23的正在运行的进程之后,可以通过查看进程树(带有pstree
)来弄清楚它是如何开始的。如果init
(非常可能)其父项,则可以在下递归搜索该进程的名称/etc
。例如:
sudo grep -r telnet /etc
这将引导您最好的方法来使其无法在第一位置运行。
sudo lsof -Pi :23
。
23
)匹配。如果不包括之后的一个空间:23
,它将匹配:234
,:2345
等等
lsof -Pi :23
)的命令正在寻找完全匹配的内容。
localhost
正在访问lo
(环回)接口。IP地址为accesing你真正的接口,可能eth0
或wlan0
或诸如此类。