几天前,我开始非常关心我的数据安全,最终我nmap
发现:nmap 127.0.0.1
惊讶,惊讶,我有很多活动服务监听本地主机:
$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
我唯一一个可能use is ssh
(虽然它可能配置得不好,我将把这个问题留到另一个问题)。
据我所知,ipp
CUPS 使用协议来共享我的打印机,我不需要共享它们,只需从服务器访问打印机即可。
netstat -lntup
这是root 用户的输出,删除了本地主机地址:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 497/sshd
tcp 0 0 0.0.0.0:17500 0.0.0.0:* LISTEN 2217/dropbox
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 892/smbd
tcp 0 0 0.0.0.0:50022 0.0.0.0:* LISTEN 1021/rpc.statd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 892/smbd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 906/rpcbind
tcp6 0 0 :::22 :::* LISTEN 497/sshd
tcp6 0 0 :::42712 :::* LISTEN 1021/rpc.statd
tcp6 0 0 :::445 :::* LISTEN 892/smbd
tcp6 0 0 :::139 :::* LISTEN 892/smbd
tcp6 0 0 :::111 :::* LISTEN 906/rpcbind
udp 0 0 0.0.0.0:51566 0.0.0.0:* 615/avahi-daemon: r
udp 0 0 0.0.0.0:68 0.0.0.0:* 7362/dhclient
udp 0 0 0.0.0.0:111 0.0.0.0:* 906/rpcbind
udp 0 0 192.168.1.255:137 0.0.0.0:* 1782/nmbd
udp 0 0 192.168.1.67:137 0.0.0.0:* 1782/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 1782/nmbd
udp 0 0 192.168.1.255:138 0.0.0.0:* 1782/nmbd
udp 0 0 192.168.1.67:138 0.0.0.0:* 1782/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 1782/nmbd
udp 0 0 0.0.0.0:655 0.0.0.0:* 906/rpcbind
udp 0 0 0.0.0.0:17500 0.0.0.0:* 2217/dropbox
udp 0 0 0.0.0.0:5353 0.0.0.0:* 615/avahi-daemon: r
udp 0 0 0.0.0.0:34805 0.0.0.0:* 1021/rpc.statd
udp6 0 0 :::40192 :::* 1021/rpc.statd
udp6 0 0 :::111 :::* 906/rpcbind
udp6 0 0 :::655 :::* 906/rpcbind
udp6 0 0 :::5353 :::* 615/avahi-daemon: r
udp6 0 0 :::42629 :::* 615/avahi-daemon: r
我如何配置这些服务,以便它们只在我实际使用它们时监听外界的声音?
答案1
确定您的曝光度
从命令的输出来看netstat
,看起来很多服务实际上是一个非常短的列表:
$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd
了解情况
看看这个列表,有几项服务我不想管。
- dhclient
- 负责获取你的IP地址的DHCP服务器守护进程,必须有这个。
- 保管箱
- 显然 Dropbox,必须有
开始减少它 - 禁用 Samba
您可能可以立即禁用 Samba,它占上述服务中的 2 个,nmbd
并且smbd
.值得怀疑的是,您是否真的需要在笔记本电脑上运行它,无论是在本地主机还是面向网络的 IP 上。
要检查它们是否正在运行,您可以使用以下命令status
:
$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423
关闭服务可能会混淆新贵、/etc/rc.d、业务的所有变化,因此可能很难弄清楚哪个服务采用哪种技术。对于 Samba,您可以使用以下service
命令:
$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting
现在他们走了:
$ status nmbd
nmbd stop/waiting
$ status smbd
smbd stop/waiting
让它们远离......永久
为了让他们远离我,我一直在使用这个工具,sysv-rc-conf
从控制台管理服务,它比大多数工具工作得更好。它允许您检查要运行哪些服务以及应在哪个运行级别启动/停止它们:
$ sudo apt-get install sysv-rc-conf
禁用其余不需要的内容
现在 Samba 关闭了,我们剩下以下内容:
- avahi 守护进程
- Zeroconf(即插即用)的一部分,将其关闭
- rpc绑定
- NFS 需要 - 将其关闭
- rpc.statd
- NFS 需要 - 将其关闭
对于剩下的 3 个,您也可以执行与 Samba 相同的操作来将其关闭。
杯?
要关闭 CUPS(顺便说一句,您实际上并不需要 CUPS),您可以按照相同的步骤关闭该服务,然后禁用它启动。为了能够打印,您需要在系统上单独设置每台打印机。您可以通过system-config-printer
GUI 来执行此操作。
按需提供这些服务?
这确实是您问题的核心,但实际上并没有一个灵丹妙药的解决方案可以使这些服务变得“智能”,以便它们在使用时运行,而不是一直运行。
#1 - systemd 与新贵部分原因是目前的分裂系统和暴发户。对两种竞争技术有很好的概述这里。
在我看来,两种技术都试图做一些略有不同的事情,考虑到它们的功能集,systemd 似乎更适合服务器,而 upstart 似乎更适合桌面卷。随着时间的推移,这会自行解决,IMO,并且这两项服务都将稳定且功能丰富。
最终,这两项服务都将为它们管理的所有服务提供全面的按需启动和停止服务。例如,诸如此类的功能StopWhenUnneeded=yes
已经存在systemd
,因此这些功能的充实只是时间问题。
有些服务根本不支持停止/启动。诸如此类的服务sshd
按需运行似乎没有什么意义,尤其是在大量使用它们的情况下。此外,一些服务(例如 Apache)在其内部提供了机制,以启动或多或少的监听器来管理自身。因此,目前还不清楚这些类型的服务如何提供按需服务systemd
或upstart
将如何与这些服务集成。
这真的有必要吗?
您会听到双方都说这太过分了,或者您应该采取极简主义的方法,只安装您绝对需要的东西,但这确实是个人选择。了解这些服务的存在以及它们的作用确实很重要。归根结底,计算机只是一种工具,通过使用 Unix 系统,您就已经表明您愿意窥探幕后并了解计算机的运作方式。
我想说,这种类型的质疑正是人们在处理计算机和 Unix 时应该努力追求的心态。
参考
答案2
答案3
虽然您可以“关闭”个别服务 - 也许设置防火墙可能更容易。几乎所有常见发行版(Ubuntu、Debian、Centos 等)都内置了对 iptables 的支持。
一个简单的入门规则集:(您只需在命令提示符下输入这些规则;要使它们永久存在,请将它们添加到您的启动脚本中或告诉我们您正在使用什么发行版。例如在 Centos 上:system-config -firewall 是一个很好的用于配置 iptables 规则的 UI)
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP
基本上 - 允许 ssh 入站;放下其他一切。
您的 INPUT 链现在如下所示:
- 如果数据包通过“ssh”进入我的计算机 - 允许它
- 如果数据包不符合任何先前的规则 - 只需将其丢弃即可。
然后稍后,假设您想要允许“samba”(Windows 文件共享):您可以运行
iptables -I INPUT-p tcp --dport 465 -j ACCEPT
-I
列表的前置和规则;-A
附加一条规则。所以你的链现在看起来像这样:
- 如果“samba”数据包进入我的计算机 - 允许它
- 如果数据包通过“ssh”进入我的计算机 - 允许它
- 如果数据包不符合任何先前的规则 - 只需将其丢弃即可。
该INPUT
链指的是发往您系统的数据包。其他链OUTPUT
用于来自您的计算机的数据包,进入互联网以及FORWARD
通过您的计算机路由的数据包(即“传输”您的计算机的数据包,例如机场的中转区域 - 不是INPUT
因为它没有进入您的计算机的东西)。
作为临别说明:nmap'ing 127.0.0.1 不是很有用;许多服务只能从 127.0.0.1 访问,而不能从其他地址访问。如果您没有另一台可以运行 nmap 的机器 - 尝试使用 Gibson Research 的 Shields UP! (https://www.grc.com/shieldsup) - 这是一个免费的在线 nmap-lite。或者添加您的 IP/电子邮件的评论,我将 nmap 您:)