Linux.note
·附件:

·小点:
1、CA颁发证书的有效期为 730天:
vim /usr/lib/ssl/misc/CA.pl
2、iscsi开启多路径:
在客户端上配置:(两台客户端配置相同)
apt install -y multipath-tools新配置(12.11):
# 指定 iscsi磁盘:
multipath -a `/usr/lib/udev/scsi_id -g -d /dev/sdb` //使用反引号
systemctl restart multipathd
# 查看:
multiapth -ll
旧的配置(12.11之前):
# 指定iscsi共享过来的磁盘:
/usr/lib/udev/scsi_id -g -d /dev/sdb >> /etc/multipath.confvim /etc/multipath.conf
systemctl restart multipathd
3、为loopback接口配置ip地址:
vim /etc/network/interfaces
systemctl restart networking

·nftables 防火墙:
1、Router1:

apt install -y iptables iptables-persistent2、Router2:

apt install -y iptables iptables-persistent3、Router3:

apt install -y iptables iptables-persistent·dhcp:
data:




将domain-search改为domain-name即可
一、DNS:(Mail1、Mail2 外网DNS)
Mail1:
vim /etc/bind/named.conf

vim /etc/bind/named.conf.options
vim db.root
vim db.delix
vim db.xvsex
# 参数:$GENERATE
vim db.root_out
vim db.delix_out
Mail2:
chmod 777 /etc/bind
vim /etc/apparmor.d/usr.sbin.named
systemctl restart apparmor
vim /etc/bind/named.conf

vim /etc/bind/named.conf.options
二、磁盘:(Data上Raid10、LVM、iscsi)
Raid10:
apt install -y mdadm
mdadm -C /dev/md0 -l10 -n4 -x1 /dev/sd[bcdef]
mdadm -Ds >> /etc/mdadm/mdadm.conf
update-initramfs -ulvm:
apt install -y lvm2
pvcreate /dev/md0
vgcreate vg0 /dev/md0
lvcreate -L 1.99g -n lv0 vg0iscis:
服务器不需要格式化 iscsi磁盘
apt install -y tgt
vim /etc/tgt/targets.conf
systemctl restart tgt
客户端(Mail1、Mail2):
# 两台配置都一样:
apt install -y open-iscsi
vim /etc/iscsi/iscsid.conf
iscsi -t sendtargets -m discovery -p 172.16.100.103
systemctl restart iscsi
在客户端上配置:(两台客户端配置相同)
apt install -y multipath-tools新配置(12.11):
# 指定 iscsi磁盘:
multipath -a `/usr/lib/udev/scsi_id -g -d /dev/sdb` //使用反引号
systemctl restart multipathd
# 查看:
multiapth -ll
旧的配置(12.11之前):
# 指定iscsi共享过来的磁盘:
/usr/lib/udev/scsi_id -g -d /dev/sdb >> /etc/multipath.confvim /etc/multipath.conf
systemctl restart multipathd
三、Mysql:
1、NFS:(Storage1、Storage2)

题目需要是互为主备的高可用,但是配置比较繁琐,这里有一个取巧的办法:在Router3上再配置一个 nfs,共享目录给 Storage1和Storage2挂载为 /website,Storage1和Storage2再正常配置nfs将目录共享给 App1和App2,App1和App2随便挂载这两台机器之一来使用即可
# Router3:
apt install -y nfs-kernel-server
mkdir /website
vim /etc/exports
exportfs -av
# Storage1、Storage2:
vim /etc/fstab
# _netdev不是必要选项,因为配置了这个后开机会卡住,这个选项能够让开机重启快很多
或:

mount -a
重启后需要手动挂载,会掉
# Storage1、Storage2:
apt install -y nfs-kernel-server
mkdir /website
vim /etc/exports
exportfs -av
systemctl restart nfs-server
如果不写会提示出来,不用背

# App1、App2上挂载:
mkdir -p /htdocs/html
vim /etc/fstab
这样在 App1上创建文件,其他机器都能同步:


2、mysql:(Storage1、Storage2)
(1)配置Mysql主从:
# 主服务器(Storage1):
apt install -y mariadb-server
vim /etc/mysql/mariadb.conf.d/50-server.cnf

这个路径是没有的,需要创建:
mkdir -p /var/log/mysql
touch /var/log/mysql/mysql-bin.log
chown -R mysql:mysql /var/log/mysql
systemctl restart mysql
# 创建数据库、用户:
## 使用默认的用户来进行主从数据库同步,因为题目指定的root用户、dbadmin用户都不允许Stroage2访问。
grant all privileges on *.* to 'mysql'@'%' identified by 'CNSkills-2023';
flush privileges;# 查看主服务器信息 并记录:
show master status;# 从服务器(Storage2):
apt install -y mariadb-server
vim /etc/mysql/mariadb.conf.d/50-server.cnf

