虚拟主机隐藏端口命令大全,旨在覆盖Linux环境下通过系统命令、防火墙规则、服务配置等方式隐藏开放端口的技术操作。下面按功能分类整理,所有命令均在终端中以root或具有相应权限的用户执行。

一、端口探测与查看命令——用于确认当前开放端口及服务状态,是隐藏端口的基础。
netstat:`netstat -tulpn` 显示所有TCP/UDP监听端口,其中`-t`TCP、`-u`UDP、`-l`监听、`-p`进程、`-n`数字地址。
ss:`ss -tulpn` 是netstat的替代品,输出更快速,推荐在较新系统中使用。
lsof:`lsof -i -P -n` 列出所有网络连接及监听端口,`lsof -i:8080` 可查看指定端口。
fuser:`fuser 80/tcp` 显示占用TCP 80端口的进程PID,结合`-v`可查看详细信息。
nmap:`nmap -sS -p- 127.0.0.1` 本机扫描,验证隐藏效果;`nmap -sT -p 22,80 目标IP` 用于远程检测。
二、通过iptables隐藏端口——使用防火墙规则拒绝外部访问,但保持服务内部可用。
DROP入站:`iptables -A INPUT -p tcp --dport 22 -j DROP` 丢弃来自外部的TCP 22端口包,使端口扫描显示为**过滤**状态。
隐藏于特定来源:`iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.100 -j ACCEPT` 后加`iptables -A INPUT -p tcp --dport 3306 -j DROP`,只允许指定IP访问。
模拟关闭:`iptables -A INPUT -p tcp --dport 8080 -j REJECT --reject-with tcp-reset` 返回RST,使端口看起来未开放。
限制连接速率:`iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT`,其余DROP,可干扰扫描。
保存规则:`iptables-save > /etc/iptables.rules` 或使用`iptables-save` 将规则持久化。
三、使用nftables隐藏端口——适用于现代Linux系统,是iptables的下一代。
添加表与链:`nft add table ip filter`、`nft add chain ip filter input { type filter hook input priority 0; }`。
丢弃指定端口:`nft add rule ip filter input tcp dport 22 drop`。
仅允许特定IP:`nft add rule ip filter input ip saddr 192.168.1.100 tcp dport 22 accept` 后`nft add rule ip filter input tcp dport 22 drop`。
查看规则:`nft list ruleset`,删除规则用`nft flush chain ip filter input`。
四、firewalld防火墙命令——Classic RHEL/CentOS防火墙管理工具。
拒绝端口:`firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="22" protocol="tcp" reject'`,然后重载`firewall-cmd --reload`。
禁止区域访问:`firewall-cmd --permanent --zone=public --remove-service=ssh` 或`--remove-port=3306/tcp`。
白名单模式:先`--set-default-zone=drop`,再添加允许的IP和服务。
五、端口敲门(Port Knocking)隐藏端口——只有按顺序连接特定端口序列,才临时开放目标端口。
knockd安装与配置:编辑`/etc/knockd.conf`,序列`sequence = 7000,8000,9000`,命令`iptables -A INPUT -p tcp --dport 22 -j ACCEPT`。
启动服务:`systemctl start knockd`、`systemctl enable knockd`。
客户端敲门:`knock 服务器IP 7000 8000 9000` 后即可SSH连接。
配合nmap:`nmap -p 7000,8000,9000 服务器IP` 用于触发或探测敲门序列。
六、通过修改服务端口隐藏——将服务移至非标准端口,减少被自动化扫描识别的概率。
SSH:编辑`/etc/ssh/sshd_config` 中的`Port 2222`,然后`systemctl restart sshd`。
Apache:修改`/etc/httpd/conf/httpd.conf` 或`ports.conf` 的`Listen 8080`。
Nginx:修改`nginx.conf` 的`listen 8080;`。
MySQL:修改`/etc/mysql/my.cnf` 中的`port=3307`。
七、TCP Wrappers隐藏端口——基于宿主访问控制,在连接层拦截。
编辑hosts.deny:`echo "sshd: ALL" >> /etc/hosts.deny`,再在`hosts.allow`中加入`sshd: 192.168.1.0/24`。
注意:TCP Wrappers对支持libwrap的守护进程有效,对于纯socket服务无效。
八、SSH隧道/端口转发隐藏——将服务端口封装在SSH加密隧道中,外部无法直接看到实际端口。
本地转发:`ssh -L 8080:127.0.0.1:80 user@跳跃机`,在本机建立隧道访问远程80端口。
远程转发:`ssh -R 8080:127.0.0.1:80 user@公网机`,将公网机的8080端口转发到本地80。
动态SOCKS代理:`ssh -D 1080 user@服务器`,动态隧道可隐藏内网端口。
九、禁用ICMP协议以防探测——减少网络指纹暴露。
iptables禁止PING:`iptables -A INPUT -p icmp --icmp-type echo-request -j DROP`。
sysctl隐藏时间戳:`sysctl -w net.ipv4.icmp_timestamps=0`,并修改`/etc/sysctl.conf` 持久化。
十、使用代理软件隐藏真实端口——如HAProxy、Nginx Stream模块反向代理。
Nginx stream配置:在`nginx.conf`中,`stream { server { listen 4433; proxy_pass 127.0.0.1:22; } }`,外部只看到4433。
HAProxy:`frontend ssh-in bind *:2200 default_backend ssh-srv`,后端指向实际SSH端口。
十一、虚拟主机环境下的特殊命令——对于共享虚拟主机(无root权限),可尝试以下技巧。
.htaccess设置环境变量:`SetEnvIfNoCase Remote_Addr "192.168.1.1" ALLOWED`,配合`Require`指令限制访问,但不能真正隐藏端口。
使用Web应用防火墙(WAF):通过云WAF隐藏源站端口,例如在DNS解析后只暴露80/443,源站端口仅允许IP白名单。
借助CDN:用CDN会导致源站IP和端口被隐藏,但需要配置规则。
十二、实时监控与验证隐藏效果
tcpdump抓包:`tcpdump -i eth0 port 22` 查看是否有外部探测请求。
auditd审计:`auditctl -a always,exit -F arch=b64 -S accept -k port_hide` 记录端口接受行为。
扫描验证:`nmap -sS -Pn -p 指定端口 外部IP` 确认端口状态为`filtered`或`closed`。
十三、隐藏端口后的应急恢复命令
清空iptables规则:`iptables -F`、`iptables -X`、`iptables -P INPUT ACCEPT`,注意会删除所有规则。
重启防火墙服务:`systemctl restart iptables` 或`systemctl restart firewalld` 恢复默认策略。
取消端口敲门:`systemctl stop knockd`,移除相关iptables规则。
总结:隐藏端口需要综合运用防火墙过滤、端口重定向、服务修改、隧道封装及访问控制等手段。在虚拟主机环境中,必须根据权限选择合适方案。所有命令应先在测试环境验证,并确保业务连续性,避免因规则误设导致合法访问中断。

查看详情

查看详情