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

部署运维

内容管理

    • 阿里云服务器
    • 环境配置
    • 阿里云被攻击CPU爆满
    • 阿里云密钥对配置
    • 使用cpolar进行内网穿透


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


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 ~]# 

之后就进入了云服务器的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
  • 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
      
    • 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输出
    
    • 【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
    
    • 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
    
    • 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
    
    • 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
  • 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/*

使用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/[email protected]
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. 使用cpolar进行内网穿透

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

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

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

http://6bc22e18.r2.cpolar.cn http://localhost:8083
【云服务器】阿里云部署项目、攻击CPU解决方案_第1张图片

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

你可能感兴趣的:(开发技术【各层技术,docker部署】,服务器,阿里云,linux,服务发现,web,app)