这个路径是没有的,需要创建:
mkdir -p /var/log/mysql
touch /var/log/mysql/mysql-bin.log
chown -R mysql:mysql /var/log/mysql
systemctl restart mysql
# 配置从数据库连接主数据库:
mysql
stop slave; //必须先停止数据库
change master to master_host='172.16.100.201',master_user='mysql',master_password='CNSkills-2023',master_log_file='mysql-bin.000001',master_log_pos=1220;
start slave; //启动数据库
# 主服务器上创建用户和数据库测试:
create database wordpress;
grant all privileges on *.* to 'root'@'localhost' identified by 'CNSkills-2023';
grant all privileges on wordpress.* to 'dbadmin'@'172.16.100.101' identified by 'CNSkills-2023';
grant all privileges on wordpress.* to 'dbadmin'@'172.16.100.102' identified by 'CNSkills-2023';
flush privileges;
从服务器上查看:
同步成功:

(2)数据库备份脚本:

vim /shells/sqlbackup.sh
四、Web、代理:
这里没有完全做完,因为有着很多个代理,导致拒绝其他域名和IP的效果没有做成功(在Haproxy上配置的)
1、Web(App1、App2):
(1)基础配置、php配置:
# App1、App2:
apt install -y nginx php8.2-fpm wordpress
adduser webuser
echo '<?php phpinfo(); ?>' > /htdocs/html/test.php
mkdir -p /var/log/webs/www.delix.com
vim /etc/nginx/nginx.conf


