如何“关闭”打开的端口?


22

几天前,我开始非常在意我的数据安全性,最终我陷入了nmap困境:nmap 127.0.0.1

惊喜,惊喜,我有很多活动服务监听localhost:

$ 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

我唯一可以使用的是ssh(尽管可能配置不正确,但我将把这个问题留给另一个问题)。

据我所知ipp,CUPS使用协议共享我的打印机,我不需要共享它们,只需从服务器访问打印机即可。

这是netstat -lntuproot用户的输出,删除了localhost地址:

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

如何配置这些服务,以使它们仅在我实际使用它们时才听外界的声音?


您想如何告诉您您正在使用它们?
Reactormonk 2013年

我自己启动服务(具有用户特权和父Shell)
RSFalcon7

2
正确,如果您仅从本地系统使用CUPS,也可以让它仅侦听本地主机(127.0.0.1)上的端口631。我将使用计算机具有的实际IP重新运行nmap,而不仅仅是127.0.0.1。
slm

1
更好的命令是netstat -lntup-l = listen -n = number -t = tcp -u = udp -p = pid。显示您正在运行的进程以及正在暴露的端口。互联网无法访问对127.0.0.1开放的任何内容。
frogstarr78

1
如果你没有需要桑巴,只需卸载它。如果确实需要,可以eth0通过添加smb.conf两个指令bind interfaces only = yes和将其限制为本地接口(例如?)interfaces = eth0
LSerni 2013年

Answers:


26

确定您的曝光

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

   ss的sysv-rc-conf

禁用不需要的其余部分

现在,Samba不在了,我们还有以下内容:

  • avahi守护程序
    • zeroconf(即插即用)的一部分,将其关闭
  • rpcbind
    • NFS需要-将其关闭
  • rpc.statd
    • NFS需要-将其关闭

对于其余3个,您也可以执行与Samba相同的操作以将其关闭。

CUPS?

要关闭CUPS(实际上并不需要),您可以遵循以下步骤:关闭服务,然后禁用该服务。为了能够打印,您需要在系统上分别设置每台打印机。您可以通过system-config-printerGUI进行操作。

使这些服务随需应变?

这确实是您问题的核心,但实际上并没有灵丹妙药的解决方案来使这些服务“变得智能”,以使它们在使用时而不是一直运行。

#1-Systemd vs.暴发户

其中一部分是systemdupstart之间的当前分配。有2项相互竞争的技术的一个很好的概述这里

两种技术都试图做些稍有不同的事情,IMO,考虑到它们的功能集,systemd似乎更适合服务器,而新贵似乎更适合桌面。随着时间的流逝,IMO将逐渐解决此问题,并且两种服务都将稳定并具有丰富的功能。

最终,这两种服务将按需提供其管理的所有服务的全程启动和停止。例如,StopWhenUnneeded=yes已经存在systemd诸如此类的功能,因此充实这些功能只是时间问题。

#2-服务支持

某些服务根本不支持很好地停止/启动。诸如此类的服务sshd似乎无法按需运行,特别是在使用频繁的情况下。同样,某些服务(例如Apache)在其内部提供了一些机制,可以启动或多或少地管理自己的监听器。因此,目前尚不清楚这些类型的服务如何按需提供systemd或如何upstart与这些类型的服务集成。

这真的有必要吗?

双方都会听到这样的说法是过大的,或者您应该只采用极简主义者的方法来安装您绝对需要的东西,但这实际上是个人选择。了解这些服务的存在以及它们的作用确实很重要。归根结底,计算机是一种工具,通过使用Unix系统,您已经说过,您愿意偷偷摸摸看一下,并理解是什么使您的计算机出现故障。

我想说的是,这种类型的提问恰恰是在处理计算机和Unix时应该努力争取的一种心态。

参考文献


2
@ RSFalcon7-不用客气!谢谢你的问题!
slm

12

127.0.0.1不是“外部世界”,它正在房屋内部四处张望。

检查您的防火墙配置(今天在Linux中为iptables),大多数不应从ouside访问。

不要运行不需要的服务。卸载所有不需要的软件。

更改密码以使其更安全。检查系统的使用情况,不要随意追踪任何有趣的网站。检查浏览器的反网页仿冒,反脚本等配置。修改SSH和su / sudo的用法。

但最重要的是,过度的妄想症会适得其反。不要被技术闪光所困住。


3
我同意“不要运行您不需要的服务”。但是,“认真卸载所有不需要的软件。”,认真吗?那有什么帮助呢?
Hauke Laging,

6
俗话说,@ HaukeLaging,“老鼠在未使用的衣服堆里窝”。任何软件都可能具有可能被利用的漏洞。如果程序不存在,则该风险不存在。如果不使用,成本可以忽略不计。此外,更简单的系统更易于监督和保持整洁。
vonbrand

感谢提醒,外面不是127.0.0.1 。我完全订阅不运行不需要的服务,但是卸载有点过头了,如果它们在某些时候有用,那么它们是有用的
RSFalcon7 2013年

2
@ RSFalcon7,如果他们有用的(或者是为别人有用,他们在后所有的分布)没有consecuence的。如果您不使用它,请卡住它。减少磁盘使用,减少更新,总体风险降低。如果以后需要,请重新安装。
vonbrand

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 /电子邮件中添加评论,我会与您联系:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.