只是想了解一下。请纠正错误并写出建议
黑客可以访问VPS:
1. 通过(使用)控制台终端,例如使用PuTTY。
为了访问,黑客需要知道端口号、用户名和密码。
端口号黑客可以知道扫描开放端口并尝试登录。据我所知,登录的唯一方法是知道用户名和密码。
要阻止(使端口扫描更加困难),需要使用 iptables configure /etc/sysconfig/iptables
。我遵循了这一点https://www.digitalocean.com/community/articles/how-to-setup-a-basic-ip-tables-configuration-on-centos-6教程并得到
*nat
:PREROUTING ACCEPT [87:4524]
:POSTROUTING ACCEPT [77:4713]
:OUTPUT ACCEPT [77:4713]
COMMIT
*mangle
:PREROUTING ACCEPT [2358:200388]
:INPUT ACCEPT [2358:200388]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2638:477779]
:POSTROUTING ACCEPT [2638:477779]
COMMIT
*filter
:INPUT DROP [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [339:56132]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 11.111.11.111/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -s 11.111.11.111/32 -p tcp -m tcp --dport 21 -j ACCEPT
COMMIT
关于需要开放的端口。
如果不使用ssl,那么似乎必须为网站保留开放的80端口。
然后是 ssh(默认 22)和 ftp(默认 21)。并设置可以连接的 IP 地址。那么如果黑客使用其他 IP 地址,即使知道用户名和密码,他也无法访问?
关于电子邮件,不确定。
如果我使用 Gmail 发送电子邮件(以以下身份发送邮件:(使用 Gmail 从您的其他电子邮件地址发送)),则端口 25 没有必要。
对于 dynadot.com 的传入电子邮件,我使用电子邮件转发。这是否意味着电子邮件“未到达 VPS”(在到达 VPS 之前,电子邮件会被转发,例如转发到 Gmail)?如果电子邮件未到达 VPS,则端口 110 似乎也没有必要。
如果只使用ssl,必须打开443端口,关闭80端口。
不明白关于端口 3306
在PuTTY中/bin/netstat -lnp
查看
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 992/mysqld
据我所知,它是用于mysql的。但我不记得我打开了这样的端口(可能是在安装mysql时,端口会自动打开?)。mysql安装在与其他内容相同的服务器上。需要了解有关端口3306的信息
2.黑客还可以通过VPS托管提供商控制面板(串行控制台紧急访问)访问控制台终端。
据了解,仅使用控制台终端(PuTTY 等)才能进行“全局”更改(无法使用 ftp 修改的更改)。
3.黑客可以利用我的php代码中的一些漏洞并上传木马等文件来访问我的VPS。
不幸的是,VPS 遭遇了黑客攻击。据我了解,这是因为我使用了 ZPanel。在 VPS ( \etc\zpanel\panel\bin) ) 上发现了一个 php 文件,该文件被一些病毒扫描程序 (在 virustotal.com) 识别为木马。
对本地计算机(wamp)上的文件进行了实验。
并且似乎黑客可以看到 VPS 的所有内容,重命名,删除,上传等。从我的角度来看,如果在 PuTTY 中使用类似的命令,chattr +i /etc/php.ini
那么黑客就无法修改 php.ini。
还有其他方法可以进入 VPS 吗?
答案1
您所描述的是,如果文件被放置在其目录中并且可以通过 Web 服务器访问,则 ZPanel 存在漏洞 - 我在 Joomla/Wordpress 安装中看到过无数次这种情况发生。
至于提供的屏幕截图 - 这看起来像是一个 PHP shell,它将能够列出文件系统,因为 Apache 可以访问文件系统。脚本可以访问/读取哪些文件/目录取决于对这些文件设置的权限。
现在回答你的问题:
- 我建议使用 CSF 来保护您的服务器,它可以防止端口敲击,并扫描您的 SSH 日志以查看是否有任何暴力攻击并阻止攻击者的 IP 地址。至于保留开放端口 - 问问自己服务器将做什么,然后打开所需的端口:
- FTP 为 21
- SSH 为 22
- 25(用于 SMTP 服务器)
- HTTP 为 80
- 如果你使用这个,则为 443(表示 HTTPS)
- 110/995 用于 POP3/POP3 通过 SSL - 如果您想在 VPS 上使用邮件服务器
- 143/993 用于通过 SSL 的 IMAP4/IMAP4 - 与 POP3 连接相同
您可以关闭 3306 - MySQL 端口,如果您需要从远程位置访问 MySQL 服务器,您可以随时添加 iptables 规则,仅允许远程 IP 地址访问端口 3306。
另外,您可以使用 SSH 密钥进行 root 登录并禁用 root 用户的密码登录( PermitRootLogin without-password ),因此只有在 ~/.ssh/authorized_keys 中添加了 SSH 密钥的用户才能访问 root 帐户。另一种方法是完全禁用 root 访问权限并使用另一个帐户,以便您可以进入 root 帐户(su - root)。
但是,您的安全性取决于您最薄弱的环节 - 您可以锁定所有内容,但如果 Web 应用程序存在漏洞 - 他们就会找到进入它的方法。
如果您是唯一使用该服务器的人,您可以在访问面板之前使用 ZPanel 添加 HTTP 身份验证,或者如果您在 VPN 后面,则设置 HTTP 服务器为 Zpanel 提供服务,以便只允许访问您的 VPN IP 地址。
编辑:添加chattr +i /etc/php.ini
将禁用对 php.ini 文件的任何修改,因为它设置了不可变的属性,您(root)或任何其他人都无法修改该文件。
至于 php.ini 保护,如果这是生产服务器,您可以考虑修改以下选项:
- display_errors-关闭
- reveal_php-关闭
您还可以禁用一些不必要的 PHP 函数,这些函数会导致 PHP shell 脚本无法使用:
disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo
如果禁用这些功能后您的脚本仍无法正常工作,请检查需要启用哪些功能,从列表中删除并重新启动您的 HTTP 服务器。
答案2
当然!这完全取决于攻击面。
从堆栈底部向上的任何内容都是潜在目标。在不了解特定 VPS 的更多信息的情况下,我们知道它们必须至少具有:
- 物理层漏洞(窃听线路、窃取物理服务器)
- 第 2 层漏洞(嗅探来自另一个 VLAN 的流量、ARP 漏洞)
- 网络漏洞(拒绝服务)
- 会话/传输/等(包装层)漏洞(操纵客户端认为证书有效、其他 SSL 问题、劫持等)
- 表示层/应用层漏洞(您的旅程从这里开始)
在虚拟化环境中,堆栈会从头开始,因此物理服务器中的应用层托管虚拟环境中的物理层。例如,假设您在一台带有某个虚拟机管理程序的物理服务器上托管 VPS。任何存储、网络或服务器问题都可能影响该服务器上的虚拟机。
另一方面,即使物理世界一切正常,虚拟环境也会承载虚拟化硬件所以你必须重新开始。
然而,我们不必完全分开考虑这两种环境。尽管虚拟环境位于物理环境之上,但它仍有可能影响物理网络。这就是虚拟威胁和物理威胁重叠的地方。
例如,您的 ISP 可能有一个物理边缘路由器,用于检查和过滤流量。它可能会检查非加密 URL 的查询字符串,以查看是否有问题。如果过滤器足够好,您可能会认为您不必担心外部流量(感谢桥接和 NAT)。不过,您可以对查询字符串执行自己的检查以确保万无一失。在这种情况下,流量已经流出:
- 从客户端到 ISP 边缘过滤器(物理)
- 要么:通过物理到虚拟桥接从 ISP 边缘过滤器到客户端,要么从 ISP 边缘过滤器到客户端网关再到客户端
- 从客户端过滤器到客户端应用程序
我知道这是回答你问题的一种非常迂回的方式,但我想说的是,你应该考虑你的攻击面——尤其是最容易被攻击的——而不是考虑一个清单。如果你允许文件上传,你必须有一个可靠的方法来过滤掉坏文件。如果你允许基本的 HTTP 身份验证,你将需要防止窃听和暴力攻击。如果你允许 SSH,你可能需要仔细审核登录尝试。
因此,不要从类别的角度考虑安全性,而是从为您的特定服务运行而创建的攻击面的角度考虑它。