将 netstat 结果中的所有端口放入 iptables 中是否是一种好的做法

将 netstat 结果中的所有端口放入 iptables 中是否是一种好的做法

我正在配置防火墙,有几次我发现它阻止了所需的服务或端口,例如 dns 或 https 等,执行 netstat -nat | grep LISTEN 是否安全,然后无论那里的端口是什么,都以这种格式将它们放入 iptables 中:

   -A INPUT -p 67 -j ACCEPT

编辑: 下面是使用 p 选项的 netstat 结果:

tcp        0      0 127.0.0.1:10001             0.0.0.0:*                   LISTEN      9521/sw-cp-                         serverd
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      2729/vsftpd                         
tcp        0      0 SERVERIP:53                 0.0.0.0:*                   LISTEN      1399/named                          
tcp        0      0 SERVERIP2:53                0.0.0.0:*                   LISTEN      1399/named                          
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      1399/named                          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1527/sshd                           
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      1399/named                          
tcp        0      0 0.0.0.0:12443               0.0.0.0:*                   LISTEN      9521/sw-cp-                         serverd
tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      1802/mysqld                         
tcp        0      0 :::110                      :::*                        LISTEN      1570/courie                         rtcpd
tcp        0      0 :::143                      :::*                        LISTEN      1552/courie                         rtcpd
tcp        0      0 :::80                       :::*                        LISTEN      4865/httpd                          
tcp        0      0 :::8880                     :::*                        LISTEN      9521/sw-cp-                         serverd
tcp        0      0 :::465                      :::*                        LISTEN      30122/xinet                         d
tcp        0      0 :::53                       :::*                        LISTEN      1399/named                          
tcp        0      0 :::22                       :::*                        LISTEN      1527/sshd                           
tcp        0      0 :::25                       :::*                        LISTEN      30122/xinet                         d
tcp        0      0 :::443                      :::*                        LISTEN      4865/httpd                          
tcp        0      0 :::8443                     :::*                        LISTEN      9521/sw-cp-                         serverd
tcp        0      0 :::993                      :::*                        LISTEN      1562/courie                         rtcpd
tcp        0      0 :::995                      :::*                        LISTEN      1579/courie                         rtcpd
tcp        0      0 :::106                      :::*                        LISTEN      30122/xinet   

这是我的 iptables 配置:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p 50 -j ACCEPT
-A INPUT -p 51 -j ACCEPT
-A INPUT -p tcp -m state -m tcp --dport 10000 --state NEW -j ACCEPT
-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp -j LOG --log-prefix "Reject Traffic " --log-level 6
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited


COMMIT

防火墙似乎阻止了 drweb 更新。但它也阻止了 dns,因此我添加了 53 端口,还有 8080 和 8443

答案1

如果您坚持使用带有默认拒绝规则的防火墙,则需要列出您正在运行的所有侦听服务及其使用的端口,并明确允许每个服务通过。执行此操作的一种方法是 netstat。不过,您可能想尝试添加 -p 选项,这样您就可以看到关联的进程。

当然,除非您想过滤来自特定接口的特定服务(例如,不接受来自不受信任网络的 FTP),或者计算机正在运行恶意软件(在这种情况下,您会遇到其他问题),否则在非路由器计算机上打开端口几乎没有任何安全隐患,因为到您未监听的端口的流量无论如何都会被拒绝。因此,如果您打开服务器正在监听的所有端口,那么您实际上可能没有防火墙。

答案2

这绝对不是一个好的做法。对于你添加的每条规则,你都需要知道它的用途以及为什么需要它。

答案3

使用 netstat 或其他网络扫描/监控工具为每个应用程序生成端口列表,然后手动检查并确保列表中的所有内容都正常

如果它是新配置的服务器,尚未在网络上上线,那么它几乎是你能找到的最干净的。一切都应该是合法的,但最好确保检查结果,以便 a) 了解服务器上有什么以及这些东西是如何工作的 b) 确保没有不应该的东西进入那里。

请注意,防火墙实际上并没有提供太多保护 - 它永远不应该成为您的主要防御措施。您的服务器不会随机打开一个端口并开始发送/接收 - 默认情况下所有端口都是关闭的。只有当您被诱骗在服务器上安装某些东西时才会发生这种情况或者如果您正在使用的某个软件存在未修补的漏洞(可能是零日漏洞或者您升级的速度不够快),那么麻烦就开始了 - 在这种情况下,您的防火墙不会有太大的帮助。

例如,如果您的 FTP 服务器软件中发现漏洞,那么您之前手动解锁的端口(例如 21)现在将成为攻击媒介。攻击者现在拥有与 FTP 服务器运行时相同的计算机权限 - 而您的防火墙对此无能为力。

如果你想要一个真正安全的 Web 服务器,chroot(或者更好的是,BSD jail)应用程序并确保它们以不同的方式运行(永不生根!) 用户,并赋予您最少的权限。如果您的发行版上有 SELinux(基于 RedHat)或 AppArmor(基于 Debian),请使用它。它是一种内核级保护,可将程序可以执行的操作列入白名单(例如,它可以读取/写入/写入哪些目录、它可以触发哪些中断、它可以打开哪些端口等),并且在正确保护您的服务器方面可以发挥巨大作用。

总结:防火墙并没有你想象的那么好。利用这段时间进行基于 ACL 的配置并限制所有服务。

相关内容