如果不是 iptables 也不是 EC2 安全组,如何检测是什么阻止了 Ubuntu 14.04 LTS 上的传入流量?

如果不是 iptables 也不是 EC2 安全组,如何检测是什么阻止了 Ubuntu 14.04 LTS 上的传入流量?

我有 EC2 实例的 SSH 根访问权限。

它是 Ubuntu 14.04 LTS。

我有nginxWeb 服务器监听 80 TCP 端口上的所有接口。可从此服务器访问,但无法从外部访问。

显然,除 22 TCP 之外的所有传入流量都被阻止了 - 其他 TCP 端口、所有 UDP 和 ICMP。

但我的iptables服务器上是空的:

root@ip-x-x-x-x:~# iptables -v -L
Chain INPUT (policy ACCEPT 3162 packets, 1472K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4203 packets, 674K bytes)
 pkts bytes target     prot opt in     out     source               destination  

以下是nmap我本地机器的扫描输出:

grzegorz@MacBook-Pro-Grzegorz:~$ sudo nmap -v -Pn -p 22,80 x.x.x.x

Starting Nmap 6.47 ( http://nmap.org ) at 2015-01-31 20:40 CET
Initiating Parallel DNS resolution of 1 host. at 20:40
Completed Parallel DNS resolution of 1 host. at 20:40, 0.16s elapsed
Initiating SYN Stealth Scan at 20:40
Scanning ec2-x-x-x-x.eu-central-1.compute.amazonaws.com (x.x.x.x) [2 ports]
Discovered open port 22/tcp on 54.93.91.112
Completed SYN Stealth Scan at 20:40, 1.38s elapsed (2 total ports)
Nmap scan report for ec2-x-x-x-x.eu-central-1.compute.amazonaws.com (x.x.x.x)
Host is up (0.035s latency).
PORT   STATE    SERVICE
22/tcp open     ssh
80/tcp filtered http

Read data files from: /usr/local/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds
           Raw packets sent: 3 (132B) | Rcvd: 1 (44B)

..所以某种防火墙阻碍我的交通。

我们假设它是不是EC2 安全组。

还有什么可以阻止我的流量?是在 VPS 本身上运行的程序吗?是内核中的程序还是用户空间中的程序?


更新

我测试了apparmor:

root@ip-x-x-x-x:~# apparmor_status --verbose
apparmor module is loaded.
4 profiles are loaded.
4 profiles are in enforce mode.
   /sbin/dhclient
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/connman/scripts/dhclient-script
   /usr/sbin/tcpdump
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode.
   /sbin/dhclient (607) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

..我将此输出解释为与过滤无关,但我无论如何都已禁用它:

root@ip-x-x-x-x:~# service apparmor stop
 * Clearing AppArmor profiles cache
   ...done.
All profile caches have been cleared, but no profiles have been unloaded.
Unloading profiles will leave already running processes permanently
unconfined, which can lead to unexpected situations.

To set a process to complain mode, use the command line tool
'aa-complain'. To really tear down all profiles, run the init script
with the 'teardown' option."
root@ip-x-x-x-x:~# service apparmor teardown
 * Unloading AppArmor profiles
   ...done.

..但它没有帮助。nmap仍然显示filteredTCP 80,nginx仍然无法访问。

答案1

托管服务提供商可能默认防火墙服务只允许 ssh 流量进入服务器。这种默认设置的目的可能是限制服务器的暴露,直到您有时间安装所有安全更新、强化配置,并确保服务器已准备好上线。

如果恰巧有这样的服务,那么很可能存在一个可以配置它的 Web 界面。还应该存在一个可以完全禁用它的地方。

我建议采取以下步骤:

  1. 阅读托管服务提供商提供的文档,了解是否存在上述防火墙服务。
  2. 使用工具缩小您尚未找到文档的过滤器的位置。
  3. 询问提供商

您可以使用命令来缩小过滤器的位置traceroute。Ubuntu 14.04 有一个traceroute带标志的命令,可以发送具有特定协议和端口号的数据包。这样,您就可以比较从端口 22 和端口 80 的跟踪中获得的输出。

traceroute -n -T -p 22 server

请注意,traceroute存在不同的实现。如果出于某种原因,这些标志似乎不起作用,那么请尝试traceroute.db,它应该会为您提供支持上述标志组合的版本。

答案2

显然,Linux 上没有其他防火墙解决方案不使用iptables/netfilter。此外,简单的 SYN 测试是检查您的流量是否被防火墙过滤的正确方法。您说得对,寻找“上游”防火墙(本例中是此 EC2 实例的安全组)是解决此问题的唯一合理方法。感谢您提供的所有意见,这些意见促成了此答案。

相关内容