我在 Scientific Linux 6 机器上安装了 LabView,并立即收到我们安全官员的消息,指出端口 3580 已打开并正在侦听,这是一个安全问题。显然,该端口用于Web监控和配置服务器并且无法关闭。虽然,也许我误解了事情,但如果不是:#%&!*#@
要查看监听端口,我输入
$ netstat -anp | grep 3580
> (Not all processes could be identified, non-owned process info
> will not be shown, you would have to be root to see it all.)
> tcp 0 0 0.0.0.0:3580 0.0.0.0:* LISTEN -
现在我尝试使用以下命令关闭端口iptables
:
$ iptables -A INPUT -p tcp --destination-port 3580 -j DROP
但是当我再次输入netstat
上面的命令时,我仍然看到打开的端口。当然我只是误解了iptables
它的工作原理。谁能告诉我我做错了什么?
答案1
netstat 向您显示某个东西(可能是 Labview)正在该端口上侦听。您的 iptables 线路将阻止来自计算机外部到达该端口的数据包,因此应该没有问题。程序正在监听,因此执行netstat时可以看到端口是打开的,但是数据包无法从外部到达,因此无法从外部访问该端口。如果您需要阻止来自计算机本身的数据包,这是可能的,但很可能会影响 LabView 的功能。
笔记:
有人仍然有可能检测到您的防火墙规则,因为我认为没有其他防火墙规则。
iptables -L -n -v
去看他们。您想根据其他规则使用 DROP 或 REJECT。如果数据包将被接受,请使用 REJECT,这将模拟没有程序正在侦听的端口。编辑:对于到 TCP 端口的连接有四种可能的结果:- 连接以 TCP SYN/ACK 数据包打开,如果有程序正在侦听该端口并且连接未被防火墙阻止,则会发生这种情况
- 连接被 TCP RST 数据包拒绝/重置,如果没有程序在端口上侦听或者防火墙返回 RST(iptables 使用 -j REJECT 执行此操作),就会发生这种情况
- 根本不返回数据包,如果数据包丢失或防火墙丢弃数据包(iptables 使用 -j DROP 执行此操作),就会发生这种情况
- 不返回 TCP 数据包,但防火墙可以返回 ICMP 数据包,这种情况不太常见。
因此,从机器外部,您的安全人员可以轻松检测到 TCP RST 和根本没有数据包之间的区别。如果除了一行之外没有防火墙,我建议使用
-j REJECT
而不是-j DROP
这样,这样与其他端口没有区别,并且他正在使用的网络扫描仪在测试端口时不会挂起几秒钟令人恼火的时间,而是使用一个立即的 RST 说“这个端口已关闭”,就像他对所有其他端口一样。对于连接互联网的服务器,我建议使用-j DROP
端口扫描,让坏人尽可能耗时,但你的情况似乎非常不同!您提供的 iptables 行将在重新启动后消失。您需要
/etc/sysconfig/iptables
手动修改或/sbin/service iptables save
在配置正确后执行。您的 iptables 行将阻止安全官员指示的数据包,但您应该调查配置,通过有状态配置,仅允许您需要的内容并禁止其他所有内容。 LabView 或其他程序可以完美地打开其他端口。对于这个简短的答案来说,这个主题有点太大了!
你已经知道它是Labview,但是看到你的netstat命令我想指出我更喜欢
lsof
(例如lsof -i :3580
,但它可能没有安装)来查看端口上正在侦听的内容。最重要的是,它会告诉您正在监听什么程序,然后您可以决定如何处理它。与 netstat 一样,您必须是 root 或使用 sudo 才能查看所有内容(您也必须是 root 才能执行 iptables,所以我认为这不是问题)。