我最近安装了两台 Ubuntu Server 机器,我想找到机器中的开放端口。
当我nmap
从我的机器(Ubuntu 11.10)运行时,我观察到两个服务器都有
135/tcp filtered msrpc
4444/tcp filtered krb524
4662/tcp filtered edonkey
5000/tcp filtered upnp
5631/tcp filtered pcanywheredata
我从来没打开过这些端口。我只安装了 LAMP 和 SAMBA。为什么这些端口是打开的?
开放端口的完整列表如下:
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
135/tcp filtered msrpc
139/tcp open netbios-ssn
143/tcp open imap
445/tcp open microsoft-ds
993/tcp open imaps
995/tcp open pop3s
4444/tcp filtered krb524
4662/tcp filtered edonkey
5000/tcp filtered upnp
5631/tcp filtered pcanywheredata
问题是为什么这些端口是开放的:135/tcp filtered msrpc
,,4444/tcp filtered krb524
。4662/tcp filtered edonkey
,5000/tcp filtered upnp
。5631/tcp filtered pcanywheredata
我从来没有打开过这些端口。我只安装了 LAMP 和 SAMBA。
该列表看起来安全吗?
答案1
您可以从名为 /etc/services 的文件中获取端口列表
cat /etc/services | grep 137 (example)
例子
Samba 需要打开哪些端口才能进行通信
netbios-ns - 137 # NETBIOS Name Service
netbios-dgm - 138 # NETBIOS Datagram Service
netbios-ssn - 139 # NETBIOS session service
microsoft-ds - 445 # if you are using Active Directory
运行此命令
netstat -anltp | grep "LISTEN"
运行 FTP、SSH 和 MySQL 的典型 Web 服务器将有如下输出:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 21432/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4090/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7213/sshd
tcp6 0 0 :::21 :::* LISTEN 19023/proftpd
tcp6 0 0 :::22 :::* LISTEN 7234/sshd
答案2
您的问题比较宽泛,“安全”是相对的。
当您安装服务器并打开端口时,总会存在潜在的漏洞。
当您安装服务器(ssh、samba)并启动服务器(它们通常在您启动时默认启动)时,您会打开一个端口。
对于每个服务器(ssh、samba、http),您都可以更改配置来提高安全性。
对于 ssh,这可能包括使用密钥(和禁用密码)、tcpwrapper、防火墙等。
使用防火墙时有 3 大策略
1) 允许所有 IP 并将行为不当的 IP 列入黑名单。例如 http。通常,您将 http 作为公共服务器运行,允许所有 IP,并将向您的服务器发送垃圾邮件的人列入黑名单。
2) 拒绝所有并允许白名单。例如 ssh。
3) 限制。有时您会限制连接速率或每秒的 ping 次数。
希望这能让你开始,你可能想看看
https://help.ubuntu.com/11.10/serverguide/C/index.html
https://help.ubuntu.com/community/Security
或者询问有关特定服务器的特定问题。
答案3
“过滤”并不一定等同于目标主机上的开放端口。
事实上,它可能根本没有任何意义。
例如,如果您运行的位置和目标之间存在防火墙nmap
,并且该防火墙正在主动过滤端口 5000,那么 5000 将在您的列表中显示为“已过滤”,而目标主机永远不会看到任何到该端口的流量 - 因此目标上的端口是否打开变得完全无关紧要。
要获得服务器上开放端口的明确列表,请尝试:
sudo netstat -lnp --tcp --udp
-l : only show listening ports
-n : don't bother looking up DNS hostnames
-p : show which processes have the port open
--tcp : show tcp ports
--udp : show udp ports
您可以省略--tcp
,--udp
但您会得到大量不相关的本地文件系统套接字信息,这些信息无法通过网络访问。
sudo
是-p
正常工作所必需的,否则它只会打印-
不属于您的用户的任何进程。
答案4
由于netstat
不再默认安装,与相反lsof
,我想我可以添加一个开箱即用的选项:
sudo lsof -nP -iTCP -sTCP:LISTEN