V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tohert
V2EX  ›  服务器

window 云服务器如何防止被黑被勒索

  •  
  •   tohert · 348 天前 · 2983 次点击
    这是一个创建于 348 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我写 c#的,用的 window 服务器,部署到 iis 上,数据库用的 sqlserver 。现在服务器的远程端口 3389 和数据库端口 1433 我都改了,没有用默认的了。 然后打开了 window 的安全中心。没有做其他的设置了。

    最近在事件查看器里面查看,总有不同的 ip 尝试登录 sqlserver (事件 id:18456 )和远程连接(事件 id:4625),我不知道怎么去防范和禁止这些行为,云服务器的防火墙我只设置了几个特定端口。

    现在每天都要进服务器看下,生怕被黑了被勒索。 年初的时候服务器开的默认端口就被黑过 。。。
    opengps
        1
    opengps  
       348 天前
    端口号,你虽然改了却依然是对外暴露的,3389 可能不得已,但数据库真的需要对外暴露吗?没必要就关掉,实在有必要就配合 ip 白名单,甚至 3389 也可以不开放时候通过安全组关闭
    xshell
        2
    xshell  
       348 天前
    公网开这些很容易被入侵。
    tohert
        3
    tohert  
    OP
       348 天前
    @opengps 我现在对外的默认端口就是 80 和 443 了,3389 和数据库的 443 默认端口我都改掉了 。 数据库我得本地能连,方便找问题。 所以现在看到事件查看器里面每秒都有那种尝试登录的记录就慌
    tohert
        4
    tohert  
    OP
       348 天前
    @xshell 我现在只是没用默认端口了,年初的时候用的默认端口就被勒索了。 其他的设置百度找了一圈,按照教程弄了下,在事件查看器里面还是有那个记录,基本每秒钟都有
    whileFalse
        5
    whileFalse  
       348 天前
    突然想到可不可以安装一个 Tailscale 等虚拟组网软件,然后你在云服务器上启动的数据库仅监听 Tailscale 网络的 IP ?这样你本地也连接到 Tailscale ,就可以从本地无感访问云服务器的数据库了,但公网无法连接到数据库。不过 3389 的话就要用 windows 防火墙进行设置了。
    kanecolin
        6
    kanecolin  
       348 天前
    给你个思路:
    写一个 2FA 验证的 web 服务,服务可以做 2 个事儿:
    - 随机 2 个大端口号,做端口映射,针对外部访问的,同时修改相应的映射关系和防火墙规则
    - 将连接地址和随机端口号这些信息通过钩子给你的 IM 的 bots
    - 监听 rd 连接关闭的事件,关闭防火墙端口映射关系


    这个解决方案可以尽可能的避免非人控期间的暴露风险但是没有办法防止远程期间的端口扫描干扰
    AkaGhost
        7
    AkaGhost  
       348 天前 via Android
    考虑一下 Tailscale 或者 Zerotier
    iloveayu
        8
    iloveayu  
       348 天前 via iPhone
    3388 好办,加个 2FA 服务或者 usb 硬件密钥,rdp 可以支持的,成型方案也挺多,如果不自己写基本都需要付费。
    数据库没啥好办法,上随机的强密码吧。
    justjy
        9
    justjy  
       348 天前
    终极解决方案是上个硬件防火墙
    justjy
        10
    justjy  
       348 天前
    云服务器的话 只开放 3389 端口并限定访问的 ip 地址段 SQL 维护通过 RDP 进行
    dedemao
        11
    dedemao  
       348 天前
    只开 80 和 443 ,其余要么关掉,要么限定指定 IP 访问。administrator 账号必须禁用。最重要的是做好备份,即便被勒索了,有备份,可以不求人。
    unclemcz
        12
    unclemcz  
       348 天前 via Android
    只要在公网上,不管 win 还是 linux ,我只相信白名单访问。
    tohert
        13
    tohert  
    OP
       348 天前
    @whileFalse 我现在处理的只是暂时不用默认的端口,数据库还得外网能连。
    tohert
        14
    tohert  
    OP
       348 天前
    @kanecolin 不行不行, 能力不够。 脑子不太允许我弄这些 。。。
    tohert
        15
    tohert  
    OP
       348 天前
    @wyf001912hp 那样弄,数据库无法连上了。
    tohert
        16
    tohert  
    OP
       348 天前
    @justjy 主要我本地的 ip 不是固定的,不然肯定会去设置固定 ip 白名单了
    tohert
        17
    tohert  
    OP
       348 天前
    @iloveayu 目前只是关掉了默认的端口,不用弱口令
    tohert
        18
    tohert  
    OP
       348 天前
    @dedemao
    @unclemcz
    现在是关了数据库和远程的默认端口,没有限定 ip 白名单, 本地的 ip 是不固定的
    IDAEngine
        19
    IDAEngine  
       348 天前
    zerotier 组网 后走虚拟局域网 IP 白名单
    adoal
        20
    adoal  
       348 天前   ❤️ 1
    都在跟你说数据库端口不要对公网开放,你非要坚持说数据库端口不放公网你就没法维护……
    crab
        21
    crab  
       348 天前
    事件查看器日志有记录被扫描很正常啊,或者直接 ipsec 设置白名单 IP 段才响应。
    serialt
        22
    serialt  
       348 天前
    我自己 linux 开发服务器的安全方案,只暴露 openvpn 的端口,其他任何访问都只能通过使用 openvpn 接入
    serialt
        23
    serialt  
       348 天前
    除非有能力黑掉 openvpn 或者云,否则基本不用担心
    justjy
        24
    justjy  
       348 天前
    @tohert IP 不固定的话可以每次 RDP 前更新防火墙规则的 IP 数据库端口开放在外网上 安全风险极高
    justjy
        25
    justjy  
       348 天前
    @tohert 企业级解决方案是只开放提供服务的端口如 80 443 类似 RDP 3389/MSSQL 1433 这种运维端口一律不对外 只能通过内网访问(自行组网)
    deorth
        26
    deorth  
       348 天前 via Android
    雇个运维
    exploreexe
        27
    exploreexe  
       348 天前
    主要是 Windows 的漏洞太多,特别是 sqlserver 简直是重灾区。
    尽量的远程连接,只开放 443 和 80
    会有人批量的扫 IP 段尝试弱口令
    unclemcz
        28
    unclemcz  
       348 天前 via Android
    @tohert #18 我现在也是本地无固定 ip ,每次运维前我会通过云服务商的 web 端进去调整白名单,然后运维机再连进去,虽然麻烦,但和风险相比,这种麻烦可以接受,再者运维次数没那么频繁,实际上这几年下来感觉还好。
    Felldeadbird
        29
    Felldeadbird  
       347 天前
    只开放 80 和 443. 别的端口通过云内网,或者端口映射,或者防火墙白名单规则临时开放。
    geekzu
        30
    geekzu  
       347 天前
    楼上都说的差不多了,补充一下:
    绝大部分类型的运维访问( RDP 、SSH 、数据库)都可以通过堡垒机中转,开源的可以看下 JumpServer ,商业的很多,就不列举了。
    JumpServer 开源版对数据库类型支持的比较少,MSSQL 这种情况可以在云上跑个 SSH 服务,DBeaver 之类的数据库运维工具都支持 SSH 代理连接数据库的,走 SSH 会安全不少。
    zhandouji2023
        31
    zhandouji2023  
       347 天前 via Android
    我有个 Ubuntu 当共享文件,root 密码是 1 兄弟单位的电脑也能访问,还好家里访问不了。应该不是公网 ip
    onice
        32
    onice  
       347 天前
    网络空间中存在大量扫描器。你改了端口为非默认端口,也会收到扫描的流量,所以你能看到日志。这是正常的,不必紧张,为了防御暴力破解,设置一个强密码即可。

    应用是 C#开发的,服务器系统是 Windows ,Web 中间件是 IIS ,数据库是 sqlserver 。根据这些条件,可以采用最小权限原则对系统和应用进行加固。

    1. 确保 C#开发的系统没有漏洞。如果你是开发的 web 应用,要确保没有 SQL 注入,上传漏洞等。大公司做这块,会找代码审计人员进行审计,或者是找渗透测试人员进行漏洞挖掘。这一点,如果自己来做安全的话,可以通过 awvs 进行扫描,百度上有 crarck 。这一步,是保障部署的应用安全。

    2. Windows 系统,一定要确保开启自动更新。部署应用前,应当先打上所有补丁。这一步是保障操作系统的安全。

    3. 对于 IIS 中间件,要进行安全加固,关闭不必要的组件,采用最小化组件原则,即开发的应用用到什么就开什么,不要图方面把所有组件全部打开。这一步,核对安全基线进行加固即可。
    参考文档: https://download.wanglejie.com/CyberSecurity/目录下的 IIS 服务器安全配置基线文档。

    4. sqlserver 数据库,需要做两件事,一是检查数据库服务的权限,运行数据库进程的账户必须是普通用户,就是打开系统的服务管理,确保数据库的服务不是以管理员或 system 用户启动。第二个就是数据库必须是强口令,以及网站配置文件中的数据库连接用户不能用 sa ,应该用普通用户,且该用户只对 web 应用用到的数据库有访问权限。例如我部署网站创建了一个 app 数据库,那么我需要建立一个普通用户并设置复杂的密码,让这个普通用户的权限只能操作 app 这个库。然后网站的配置文件中,使用这个普通用户。

    以上便是针对你实际情况的安全方案。
    yzy8788
        33
    yzy8788  
       347 天前
    1 、免费开源的 OpenVPN ,可以把服务器和本地电脑搭建成局域网,然后服务器上的数据库端口只对这个局域网 IP 开放
    2 、web.config 里面的数据库连接字符串一定要加密,否则 web 被黑,直接看到数据库密码了,太危险
    yzy8788
        34
    yzy8788  
       347 天前
    OpenVPN 搭建后,本地电脑和服务器就是一个局域网。服务器上的所有端口无需设置,对局域网机器默认都是开放的。在阿里云(假如用的是阿里云机器)后台,云服务器的安全组里不要开放 1433 (即 sqlserver 的端口)。这样公网是无法连接到 1433 端口的。VPN 是很多网络公司都会用的做法,比如大学、快递公司、医院、保险公司等等
    tohert
        35
    tohert  
    OP
       347 天前
    感谢各位大佬的解答,小弟不胜感激。各位大佬说的很详细,我会结合自身的情况做一些调整。 再次感谢!
    joynvda
        36
    joynvda  
       347 天前
    个人尝试用 Fail2ban 阻止 IP 访问 Linux 。没有在 win 上试过 Fail2ban 。

    可以做一个蜜罐接收 3389 端口的请求。任何试图连接这个端口的 IP 自动放到黑名单。
    Fail2ban 还是比较笨,逐个 IP 放到 iptables 上。为了避免表太大,我只是放到黑名单 24 小时解封。
    不能杜绝扫描、尝试,只是大大地提高短时间系统被攻破的机会。
    billccn
        37
    billccn  
       347 天前
    等下一个 RDP 或者 MSSQL 缓冲器溢出漏洞出来,楼主的机器毫秒被爆,到时候全世界都能登进楼主的服务器,除了楼主自己,就不要说数据了

    Windows Server 的话,防火墙里把 RDP 设成只有 localhost 可以访问,然后安装自带的 Remote Desktop Web Access 角色(通过 IIS 代理 RDP 访问),这样的话只需要 443 端口。这个有现成文档,照着配置就可以。还可以在外面套一个 CDN 或者应用防火墙,把绝大多数自动扫描拒之门外。

    SQL Server 的话也只开给 localhost ,每次需要调试了先 RDP 进去,把自己的 IP 临时加入防火墙允许 IP 列表
    Chad0000
        38
    Chad0000  
       347 天前 via iPhone
    我也写 C#,windows 建议你使用云提供的防火墙,只开 80 和 443 ,远程桌面和数据库端口改掉,同时在云防火墙里面设置 IP 白名单访问。每次登录前检查自己的 IP 并上云加到防火墙里。

    我之前一直这样做,直到我家变成了固定 IP (公司福利),就爽多了。
    WindProtect
        39
    WindProtect  
       347 天前
    我们也是 ip 无固定,然后脚本监听 ip 变化,每次一变化就更新下云服务的所有白名单。
    p1gd0g
        40
    p1gd0g  
       347 天前
    公司的方案是 vpn 后当成内网使用。但是个人的话搞这么些东西可能划不来。密码搞复杂点我感觉就足够了,怕勒索就加备份呗,成本又不高
    t133
        41
    t133  
       346 天前 via iPhone
    Fail2ban
    tohert
        42
    tohert  
    OP
       346 天前
    小弟感谢各位大佬给意见 。 /抱拳
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3139 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:53 · PVG 18:53 · LAX 03:53 · JFK 06:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.