• 【云服务器】阿里云部署项目、攻击CPU解决方案


    部署运维


    将项目运行部署在阿里云服务器上面运行


    Cfeng之前分享打包部署的时候,只是介绍了几种部署方式,比如jar、war、yum、docker等,现代化打包方式当然还是docker,docker部署需要编写dockerFile,进行镜像的构建;

    接下来为了内容的完整性,补充云服务器的运维部署

    阿里云服务器

    Cfeng使用的是阿里云服务器,所以这里就使用阿里云进行介绍: 首先就是购买服务器,这个看个人选择不同的价位的服务器, 购买之后, 一般就会阿里就会发短信提示购买成功,并且会给出公网的IP,之后we可以进入修改信息:

    云服务器管理控制台 (aliyun.com) : 次要的可以修改服务器实例ECS的实例的名称或者密码, 可以选择修改一下host名称, Cfeng还是选择的Centos系统,所以host名称会显示在控制台上面

    其余的部署情况和之前是相同的,但是为了能够成功的访问,需要配置安全组规则; 在控制台中选择手动新增安全组规则,选择新增一个所有的, 或者固定port的规则

    配置完成之后,就可以使用Xshell进行远程连接, 默认的端口就是22,连接的IP就是公网IP, 输入登录名称和密码即可建立连接远程操作

    Connecting to 8.130.34.133:22...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.
    
    Last failed login: Thu Sep  8 14:30:10 CST 2022 from 3.82.192.156 on ssh:notty
    There was 1 failed login attempt since the last successful login.
    Last login: Thu Sep  8 13:49:09 2022 from 61.185.207.95
    
    Welcome to Alibaba Cloud Elastic Compute Service !
    
    [root@cfengAli ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    之后就进入了云服务器的LInux系统, 按照之前的步骤进行打包部署即可

    参照Cfeng之前的文章 配置mysql、java、 redis、docker的环境

    环境配置

    因为之前linux部分和之后的博客均给出了配置的过程,下面就直接列出简单的命令,装配redis、java、mysql、docker等环境

    • redis环境

      • mkdir cfeng/software -p

      • xftp 上传redis安装包

      • tar -zxvf redis-6.2.6.tar.gz -C /usr/local/

      • yum install wget

      • /etc/yum.repos.d目录下 cp CentOS-Base.repo CentOs-Base.repo.backup

      • wget http://mirrors.aliyun.com/repo/Centos-7.repo

      • mv Centos-7.repo CentOS-Base.repo

      • yum clean all

      • yum makecache

      • yum -y install gcc

      • cd /usr/local/redis-6.2.6

      • make install

      • touch /usr/lib/systemd/system/redis.service

      • vim 中 ctrl + ins

      [Unit]
      Description=The redis-server Process Manager
      After=syslog.target network.target

      [Service]
      Type=simple
      PIDFile=/var/run/redis_6379.pid
      ExecStart=/usr/local/redis-6.2.6/src/redis-server /usr/local/redis-6.2.6/redis.conf
      ExecReload=/bin/kill -USR2 $MAINPID
      ExecStop=/bin/kill -SIGINT $MAINPID

      [Install]
      WantedBy=multi-user.target

      • systemctl enable redis

      • vim /usr/local/redis-6.2.6/redis.conf

      修改bind 为 bind 0.0.0.0 指定的ip为统一网段或者localhost监听ip, 配置内网其他网段或者公网ip重启都会失败 【直接使用firewalld进行处理】

      daemonize 改为yes

      protected-mode 改为 yes

      requirepass 设置为强密码

      logfile 为 /var/log/redis/redis-server.log

      • 【systemctl stop firewalld】 不安全
      • systemctl enable firewalld /start 开启防火墙
      • firewall-cmd --add-port=8083/tcp --permanent 开放8083端口
      • firewall-cmd --reload
      • firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“61.185.207.9X” port protocol=“tcp” port=“22” accept” 22、6379、3306、9001等端口开放给指定ip
      • systemctl restart firewalld
      • systemctl restart redis
    ##### 防火墙设置firewalld   firewall-cmd
    
    systemctl  status/stop/start/enable XX
    
    firewall-cmd 【选项】
    
    -h  , --help   帮助信息
    -v , --version 显示版本信息 【不组合】
    -q, --quiet   不打印状态
    
    --state    显示firewalld状态
    --reload    不中断服务重新加载
    --conmplete-reload  终端服务重新加载
    --runtime-to-permanent  防火墙规则永久保存
    --check-config    检查配置正确性
    
    rich rule是对于开放端口更加详细的设置,一般直接无限制开放端口使用add-port, 设置情况下使用rich rule
    
    
    firewall-cmd --get-active-zones   查看区域 【默认接口都在public区域】
    firewall-cmd --add-port=6379/tcp  --permanent  开放端口永久
    firewall-cmd --zone=public --remove-port=6379/tcp --permanent
    
    firewall-cmd --zone=public --query-port=6379/tcp
    
    firewall-cmd --zone=public --list-ports  查看所有的add-ports
    firewall-cmd --zone=public --list-all   查看所有的规则(port、rich rule等)
    
    firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="61.185.207.95" port protocol="tcp" port="22" accept"
    
    firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="11300" accept"
    
    systemctl restart  firewalld  rich rule生效
    
    - firewall-cmd    --state   查看状态
    - firewall-cmd --add-port=6379/tcp  --permanent  【bind绑定只是本机访问】
    - firewall-cmd --query-port=6379/tcp 
    - firewall-cmd --reload   之后查询yes
    
    进入/etc/selinux/config 查看selinux的状态,一般都是disabled
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • Docker环境

      • wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      • wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
      • yum clean all yum makecache iptables -F getenfore(disabled) 【本机没有iptables防火墙,使用的firewalld】
      • 网卡配置发放

      cat < /etc/sysctl.d/docker.conf
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      net.ipv4.conf.default.rp_filter = 0
      net.ipv4.conf.all.rp_filter = 0
      net.ipv4.ip_forward = 1
      EOF

      • modprobe br_netfilter

      • sysctl -p /etc/sysctl.d/docker.conf

      • curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

      • curl -o /etc/yum.repos.d/CentOS-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo

      • yum list docker-ce --showduplicates | sort -r

      • yum install docker-ce-20.10.6 -y (卸载remove)

      • mkdir -p /etc/docker

      • touch /etc/docker/daemon.json (vim)

      {
      “registry-mirrors”: [“https://registry.docker-cn.com”,“http://hub-mirror.c.163.com”,“https://docker.mirrors.ustc.edu.cn”,“https://pee6w651.mirror.aliyuncs.com”],
      “live-restore”: true
      }

      • systemctl daemon-reload
      • systemctl enable docker
      • systemctl restart docker
    • Docker中 MinIO

      • docker search minio
      • docker pull minio/minio

      公网IP的拉取可能会报错:Error response from daemon: Head https://registry-1.docker.io/v2/minio/minio/manifests/latest: TLS handshake timeout

      解析ip不可用,可以使用dig工具

      • yum install bind-utils

      • dig @114.114.114.114 registry-1.docker.io

      • vi /etc/hosts 找到上面的一组IP

        54.83.42.45 registry-1.docker.io

      • 同时修改一下镜像加速源,可以同时配置多个(上面)

      • systemctl restart docker

      • docker images

      • mkdir /data

      • docker run -p 9000:9000 -p 9001:9001 -v /data/minio/data:/data -e “MINIO_ROOT_USER=cfeng” -e “MINIO_ROOT_PASSWORD=fjVEALXufI23H2aOrZTC” 7f4aefb1a8d6 server /data --console-address “:9001”

      • docker ps -a 【docker start XXX】 开放给本机端口9001【安全组】,本机可可视化操作

    • JAVA 环境

      • java -version 【查看】

      • cd /usr/local

      • mkdir java

      • cd java

      • xftp 传输java安装包 到java文件夹

      • tar -zxvf jdk-17.0.2_linux-x64_bin.tar.gz

      • rm -f jdk-17.0.2_linux-x64_bin.tar.gz

      • vim /etc/profile

        export JAVA_HOME=/usr/local/java/jdk-17.0.2
        export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
        export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/local/mysql/mysql8/bin
        
        • 1
        • 2
        • 3
      • source /etc/profile

      • java -version

    • MySQL

      • rpm -qa | grep mariadb
      • rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
      • Xftp 传输到 software中
      • 【cd /usr/local】 mkdir mysql
      • mv mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz /usr/local/mysql/
      • tar -Jxvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
      • rm -f mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz
      • mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql8
      配置环境变量   vim   /etc/profile        source /etc/profile
      
      export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/local/mysql/mysql8/bin
      
      直接以冒号结尾,添加新的 linux中使用$XXX引用 环境变量, windows中也可以echo输出
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 【cd /usr/local/mysql/mysql8/】 mkdir data

      • groupadd mysql

      • useradd -g mysql cfeng

      • chown -R cfeng /usr/local/mysql/mysql8

      • chgrp mysql /usr/local/mysql/mysql8

      • vim /usr/local/etc/myMysql.conf

      [mysql]
      default-character-set=utf8mb4
      [client]
      port       = 3306
      socket     = /tmp/mysql.sock
      [mysqld]
      port       = 3306
      server-id  = 3306
      user       = cfeng
      socket     = /tmp/mysql.sock
      # 安装目录
      basedir    = /usr/local/mysql/mysql8
      # 数据存放目录
      datadir    = /usr/local/mysql/mysql8/data
      log-bin    = /usr/local/mysql/mysql8/data/mysql-bin
      innodb_data_home_dir      =/usr/local/mysql/mysql8/data
      innodb_log_group_home_dir =/usr/local/mysql/mysql8/data
      # 日志及进程数据的存放目录
      log-error =/usr/local/mysql/mysql8/data/mysql.log
      pid-file  =/usr/local/mysql/mysql8/data/mysql.pid
      # 服务端字符集
      character-set-server=utf8mb4
      lower_case_table_names=1
      autocommit =1
      ##### 配置相关的数据量
      skip-external-locking
      key_buffer_size = 256M
      max_allowed_packet = 1M
      table_open_cache = 1024
      sort_buffer_size = 4M
      net_buffer_length = 8K
      read_buffer_size = 4M
      read_rnd_buffer_size = 512K
      myisam_sort_buffer_size = 64M
      thread_cache_size = 128
      #query_cache_size = 128M
      tmp_table_size = 128M
      explicit_defaults_for_timestamp = true
      max_connections = 500
      max_connect_errors = 100
      open_files_limit = 65535
      binlog_format=mixed
      binlog_expire_logs_seconds =864000
      # 创建表时使用的默认存储引擎
      default_storage_engine = InnoDB
      innodb_data_file_path = ibdata1:10M:autoextend
      innodb_buffer_pool_size = 1024M
      innodb_log_file_size = 256M
      innodb_log_buffer_size = 8M
      innodb_flush_log_at_trx_commit = 1
      innodb_lock_wait_timeout = 50
      transaction-isolation=READ-COMMITTED
      [mysqldump]
      quick
      max_allowed_packet = 16M
      [myisamchk]
      key_buffer_size = 256M
      sort_buffer_size = 4M
      read_buffer = 2M
      write_buffer = 2M
      [mysqlhotcopy]
      interactive-timeout
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • mysqld --defaults-file=/usr/local/etc/myMysql.conf --basedir=/usr/local/mysql/mysql8 --datadir=/usr/local/mysql/mysql8/data --user=cfeng --initialize-insecure
      云服务器操作系统很干净,里面很多依赖都没有, 这里可能报错缺少libaio.so.1
      使用yum安装即可
      
      yum install -y libaio
      
      • 1
      • 2
      • 3
      • 4
      • mysqld_safe --defaults-file=/usr/local/etc/myMysql.conf &

      • mysql -u root --skip-password

      • ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘GZmCfk6fkKkMA5I6IDgs’;

      • FLUSH PRIVILEGES;

      • CREATE user ‘cfeng’@‘%’;

      • ALTER USER ‘cfeng’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘y84PbgfwzC1to2DiJqie’;

      • GRANT ALL PRIVILEGES ON . TO ‘cfeng’@‘%’;

      • FLUSH PRIVILEGES;

      • touch /usr/lib/systemd/system/mysql.service

      vim 
      
      [Unit]
      Description=MySQL Server
      Documentation=man:mysqld(8)
      Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
      After=network.target
      After=syslog.target
      
      [Install]
      WantedBy=multi-user.target
      
      [Service]
      User=cfeng
      Group=mysql
      ExecStart=/usr/local/mysql/mysql8/bin/mysqld_safe --defaults-file=/usr/local/etc/myMysql.conf 
      LimitNOFILE = 5000
      #Restart=on-failure
      #RestartPreventExitStatus=1
      #PrivateTmp=false
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • systemctl enable mysql
      • systemctl restart mysql
    • MongoDB依赖 【本地运行,不开放外部连接】

      • docker search mongo
      • docker pull mongo
      • 【minio的data在/data/minio/data cd /data】 mkdir -p mongo/db
      • docker run -itd -p 27017:27017 -v /data/mongo/db:/data/db mongo 【需要密码就可以设置】 这里直接运行了,不需要密码
    若需要密码,uri方式yml
    uri: mongodb://cfeng:a1234567890b@localhost:27017/XiaohuanChat
    
    • 1
    • 2
    • jar 部署
      • xftp传输jar
      • java -jar XXX 运行
      • yum install fontconfig 【验证码解析kaptcha Linux】
      • cd /usr/share/fonts
      • fc-cache
    • nohup java -jar XXX & 一直运行,不随着窗口关闭影响

    阿里云被攻击CPU爆满

    现实果然残酷,刚把服务器的安全组开放了redis和jar的端口,马上就被美国内华达的IP攻击了, CPU一下子就爆满了; 首先直观的感受: 远程的连接一下子就非常慢,卡住了, 云服务器端观察CPU从攻击时刻开始高居不下 【 不要随便开放端口, 数据库的密码设置强密码, 并且开放的IP不要让任何IP都访问,现在的黑客技术 ~ 】

    首先检查占用情况

    • top 结果没有查看任何的情况,CPU看不到占用很多的,伪装技术好啊
    • ps -ux 也没有看到占用巨量CPU的
    • pstree -p 查看进程树终于看到一个进程pncan 一次性开了几百个进程,直接从8087一直到后面…
    • kill -9 XXX 删除危险进程
    • rm -f XXX 删除脚本文件
    • crontab -r 删除定时任务

    杀了进程,查看定时任务,结果没有【又被伪装了emmm…】

    将写入的相关的sh文件删除, 如果没有权限就设置权限

    如果和Cfeng一样后面因为卡爆了,命令执行不了,只能 — 重装初始化系统 ---- 血泪教训,不要开放端口了,只给自己开了…

    需要注意ipconfig得到的是在自己无线网络中的ip地址,内网,不是公网的IP,安全组的授权对象是公网IP,61.185.207.95

    阿里云密钥对配置

    进入网络与安全 --> 密钥对 【创建密钥对】 设置密钥对名称、创建密钥,下载.pem文件到指定位置

    将生成的.pem文件复制到本地的 C盘下面的.ssh文件夹

    再在页面中选择密钥绑定,就与本地建立联系,这里就不能使用Xshell凭密码登录,必须通过密钥

    • 有时出现重启之后Xshell连接不了,就在实例中选择远程命令: 之后执行
    chmod 400 /etc/ssh/*
    
    • 1

    使用cpolar进行内网穿透

    不是所有的应用都需要上云的,作为个人开发者,很多小的测试Demo是没有必要专门买一台服务器进行部署的,这里Cfeng简单分享cpolar的内网穿透的解决方案,平时的小demo可以使用 【防火墙等安全防护措施做好,不然直接压垮】

    进入cpolar的官方网站免费注册: cpolar - 安全的内网穿透工具

    注册之后选择普通的0元免费套餐就OK了呀💙, 只是分配的域名地址是随机的,但是只要不关闭应用,那么就可以一直访问

    这里先下载Windows版本进行客户端进行介绍

    1. Linux版本, 下载客户端压缩包之后,使用xftp传输到虚拟机上面,解压安装:
    • unzip cpolar-stable-linux-386.zip -d /usr/local/cpolar
    1. 跳转到安装目录
    • cd /usr/local/cpolar
    1. 进行远程链接,使用注册后cpolar分配的authToken进行链接
    • ./cpolar authtoken ZGU5ZTJmMDUtNGRkNS00MjYzLThhOGYtNGJkNjMxYTY4ZDU2

    这里Cfeng执行后Authtoken saved to configuration file: /root/.cpolar/cpolar.yml,在这里面就是令牌

    解压之后的文件夹里就是命令cpolar, 直接通过./cpolar version可以查看版本

    还可以直接下载

    curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

    installed: /usr/local/bin/cpolar
    installed link: /usr/bin/cpolar
    installed: /usr/local/etc/cpolar/cpolar.yml
    installed: /var/log/cpolar/
    installed: /var/log/cpolar/access.log
    installed: /var/log/cpolar/error.log
    installed: /etc/systemd/system/cpolar.service
    installed: /etc/systemd/system/cpolar@.service
    removed: /tmp/tmp.rSr29Zsun2

    下载之后就可以直接使用cpolar命令

    • cpolar version
    • cpolar authtoken ZGU5ZTJmMDUtNGRkNS00MjYzLThhOGYtNGJkNjMxYTY4ZDU2
    • systemctl enable cpolar
    • systemctl start cpolar
    Authtoken saved to configuration file: /usr/local/etc/cpolar/cpolar.yml
    
    • 1
    1. 使用cpolar进行内网穿透

    coplar会默认安装两个样例通道,一个website通道,指向8080端口,一个ssh指向22端口, 在本地浏览器访问: http://localhost:9200/ 使用用户名密码访问即可

    访问之后就可以点击隧道管理,新建隧道,这里默认的两个隧道其实可以关了,避免网络攻击

    创建隧道之后,点击状态 —> 在线隧道列表列表,就可以看到映射,这里Cfeng的映射为:

    http://6bc22e18.r2.cpolar.cn http://localhost:8083
    在这里插入图片描述

    后面Cfeng会继续更新关于ICP备案和 云服务器故障处理的内容(本篇文章)

  • 相关阅读:
    vim编辑器基础命令
    【无标题】
    Linux多线程
    oak深度相机入门教程-人体姿态估计
    jsp汽车销售管理软件Myeclipse开发mysql数据库web结构java编程计算机网页项目
    IntelliJ IDEA 常用快捷键一览表
    Python 如何实现外观设计模式?什么是 Facade 外观设计模式?Python 设计模式示例代码
    如何使用 Bing Image Creator 创建图像(DALL-E3)
    6个好用到爆的音频、配乐素材网站,BGM都在这里了
    计算机毕业设计(附源码)python学生宿舍管理系统
  • 原文地址:https://blog.csdn.net/a23452/article/details/126790684