# 开启 php OPCache缓存:
vim /etc/php/8.2/fpm/php.ini
systemctl restart php8.2-fpm
vim /root/php.sh
chmod 777 /root/php.sh
bash /root/php.sh &
echo 'bash /root/php.sh &' >> /etc/profile
cp -r /usr/share/wordpress/* /htdocs/html
cp /usr/share/wordpress/.htdocss /htdocs/html
rm /htdocs/html/wp-config.php
chmod -R 777 /htdocs/html
vim /etc/nginx/sites-enabled/default


systemctl restart nginx
(2)wordpress配置:
允许注册:

·发布中文内容、伪静态:
apt install -y ibus-pinyin ibus-table fonts-wqy-* -y安装完成后重启
添加 中文输入法:


切换输入法:

# web配置:
vim /etc/nginx/sites-enabled/default
网站配置:

发布文章:
图片不能够直接拖进去,但是在外面Ctrl+C,在里面Ctrl+v就行
不能直接在 URL这里写 . 它会自动将 . 转换为 -

修改uri:

查看文章:

(3)停机维护页面:
Router3 上配置:
将IP设置为 Proxy1和Proxy2上keepalived的虚拟IP即可
写法一:
echo '172.16.100.101 www.delix.com' >> /etc/hosts

chmod 777 /root/nft.sh
bash /root/nft.sh &
echo 'bash /root/nft.sh &' >> /etc/profile
写法二:(拷贝不同版本的nftables.conf 配置文件,然后重启nftables)
echo '172.16.100.101 www.delix.com' >> /etc/hosts
这个需要配置完全部nftables之后再配置
第一份nftables:
包含 nat规则
第二份nftables:
不包含 nat规则
脚本:
最少 sleep 2秒,否则过于频繁重启nftables会报错

chmod 777 /root/nft.sh
bash /root/nft.sh &
echo 'bash /root/nft.sh &' >> /etc/profile
# Router3:
apt install -y apache2
a2enmod ssl配置中文内容:
切换输入法:

直接编写中文然后拷贝给 web即可

apache2 需要编写一下 index 文件,否则客户端显示是乱码:

2、Nginx反向代理、Keepalived:(Proxy1、Proxy2)
apt install -y nginx keepalived(1)nginx:
记得信任web根证书
vim /etc/nginx/sites-enabled/default两种写法:
因为配置了拒绝IP访问,仅允许
写法一:

写法二:
如果 upstream的名称不是域名,就需要手动指定proxy HTTP头部

否则会403报错:(因为后端拒绝IP访问)

按照上面的方式配置好后测试:


(2)keepalived:
# Proxy1:
vim /etc/keepalived/keepalived.conf
systemctl restart keepalived
Proxy2 的优先级设置为 200
3、Squid反向代理:(Cache1、Cache2)
记得信任web根证书
apt install -y squid-opensslcp squid.conf squid.conf.bak
egrep -v '^$|^#' squid.conf.bak > squid.conf
vim squid.conf
systemctl reload squid
4、HAproxy代理:(Router1)
记得信任web根证书
apt install -y haproxy
vim /usr/share/doc/haproxy/examples/content-sw-sample.cfg
cat /etc/ssl/ssl.crt /etc/ssl/ssl.key > /etc/haproxy/haproxy.pem
vim /etc/haproxy/haproxy.cfg
# 这里的一条注释内容一定也要注释,否则haproxy无法工作
systemctl restart haproxy
五、Pure-FTP:(App1、App2)
1、配置 Pure-FTP:
apt install -y pure-ftpd
cd /etc/pure-ftpd
# 开启SSL,强制启用SSL
echo 2 > conf/TLS
# 将证书放到ftp默认的证书路径上:
cat /etc/ssl/ssl.crt /etc/ssl/ssl.key > /etc/ssl/private/pure-ftpd.pem
# 创建 ftp 虚拟用户zhangsan:
pure-pw useradd zhangsan -u webuser -d /htdocs/html
pure-pw mkdb
# 添加身份认证方式:(必须使用绝对路径,必须使用软连接,名称任意,但是开头的数字必须小于 65)
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/60-PureDB
# 开启被动端口,用于通过防火墙:
echo '40000 50000' > /etc/pure-ftpd/conf/PassivePortRange
## 能够在 Pure-ftpd --help 中查看到这个文件名称
## 文件名严格区分大小写,必须首字母大写,按照我的这个路径
systemctl restart pure-ftpd
·测试:
ls 时需要稍微等 1~2秒

六、使用 ssh router2 访问ssh:
# 客户端配置:
echo '47.119.161.29 router2' >> /etc/hosts
ssh-keygen -t ed25519
ssh-copy-id skills@router2
cp -r ~/.ssh /etc/skel
cp -r ~/.ssh /home/skills# Router2配置:
vim /etc/sudoers
vim /home/skills/.bashrc
·测试:

七、KVM:(Mail1、Mail2)
1、配置 KVM:
apt install -y virt-manager bridge-utils(1)配置网卡:
# Mail1:
vim /etc/network/interfaces

# Mail2:
vim /etc/network/interfaces

(2)创建虚拟机:
virt-install --name vm01 --os-variant debian11 --memory 1024 --vcpus 1 --disk size=4 --network bridge=br0 --location /dev/sr0 --graphics none --console pty,target_type=serial --extra-args "console=ttyS0"
# console这里不能够有任何空格

稍等一会就会自动进入kvm了:

然后执行安装操作即可
安装需要的时间比较久,建议比赛时提前做kvm,本次实验kvm安装了一个半小时
(3)虚拟机操作:
# 进入虚拟机:
virsh console vm01
# 查看所有虚拟机:
virsh list --all
# 启动虚拟机:
virsh start vm01
# 进入虚拟机关闭虚拟机:
virsh console vm01
poweroff
Ctrl + ] //退出
# 强制关闭虚拟机:
virsh destroy vm01
# 删除虚拟机:(需要先关闭虚拟机)
virsh undefine vm01
# 退出虚拟机:(按键盘)
Ctrl + ]2、虚拟机迁移:
(1)配置NFS共享虚拟机根目录:
# 将虚拟机存储的机器(Mail1)配置为NFS服务器:
## 共享 /var/lib/libvirt/images 目录
apt install -y nfs-kernel-server
vim /etc/exports
exportfs -av
# Mail2上挂载nfs目录:
apt install -y nfs-client
vim /etc/fstab
mount -a
(2)迁移虚拟机:

需要先完成前面的nfs挂载步骤
# 虚拟机必须是开机状态才能够进行迁移
virsh migate --live --persistent --undefinesource --unsafe vm01 qemu+ssh://172.16.100.102/system可以看到迁移后Mail1本地已经没有虚拟机了:

Mail2查看:

# 要完成题目的要求需要在Mail1和Mail2两端都给对端传ssh密钥,使他们都能够免密连接ssh
Mail1:
ssh-keygen
ssh-copy-id root@172.16.100.102
Mail2:
ssh-keygen
ssh-copy-id root@172.16.100.101# 配置 vmmigrate命令:
## 可以在/root/.bashrc 配置 alias:Mail1:

Mail2:

source ~/.bashrc
## 也可以将其配置成shell命令放到 /usr/bin/目录下
vim /usr/bin/vmmigrate //新建一个文件,将virsh ... 命令写入即可
chmod 777 /usr/bin/vmmigrate3、客户端通过ssh访问kvm虚拟机:

(1)虚拟机 挂载镜像源安装软件包:
# 将 /dev/sr0 挂载进虚拟机
virsh change-media vm01 sdb /dev/sr0 --block
# 安装软件包:
virsh console vm01
apt-cdrom add
apt install -y vim dbus ssh(2)虚拟机 配置IP:
vim /etc/network/interfaces
systemctl restart networking
(3)虚拟机配置ssh服务:
配置允许 root 用户登录
(4)防火墙配置dnat:
操作过程这里不赘述,在边界防火墙上将22端口映射到虚拟机IP即可
将 47.119.161.17 映射到 172.16.100.110(虚拟机IP) 的22端口即可
# Router1:
vim /etc/nftables.conf
(5)客户端配置路由、ssh密钥拷贝给 虚拟机:
# 配置 47.119.161.17的路由指向 Router1:
apt install -y frr
vtysh
conf t
ip route 47.119.161.17 255.255.255.255 47.119.161.30
end
wr
# 配置 ssh:
ssh-keygen
ssh-copy-id root@
·测试:

4、vmcli 命令:

# Client:
vim /usr/bin/vmcli
chmod 777 /usr/bin/vmcli