V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ob
V2EX  ›  Linux

服务器安全请教

  •  
  •   ob · 2020-09-09 20:47:40 +08:00 · 6823 次点击
    这是一个创建于 1538 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不懂就问,目前有一台服务器存放一些对我很重要的数据,涉及到资金安全。
    所以在安全这方面请教个各位还有什么需要做的。
    环境:
    阿里云服务器
    系统:CentOS Linux release 7.8.2003
    装的服务:mysql, redis, node
    目前做的措施:
    root 只允许 ssh 连接,禁止密码登录
    mysql 开了 3306 端口,禁止 root 远程访问,新建了一个用户名
    redis 设置密码,bind 本地 IP,外部不能连接
    目前阿里云防火墙允许的端口:22,3306,以及一个 web 服务端口
    系统自带防火墙暂时没开
    目前就做了这些简单的,上面几个服务的默认端口有必要改吗?
    请教下还有没有什么地方需要注意的?
    谢谢各位。
    54 条回复    2020-09-14 12:31:13 +08:00
    realpg
        1
    realpg  
       2020-09-09 20:53:36 +08:00
    找一个高阶运维
    ob
        2
    ob  
    OP
       2020-09-09 20:59:53 +08:00
    @realpg 个人使用小机,请不起,而且也不能让运维接触到数据,哈哈
    zro
        3
    zro  
       2020-09-09 21:03:09 +08:00   ❤️ 1
    感觉 3306 端口还是易受攻击,考虑加多层 WireGuard 吗?这样 3306 也可以 bind 本地。。
    samv2
        4
    samv2  
       2020-09-09 21:05:14 +08:00   ❤️ 1
    默认端口当然要改,全部改成高位端口。
    防止各种扫描,或者未来 redis 漏洞啥的默认端口一扫就进去了
    ladypxy
        5
    ladypxy  
       2020-09-09 21:06:15 +08:00   ❤️ 1
    mysql 为什么要开端口?就一台机器为什么不用 socks 连接? redis 同理
    HAWCat
        6
    HAWCat  
       2020-09-09 21:07:05 +08:00 via Android   ❤️ 1
    默认端口有必要要改,个人用的话可以阿里云设置 IP 白名单,只允许部分 IP 能访问
    blackeeper
        7
    blackeeper  
       2020-09-09 21:10:46 +08:00   ❤️ 1
    1,ssh 把默认 22 端口换了,然后装一个 fail2ban
    2,mysql 的 3306 端口也可以换掉,连接加上 tls,mysql 最好跟 redis 一样绑定本地 IP,navicat 连 mysql 可以走 ssh 通道
    3,mysql 数据库一定要做好定时备份
    ob
        8
    ob  
    OP
       2020-09-09 21:12:17 +08:00
    @samv2
    收到,默认端口过后调整一下。
    @ladypxy
    因为需要本地远程连上去,方便查看和修改表数据。socks 连接没用过,不太懂了。
    @HAWCat
    一直有个疑问,IP 白名单针对的是我的外网 IP 吧,那家用路由,IP 以经常变动,不固定的这种,如果设置白名单?
    ob
        9
    ob  
    OP
       2020-09-09 21:14:49 +08:00
    @blackeeper 谢谢,学到了,1,2 两招可以用上,第 3 的话,还好,因为 mysql 里面的数据不重要,哈哈
    nightwitch
        10
    nightwitch  
       2020-09-09 21:17:10 +08:00   ❤️ 1
    机器要暴露公网服务吗,如果只有自己连接的话,所有的端口都关闭,只留 ssh 的端口就可以了,其他的端口都走 ssh 端口转发。
    ob
        11
    ob  
    OP
       2020-09-09 21:20:51 +08:00
    @nightwitch 可以不暴露公网,目前就 22,3306,和一个外网服务,外网服务可以关掉,3306 到时也关了走 ssh 。
    ssh 端口转发得再学习一下了,还没尝试过。
    HAWCat
        12
    HAWCat  
       2020-09-09 21:25:42 +08:00 via Android
    可以观察一下 IPv4 和 IPv6 的变化是不是有规律的,有规律的话可以设置带子网掩码的 IP 地址为白名单
    shequ2046
        13
    shequ2046  
       2020-09-09 21:49:39 +08:00   ❤️ 1
    如果是真的需要安全的话,其实很简单。
    防火墙 deny all
    然后自动获取并放行自己电脑的 IP 地址,
    再放行一个 fail safe 用的固定 IP 的备用主机就行了。
    这样就无敌了,就算有 0day 也打不中你。
    shequ2046
        14
    shequ2046  
       2020-09-09 21:53:05 +08:00
    @HAWCat level 太低了,直接写个脚本自动获取需要放行的主机的 IP 地址就行了。
    black11black
        15
    black11black  
       2020-09-09 21:54:14 +08:00   ❤️ 1
    一般是没问题的,linux 本身层面上除了修改 ssh 登录方式外还要加一个 fail2ban,基本免疫一切针对系统账号本身的攻击。剩下的业务端口这么设置一般也没问题,唯一能打到的是 0day,改端口可以增加一定安全性。我觉得不是涉及大资金安全的话这样完全够了,毕竟设计层面上唯一问题是 0day,因为我个人没见过 mysql 和 redis 因为 0day 被打的,可能是我孤陋寡闻。大资金再搞更细致的防火墙、IP 绑定之类的
    asuraa
        16
    asuraa  
       2020-09-09 21:57:49 +08:00   ❤️ 1
    端口全关 通讯使用 vpn wireguard 或者是 sslvpn 都可以
    只开放 ssh 使用密钥登录 和 vpn 的端口 其他端口全关
    ecs
        17
    ecs  
       2020-09-10 00:36:49 +08:00
    如果想更安全的话,从白名单删除 3306 和 22 端口。只允许使用阿里云 ECS Workbench 远程登录。
    xderam
        18
    xderam  
       2020-09-10 01:36:19 +08:00   ❤️ 1
    1 做好登陆日志的监控
    2 禁止 root 登陆
    3 别一台服务器 做好所有的数据备份
    4 除了 80 什么都不开。用的时候再去阿里云开 22 的指定 IP 权限。
    yjd
        19
    yjd  
       2020-09-10 07:46:33 +08:00 via Android
    最近刚好准备用 public key 验证,ssh 转发功能,这样就可以只开 22 端口。其他非 80,443 就可以走隧道。其实最大漏洞是 80,443 的入侵。
    当然 web 是自己用不对外开放就全走隧道了,完事。
    vpn 方案默认全局,还得搞路由表,或第三方软件实现局部走 vpn
    anjing01
        20
    anjing01  
       2020-09-10 08:26:08 +08:00   ❤️ 1
    不对外情况下,只开 ssh 端口,然后通过 ssh 代理访问 web/mysql ( xshell/secureCRT 都带这功能,或者 ssh -N -f -D
    ssh -N -f -R )
    另外可以添加两条(如果是物理设备,还可添加一条外设接入告警):
    1.登陆告警(从 /var/log/secure 里面去取登陆信息,发现登陆就触发邮件 /或者 WEBHOOK )
    2.链接告警( ss 获取创建链接情况,设置规则告警)
    594duck
        21
    594duck  
       2020-09-10 08:26:52 +08:00
    你克隆 一台服务器,然后把 IP 暴露出来,我们帮你看看不就知道了。
    ob
        22
    ob  
    OP
       2020-09-10 08:37:32 +08:00
    谢谢各位,上面提到的安全措施都很有帮助,这边会慢慢把该加防的加一下。
    clf
        23
    clf  
       2020-09-10 08:44:17 +08:00
    我之前是用 docker 搭的环境,内部的所有容器,除了 nginx 对外开放端口,其它的数据库什么的全部是走的 docker 网络,并且限制本地连接。ssh 仅允许指定 IP 连接,端口也改了。
    xuanbg
        24
    xuanbg  
       2020-09-10 08:45:43 +08:00
    阿里云安全组对非 80/443 端口的访问做 IP 白名单!!!
    ETiV
        25
    ETiV  
       2020-09-10 08:50:28 +08:00 via iPhone
    LS 们说的都是运行时环境的安全

    数据安全也不能忘,记得时常备份数据……
    随时准备好机器磁盘挂掉的应对方案

    再就是你自己阿里云账号密码的保管
    nicevar
        26
    nicevar  
       2020-09-10 09:01:47 +08:00   ❤️ 1
    ssh 除了限制用户和尝试次数这些,端口非常有必要换,为什么呢,因为虽然换端口对于懂入侵的人来说没什么用,但是可以躲避大量自动扫描程序不断的暴力尝试,这种程序在代码里面都是写死了的默认端口
    MySQL 的端口无论如何我都不建议开启外网访问,你进行再多的安全配置,一个未公开的漏洞就把你搞定了,而这种事在过去二十年里我遇到了好几次
    ytmsdy
        27
    ytmsdy  
       2020-09-10 09:16:51 +08:00 via iPhone   ❤️ 1
    22 端口换成 3389
    3306 端口换成 1433
    把 web 应用运行的权限调整成 user
    把重要文件文件夹的权限调整成只有 root 可以浏览,千万别把 web 的应用文件和重要文件放一起。
    你现在最大的问题是 web 应用的安全性,如果有人入侵了,丢一个 webshell 上去。这些防火墙的配置都白瞎!
    hijoker
        28
    hijoker  
       2020-09-10 09:27:42 +08:00
    ssh 不要 root 登录,不要使用密码登录,使用公钥, 任何软件不要使用默认端口,fail2ban 或者 denyhost 用起来,能不把端口暴露在公网就不要暴露
    l4ever
        29
    l4ever  
       2020-09-10 09:32:05 +08:00   ❤️ 1
    搞跳板机, ssh 只允许跳板机连接
    l4ever
        30
    l4ever  
       2020-09-10 09:32:41 +08:00
    ssh 还可以搞两步验证, 或者 port knocking
    anUglyDog
        31
    anUglyDog  
       2020-09-10 09:41:33 +08:00
    zarte
        32
    zarte  
       2020-09-10 09:44:42 +08:00
    ssh 端口改了就算用密码登录密码复杂点就 ok:这个就不信有人人进。
    mysql 这个没人硬破密码复杂点。
    web 这个危险,主要是自己写的代码漏洞可以自己扫扫看。
    zhenjiangidc
        33
    zhenjiangidc  
       2020-09-10 09:54:09 +08:00
    做了 8 年的,IDC,,, 朋友,,
    如果只要你的业务对外,就没有绝对的安全。
    最重要的 不要把重要的数据 只放一台设备上。
    8520ccc
        34
    8520ccc  
       2020-09-10 11:41:50 +08:00
    如果数据库不允许远程机器链接那大可把端口关掉~就算有需求你也可以用阿里云安全组开 IP 白名单~基本没啥问题了
    jorneyr
        35
    jorneyr  
       2020-09-10 11:43:04 +08:00
    目前阿里云防火墙允许的端口:3306
    ob
        36
    ob  
    OP
       2020-09-10 11:47:49 +08:00 via Android
    @ytmsdy 你这个换端口的思路不错,哈哈,专门拿来误导。
    zc1249274251
        37
    zc1249274251  
       2020-09-10 13:31:32 +08:00
    鸡蛋不要放在一个篮子里 必啥都重要
    light010
        38
    light010  
       2020-09-10 13:31:46 +08:00
    ip 白名单
    nicevar
        39
    nicevar  
       2020-09-10 13:32:58 +08:00
    @ob 其实换端口没什么用,掩耳盗铃的意思,因为端口刺探的时候会返回信息,直接能判断了,你尝试 telnet 一下 MySQL 的端口就知道了
    519718366
        40
    519718366  
       2020-09-10 13:59:49 +08:00 via iPhone
    个人用的服务器,资金安全?服务器里存了自己的各种账号密码?🤔
    sdlzqjf
        41
    sdlzqjf  
       2020-09-10 14:00:37 +08:00
    建议把 22 和 3306 端口换掉
    LokiSharp
        42
    LokiSharp  
       2020-09-10 14:05:01 +08:00
    打开 SELinux 和自带的防火墙就足够了,换端口没意义,专业的扫端口工具都能判断端口特征
    yc8332
        43
    yc8332  
       2020-09-10 16:01:26 +08:00
    除了 web 服务端口,ssh,其他不应该开放。。mysql 可以通过 ssh 隧道访问就好了。。。其他就还好了,还是你自己的程序是否有注入啥的。
    lyi4ng
        44
    lyi4ng  
       2020-09-10 16:21:06 +08:00   ❤️ 1
    ssh 禁止 root 远程登录,服务用户整个 pam_radius 认证登录(pin+otp),整个 fail2ban,把端口改了,有能力的话修改一下 sshd 的 output 防止端口的服务识别
    mysql 把端口改了,禁止 root 远程访问,把外联用户对于 information_schema 的权限调整一下
    redis 别对外别空密码别弱密码
    把 shell 换一下,能的话别用 bash 这种自带网络连接 feature 的(/dev/tcp)
    阿里云盾的端口白名单开起来

    能的话别用阿里云,用腾讯云(此条 5 毛,括号内删掉)
    parametrix
        45
    parametrix  
       2020-09-10 19:06:08 +08:00   ❤️ 1
    给的信息有限啊,一些一般性的建议是:

    1. 禁止 root 远程登陆,禁止所有用户密码远程登陆。
    2. 用 Docker 部署服务,应用间隔离,特别是把 web 服务隔离开。
    3. 数据库没必要直接对外开放端口,每次用 ssh -L 拉回本地是更安全的做法。
    4. 有效的数据备份十分重要。
    aaa5838769
        46
    aaa5838769  
       2020-09-10 19:34:26 +08:00
    1 、修改 22 、3306 端口。
    2 、禁止 root 远程登陆,使用普通用户密钥登陆,切换到 root 上。
    3 、阿里云设置 IP 白名单。
    YaakovZiv
        47
    YaakovZiv  
       2020-09-10 20:31:30 +08:00   ❤️ 2
    NeroKamin
        48
    NeroKamin  
       2020-09-10 22:27:53 +08:00
    真心提问,为什么大家都推荐改端口啊?
    s0nnse
        49
    s0nnse  
       2020-09-11 11:10:39 +08:00   ❤️ 1
    root 只允许本地登陆(阿里云控制台),另建一个低权账户用来远程维护代码。web 应用用低权账户运行,mysql 关闭远程访问,看你站库一起的,使用 localhost 连接就可以了。web 应用找个免费的安全扫描工具扫一下。
    no1xsyzy
        50
    no1xsyzy  
       2020-09-11 11:23:53 +08:00
    @NeroKamin 不改日常被扫。虽然加上禁密码登录、fail2ban 等以后被直接拿到手可能性比较少,但一方面日志会比较少比较好筛,能够比较清楚地看出登录情况。
    另一方面,不排除以后暴出 0day,高端口能提供更多的缓冲时间(更新系统、对服务进行关停)。不改端口就是 30 分钟缓冲时间(只会更低,我打赌如果 ssh 公开一个 0day,不到 30 分钟内 0.0.0.0-255.255.255.255 的 22 端口会被全部扫一遍),改端口大约在 24 小时到 72 小时。
    no1xsyzy
        51
    no1xsyzy  
       2020-09-11 11:27:21 +08:00
    @NeroKamin 15000+ 的高位端口大约每 4 天被扫到一次
    每次被扫都是 ssh http/1.1 ( GET / HTTP/1.1 ) http/2 ( GET / HTTP/2 ) TLS (\026\003\001\002 ) 和一个不太清楚是什么协议的 \003
    tianshiyeben
        52
    tianshiyeben  
       2020-09-11 16:25:17 +08:00
    试试上一套安全监控系统 很轻 www.wgstart.com
    NeroKamin
        53
    NeroKamin  
       2020-09-11 21:14:06 +08:00
    @no1xsyzy 受教了,以前一直认为尽管改了端口还是会被扫到就认为没有太多用处,欠考虑了
    libook
        54
    libook  
       2020-09-14 12:31:13 +08:00   ❤️ 2
    默认端口能改就改,包括 SSH 的,避免定向扫描。
    防火墙打开,打底规则所有端口的外网进出流量全部禁止,然后只开放必要的几个端口。
    建议卸载 sudo,或者为了兼容一些管理脚本可以仅让 root 能用 sudo,普通用户切换 root 只能用 su 指令输入 root 的密码才能切过去。
    SSH 登录 root 用户仅支持秘钥对,且给秘钥再配置密码,防止秘钥泄露。
    建议 mysql 、redis 、web 服务(不仅限这几个)都不要对公网开放端口,走 VPN 或者 SSH 隧道让自己的客户端处于服务器的内网环境再经由内网访问这些服务的端口。
    所有服务,能不跑在 root 用户上的都尽量不要跑在 root 用户上,各自的用户要把权限最小化配置。
    系统频率至少每周都升级更新,特别是安全更新,补丁都要打好。

    既然存的是重要的数据,当然也要有备份,而且是异地实时备份,异地的标准建议是两机器地理距离 30 公里以上(为了避免极端的天灾人祸)。为了避免引入脏备份,可以加入快照功能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4872 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.