1. 总结 nginx反向代理及https安全加密。
# 生成一个字签名证书
[root@Rocky2 ~]# cd /apps/nginx/conf.d
[root@Rocky2 conf.d]# pwd
/apps/nginx/conf.d
[root@Rocky2 conf.d]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.xie.key -x509 -days 3650 -out www.xie.crt
.....+..+......+.+........+...+.........+.............+...+.....+..........+..+...+....+.....+....+......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+...+............+........+.+.....+.........+.........+..........+..+....+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+......+...+......+......+...+.....+.+.....+...................+..+.+..+......+.......+.....+............+...............................+..+..........+.........+........+.+.....+.+..................+..+.+...............+..+.....................+............+...+......+...+.............+............+........+...+....+..+.............+........+....+...+.....+.+..+..........+..............+.+.........+.....+.+...............+........+.+.....+.+...+............+...+..............+...+...+............+....+...+......+.....+...................+.....+.............+.....+..............................+...................+...+..+.+...+...........+....+......+...+.....+...+.........+......+.......+..+......+............+.......+........+.............+..+.......+.....+.........+.+........+............+....+.........+......+......+...........+.............+.........+...........+.......+..+...+...................+...........+...+.........+.+...........+.............+...+..+...+.......+.....+......+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.+....+...+...+...+.....+....+......+..+.........+...+................+.....+.......+.........+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+......+........+..........+..+......+...+....+..+.........+....+...+...+......+...........+...+....+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+.+........+......+....+......+...............+..+......................+...+..+...+............+.+.....+......+....+......+......+.....+...+.+.........+.....+.......+...+...............+.....+.........+...+.......+.....................+...........+.+.....+....+.........+.........+.................+......+...+....+.....+.......+...+.....+......+.+.....+.........+....+..+.....................+...+......+.............+.....+.+......+........+.......+..............+.+.........+.....+....+........+.......+....................+.....................+.+...+...+...+.....+.......+..+................+......+...+...+..+.......+....................+......+....+.....+...................+...........+..................+......+.+...+...+..............+......+..........+..+.+...........+....+.....+.+...+...+.........+.....+.+...............+.................+......+.....................+...+...............+.......+...+........+....+...+.................+.+..............+...............+....+............+..+.+..............+...+...+.+...........+....+......+.......................+.......+.....+.........+.........+....+...+...+......+...........+.............+.....+.+.....+...+.+.....+......+....+.........+........+...+......+................+..+...............+.......+........+.......+.....+.+........+.+.......................+.........................+......+......+..................+...+.................+.+..............+............+.........+...................+..+..........+.........+..+...+.+......+........+......+..................+.+..+....+......+..+...+....+..................+..+......+....+.....+.........+.+........+.............+.........+.....+...............+.........+.+.....+.+.............................+.........+.+......+...+..+.........+.........+......+........................+.+.....+.............+........+.......+......+.................+....+.....+.+..+.+........................+...+..+................+..+.........+.+.........+.........+......+...+...........+......+...................+......+...+........+.............+.........+.....+...+.........+....+.....+.......+.................+...............+.+......+.....................+...+..+..........+.................+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:SHANGHAI^H
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:xie
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:10.0.0.130
Email Address []:
[root@Rocky2 conf.d]# vim server_a.conf
upstream webserver {
server 10.0.0.129;
server 10.0.0.131;
}
vhost_traffic_status_zone;
server {
listen 443 ssl;
ssl_certificate /apps/nginx/conf.d/www.xie.crt;
ssl_certificate_key /apps/nginx/conf.d/www.xie.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
server_name 10.0.0.130;
root /data/nginx/html/pc;
location = /nginx_status {
stub_status;
}
}
server {
server_name 10.0.0.130;
root /data/nginx/html/pc;
listen 80;
location ~ \.(jpg|png|gif)$ {
proxy_pass http://10.0.0.129;
}
location / {
proxy_pass http://webserver;
# proxy_cache off;
# proxy_cache_key $request_uri;
# proxy_cache_valid any 5m;
}
location = /nginx_status {
stub_status;
}
}
2. 完成nginx实现LNMP架构wordpress应用
# 创建数据库
[root@web02 ~]# mysql -e "create database wordpress;"
[root@web02 ~]# mysql -uxie -p111111
# 下载workpress
[root@web01 ~]# cd /data/php
[root@web01 php]# pwd
/data/php
[root@web01 php]# rz -E
rz waiting to receive.
[root@web01 php]# ll
总用量 24724
-rw-r--r-- 1 root root 20 4月 7 13:23 test.php
-rw-r--r-- 1 root root 25310023 4月 7 13:57 wordpress-6.2-zh_CN.zip
[root@web01 php]# unzip wordpress-6.2-zh_CN.zip
[root@web01 php]# chown -R nginx. /data/php
[root@web01 php]# yum -y install php-mysqlnd
[root@proxy ~]# cat /apps/nginx/conf.d/server_a.conf
#upstream webserver {
#hash $http_cookie;
# hash $remote_addr;
#server 10.0.0.129;
#server 10.0.0.131;
#}
# proxy_cache_path /data/nginx/proxycache levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
server {
listen 443 ssl;
ssl_certificate /apps/nginx/conf.d/www.xie.crt;
ssl_certificate_key /apps/nginx/conf.d/www.xie.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
server_name 10.0.0.130;
root /data/nginx/html/pc;
}
server {
server_name 10.0.0.130;
root /data/nginx/html/pc;
index index.php;
listen 80;
location ~ \.(jpg|png|gif)$ {
proxy_pass http://10.0.0.129;
}
location ~ \.php$ {
root /data/php;
fastcgi_pass 10.0.0.129:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~^/(ping|fpm_status)$ {
fastcgi_pass 10.0.0.129:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
root /data/nginx/html/pc;
#proxy_pass http://webserver;
# proxy_cache off;
# proxy_cache_key $request_uri;
# proxy_cache_valid any 5m;
}
location = /nginx_status {
stub_status;
}
}
[root@proxy ~]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@proxy ~]# nginx -s reload
3. 总结 JumpServer管理配置
JumpServer:堡垒机,跟openVPN相似,万一openVPN泄露相当危险,黑客想干嘛干嘛,而且没有监控
JumpServer不就能让用户连接到内部,而且还有限制用户访问的功能和限制用户命令的执行,能记录用户的操作
四大核心功能:
- 身份鉴别
- 授权控制
- 账号管理
- 安全审计
安装
# docker一键安装脚本
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2020-02-04
#FileName: install_docker.sh
#URL: http://www.wangxiaochun.com
#Description: The test script
#Copyright (C): 2020 All rights reserved
#********************************************************************
DOCKER_VERSION="20.10.10"
UBUNTU_DOCKER_VERSION="5:${DOCKER_VERSION}~3-0~`lsb_release -si`-`lsb_release -cs`"
#UBUNTU_DOCKER_VERSION="5:20.10.9~3-0~`lsb_release -si`-`lsb_release -cs`"
#UBUNTU_DOCKER_VERSION="5:19.03.14~3-0~lsb_release -si-`lsb_release -cs`"
COLOR_SUCCESS="echo -e \\033[1;32m"
COLOR_FAILURE="echo -e \\033[1;31m"
END="\033[m"
. /etc/os-release
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
install_docker(){
if [ $ID = "centos" -o $ID = "rocky" ];then
if [ $VERSION_ID = "7" ];then
cat > /etc/yum.repos.d/docker.repo <<EOF
[docker]
name=docker
gpgcheck=0
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
EOF
else
cat > /etc/yum.repos.d/docker.repo <<EOF
[docker]
name=docker
gpgcheck=0
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/x86_64/stable/
EOF
fi
yum clean all
${COLOR_FAILURE} "Docker有以下版本"${END}
yum list docker-ce --showduplicates
${COLOR_FAILURE}"5秒后即将安装: docker-"${DOCKER_VERSION}" 版本....."${END}
${COLOR_FAILURE}"如果想安装其它Docker版本,请按ctrl+c键退出,修改版本再执行"${END}
sleep 5
yum -y install docker-ce-$DOCKER_VERSION docker-ce-cli-$DOCKER_VERSION \
|| { color "Base,Extras的yum源失败,请检查yum源配置" 1;exit; }
else
dpkg -s docker-ce &> /dev/null && $COLOR"Docker已安装,退出" 1 && exit
apt update || { color "更新包索引失败" 1 ; exit 1; }
apt -y install apt-transport-https ca-certificates curl software-properties-common || \
{ color "安装相关包失败" 1 ; exit 2; }
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt update
${COLOR_FAILURE} "Docker有以下版本"${END}
apt-cache madison docker-ce
${COLOR_FAILURE}"5秒后即将安装: docker-"${UBUNTU_DOCKER_VERSION}" 版本....."${END}
${COLOR_FAILURE}"如果想安装其它Docker版本,请按ctrl+c键退出,修改版本再执行"${END}
sleep 5
apt -y install docker-ce=${UBUNTU_DOCKER_VERSION} docker-ce-cli=${UBUNTU_DOCKER_VERSION}
fi
if [ $? -eq 0 ];then
color "安装软件包成功" 0
else
color "安装软件包失败,请检查网络配置" 1
exit
fi
}
config_docker (){
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],
"insecure-registries":["harbor.magedu.org:80"]
}
EOF
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
docker version && color "Docker 安装成功" 0 || color "Docker 安装失败" 1
}
set_alias (){
echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
}
install_docker
config_docker
set_alias
# 安装mysql
[root@10 ~]# mkdir -p /etc/mysql/mysql.conf.d/
[root@10 ~]# mkdir -p /etc/mysql/conf.d/
[root@10 ~]# vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
pid-file=/var/run/mysql/mysql.pid
socket=/var/run/mysql/mysql.sock
datadir=/var/lib/mysql
symbolic-links=0
character-set-server-utf8
[root@10 ~]# vim /etc/mysql/conf.d/mysql.cnf
[mysql]
default-character-set=utf8
下载:
[root@10 ~]# docker run -d -p 3306:3306 --name mysql --restart always \
-e MYSQL_ROOT_PASSWORD=111111 \
-e MYSQL_DATABASE=jumpserver \
-e MYSQL_USER=jumpserver \
-e MYSQL_PASSWORD=111111 \
-v /data/mysql:/var/lib/mysql \
-v /etc/mysql/mysql.conf.d/mysql.cnf:/etc/mysql/mysql.conf.d/mysql.cnf \
-v /etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf mysql:5.7.30
# 安装·redis
[root@10 ~]# docker run -p 6379:6379 --name redis --restart always redis:5.0.9
# 部署jumpserver
生成key
[root@10 ~]# vim key.sh
[root@10 ~]# cat key.sh
if [ ! "$SECRET_KEY" ]; then
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`;
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc;
echo SECRET_KEY=$SECRET_KEY;
else
echo SECRET_KEY=$SECRET_KEY;
fi
if [ ! "$BOOTSTRAP_TOKEN" ]; then
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`;
echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;
echo BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN;
else
echo BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN;
fi
[root@10 ~]# bash key.sh
SECRET_KEY=4hQohLi9OMtdTg4Ff9Uhr82cNmn8zwDYv1QQlTvsVINQ2oUQ5b
BOOTSTRAP_TOKEN=KWO3S3MwG7lVDQ2g
安装
[root@10 ~]# docker run --name jms_all -d \
-v /opt/jumpserver/core/data:/opt/jumpserver/data \
-v /opt/jumpserver/koko/data:/opt/koko/data \
-v /opt/jumpserver/lion/data:/opt/lion/data \
-p 80:80 \
-p 2222:2222 \
-e SECRET_KEY=3VGBijG58Rfhej52uMIhGNBa8RbxNYcMBSJSHF4kbQikz1U9oL \
-e BOOTSTRAP_TOKEN=8RyOeNOMqVItJe8U \
-e LOG_LEVEL=ERROR \
-e DB_HOST=10.0.0.145 \
-e DB_PORT=3306 \
-e DB_USER=jumpserver \
-e DB_PASSWORD=111111 \
-e DB_NAME=jumpserver \
-e REDIS_HOST=10.0.0.145 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD='' \
--privileged=true \
jumpserver/jms_all
创建Jumpserver用户
1.点击页面左侧"用户列表"菜单下的"用户列表", 进入用户列表页面
2.点击页面左上角"创建用户"按钮, 进入创建用户页面, (也可以通过右上角导入模版进行用户导入)
3.其中, 用户名即 Jumpserver 登录账号(具有唯一性, 不能重名)。名称为页面右上角用户标识(可重复)
4.成功提交用户信息后, Jumpserver 会发送一条设置"用户密码"的邮件到您填写的用户邮箱
5.点击邮件中的设置密码链接, 设置好密码后, 您就可以用户名和密码登录 Jumpserver 了。
6.用户首次登录 Jumpserver, 会被要求完善用户信息, 按照向导操作即可。
编辑资产树并创建资产
- "节点"不能重名, 右击节点可以添加、删除和重命名节点, 以及进行资产相关的操作
- 注:如果有 linux 资产和 windows 资产, 建议先建立 Linux 节点与 Windows 节点, 不然"授权"时不好处理
- 点击页面左侧的"资产管理"菜单下的"资产列表"按钮, 查看当前所有的资产列表。
- 点击页面左上角的"创建资产"按钮, 进入资产创建页面, 填写资产信息。
- IP 地址和管理用户要确保正确, 确保所选的管理用户的用户名和密码能"牢靠"地登录指定的 IP 主机上。
- 资产的系统平台也务必正确填写。公网 IP 信息只用于展示, 可不填, Jumpserver 连接资产使用的是 IP 信息。
创建管理用户
- "管理用户"是资产上的 root, 或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。 Windows或其它硬件可随意设置一个
- "名称" 不能重复
- "ssh私钥" 如果私钥有密码, 请把key的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥
创建系统用户
- "系统用户"是 Jumpserver 跳转登录资产时使用的用户, 用户使用该用户登录资产
- "自动生成密码"、"自动推送"、"Sudo"等功能需要对应资产的"管理用户"是且有root权限, 否则自动推送失败
- ssh 协议的 "Sudo" 栏设定用户的 sudo 权限
- ssh 协议如果创建的"系统用户"已在资产上面存在, "推送"将会覆盖掉原用户的"home"目录权限(注: 替换成700权限)
- ssh 协议的 "ssh私钥" 如果私钥有密码, 请把key的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥
这里简单举几个 "sudo" 设置例子
Sudo /bin/su # 当前系统用户可以免sudo密码执行sudo su命令 Sudo /usr/bin/git, /usr/bin/php, /bin/cat, /bin/more, /bin/less, /usr/bin/tail 当前系统用户可以免sudo密码执行git php cat more less tail Sudo !/usr/bin/yum # 当前系统用户不可以执行sudo yum命令
- 此处的权限应该根据使用用户的需求汇总后定制, 原则上给予最小权限即可
- "系统用户"创建时, 如果选择了"自动推送" Jumpserver 会使用"Ansible"自动推送系统用户到资产中, "root"用户不支持推送
- 如果资产(交换机、Windows)不支持"Ansible", 请去掉"自动生成密钥"、"自动推送"勾选。手动填写资产上已有的账号及账号密码
- 如果想让用户登录资产时自己输入密码, 可以在创建系统用户时选择"手动登录"
创建授权规则
- "名称", 授权的名称, 不能重复
- "用户"和"用户组"二选一, 不推荐即选择用户又选择用户组
- "资产"和"节点"二选一, 选择节点会包含节点下面的所有资产
- "系统用户", 及所选的用户或用户组下的用户能通过该系统用户使用所选节点或者节点下的资产
- 用户(组), 资产(节点), 系统用户是一对一的关系, 所以当拥有 Linux、Windows 不同类型资产时, 应该分别给 Linux 资产和 Windows 资产创建授权规则
4. 总结 tomcat实现多虚拟机
vim /usr/local/tomcat/conf/server.xml
# 添加自己的网站
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>