如何确定哪个程序正在重新路由端口 80 上的流量?

如何确定哪个程序正在重新路由端口 80 上的流量?

不久前,我想将 Ubuntu 服务器上的所有端口 80 流量重定向到端口 3000 以用于 Rails 应用程序。除了使用 iptables,我还在 Google 上搜索并找到了其他方法(我无法想象为什么我没有先找到 iptables),但现在我记不起我是怎么做到的!有没有办法跟踪正在发生的事情以便我可以将其关闭?iptables 中没有规则,流量永远不会到达 apache。

谢谢!

更新:

不,通常你只需要加载新规则集。请参阅:askubuntu.com/q/161551/266。但不要绝望。Iptables 可能会令人困惑。– Stefan Lasiewski

答案1

键入以下命令:

# netstat -tulpn | grep :80

它应该输出类似这个例子的内容:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1138/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      850/portmap
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1607/apache2
tcp        0      0 0.0.0.0:55091           0.0.0.0:*               LISTEN      910/rpc.statd
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1467/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      992/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1565/cupsd
tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      3813/transmission
tcp6       0      0 :::22                   :::*                    LISTEN      992/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      1565/cupsd
tcp6       0      0 :::7000                 :::*                    LISTEN      3813/transmission
udp        0      0 0.0.0.0:111             0.0.0.0:*                           850/portmap
udp        0      0 0.0.0.0:662             0.0.0.0:*                           910/rpc.statd
udp        0      0 192.168.122.1:53        0.0.0.0:*                           1467/dnsmasq
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1467/dnsmasq
udp        0      0 0.0.0.0:68              0.0.0.0:*                           3697/dhclient
udp        0      0 0.0.0.0:7000            0.0.0.0:*                           3813/transmission
udp        0      0 0.0.0.0:54746           0.0.0.0:*                           910/rpc.statd   

如上所示,第一个条目 TCP 端口已由进程3306打开。只需查看端口 80 的条目,并查看该端口上运行的服务和进程 ID。然后,您可以使用 进行验证,输入以下命令:mysqldPID # 1138/proc

# ls -l /proc/1138/exe

您将1138使用端口 80 上的任何 PID 进行替换。

它应该输出类似这样的内容:

lrwxrwxrwx 1 root root 0 2010-10-29 10:20 /proc/1138/exe -> /usr/sbin/mysqld

这将为您提供在其后面运行的程序的位置。

如果您使用 SSH 进行端口转发,那么您需要用文本编辑器重新配置位于此处的 sshd_config 文件...vim 或 gedit 就可以了:

sudo vi /etc/ssh/sshd_config

sudo gedit /etc/ssh/sshd_config

在此文件中,您应该会看到类似这样的条目,只需将其注释掉或更改为否即可。要将其注释掉,请#在其前面添加一个符号,然后保存并关闭:

# Port forwarding
AllowTcpForwarding yes

答案2

要找出哪些进程正在监听端口 80:

sudo netstat -tnlp | grep -w 80

希望从输出中可以明显看出它是什么。

相关内容