A.note

noteId: WEB61c39a580d74cdd265df5e891c7b0097 · 原始路径:/ALL/世赛题目(练习) - 笔记/第48届/06-国赛解题/A.note · 图片:145 · 附件待处理:2

 
# 做题顺序(视实际情况而变动):
脚本初始化(ntp客户端、ssh、vim开启行号、FQDN)
ip
ntp(server)
keepalived
dns、dhcp、ddns
磁盘、mysql
snat
CA
mail
ldap
web,haproxy,squid
dnat
openvpn
vsftpd
ansible
 
 
·初始化:
apt install -y vim dbus net-tools man bash-completion ipcalc systemd-timesyncd openssl ca-certificates mailutils smbclient curl lynx dnsutils ldap-utils ftp lftp wget ssh nfs-client rsync telnet tcpdump lsof nmap dnsutils traceroute tcptraceroute
 
systemctl start dbus
 
echo -e 'China@4839\nChina@4839' | passwd root
echo -e 'China@4839\nChina@4839' | passwd skills
 
echo "permitrootlogin yes" >> /etc/ssh/sshd_config
 
systemctl restart sshd
 
echo "NTP=47.119.161.20.100" >> /etc/systemd/timesyncd.conf
systemctl restart systemd-timesyncd
 
timedatectl set-timezone Asia/Shanghai
localectl set-x11-keymap us
 
hostnamectl set-hostname 
 
 
sed -i "s/^127.0.1.1.*/127.0.1.1 $(hostname).chinaskills.org $(hostname) debian/" /etc/hosts
 
 
·小点:
 
1、静态路由(Edge-R):
# 需要在 GW1、GW2上开启 arp代理:
vim /etc/sysctl.conf
这一段需要记:
sysctl -p
 
 
# Edge-R:
apt install -y frr
vtysh
conf t
ip route 192.168.1.0/24 ens33
ip route 192.168.2.0/24 ens33
end
wr
 
 
2、nftables:
 
3、生成crl文件,并转换格式:
# 生成crl文件:
openssl ca -gencrl -out ca.crl
 
# 将crl的pem格式转换为der(否则命令无法识别):
openssl crl -in ca.crl -inform PEM -outform DER -out host.skill2025.cn.crl
## 将crl和crt文件全部拷给server服务器配置 crl网站即可
 
 
 
一、LDAP:
假设是下面的用户:
 
1、添加用户、OU :
导入多个OU的话,有两种方式:
一种是将各自的组导入各自的OU中
一种是将所有组导入 groups OU中
 
apt install -y slapd ldapscripts
 
# 先创建一个模板:
vim ou.ldif
 
vim users
 
vim usertemp
 
cd /etc/ldapscripts
echo -n China@4839 > ldapscripts.passwd
vim ldapscripts.conf
 
# (重点)编写脚本:
vim add.sh
注释的内容是因为已经执行过一次了
bash add.sh
 
 
使用上面的脚本确实能够创建用户,但是没有将用户加入组,只是在用户属性中添加了gidNumber,让ldap能够识别组
要将用户加入组,需要再继续配置:
ldapaddusertogroup
(这个点无需配置,国内不会考的)
执行ldapaddusertogroup之后:
此时组的属性中就会出现 memberUid
 
 
 
2、ldaps,禁用匿名访问、启用日志:
 
cp /usr/share/doc/slapd/example/slapd.conf .
 
slappasswd >> slapd.conf
vim slapd.conf
:%s/dc=example,dc=com/dc=chinaskills,dc=org/
或者这里用loglevel stats也可以
 
mkdir ~/backup
mv slapd.d/* ~/backup
slaptest -f slapd.conf -F slapd.d
chown openldap /etc/ssl/*
chown -R openldap:openldap slapd.d/
systemctl restart slapd
 
 
3、配置 日志:
apt install -y rsyslog
vim /etc/rsyslog.conf
# ldap默认的日志设施为 local4,因此我们只需要获取 日志设施为local4的日志即可
日志文件无需创建
 
查看:
 
 
 
(2)apache2配置仅允许 Sales组访问:
因为用户属性中只有 gidNumber 能够代表组,因此我们需要匹配这个属性来进行限制
vim /etc/apache2/sites-enabled/000-default.conf
# 使用 Require ldap-attribute gidNumber="10002" 来进行限制
## 加不加双引号无所谓,都能用:
用组进行限制:
 
用OU进行限制:
 
 
二、Mysql
 
1、配置 mysql:
mysql
create database wordpress;
grant all privileges on wordpress.* to 'admin'@'%' identified by 'Skills39';
flush privileges;
 
# 或者:
grant all privileges on wordpress.* to 'admin'@'192.168.10.1' identified by 'Skills39';
 
·为root启用 unix和 Password认证:
grant all privileges on *.* to 'root'@'localhost' identified via unix_socket;
grant all privileges on *.* to 'root'@'%' identified by 'Skills39';
flush privileges;
查看:
 
 
·如果要导入 roundcube数据库:
路径:/usr/share/roundcube/SQL/mysql.initial.sql
 
mysql roundcube < mysql.inital.sql
 
2、mysql开启ssl:
先等wordpress连接上,并且创建了 wp-config.php 文件后再配置,否则wordpress连接失败不会创建wp-config.php文件
vim /etc/mysql/mariadb.conf.d/50-server.cnf
# 取消注释,然后修改内容即可:
systemctl restart mysql
 
·查看:
 
3、wordpress连接SSL mysql:
# 编辑wordpress根目录的 wp-config.php文件
vim /apache2/wp-config.php
添加一行:
DB_HOST 这里写IP或者域名都是可以的
 
需要记后面的 MYSQLI_CLIENT_SSL:
grep -r MYSQL ./*
注意它这里是 defined ,我们需要去掉它后面的 d
 
三、磁盘:
 
硬盘要添加3块10G的 / 或者4块5G的,否则大小不够
1、raid:
mdadm -C /dev/md0 -l5 -n2 -x1 /dev/sd[bcd]
mdadm -Ds >> /etc/mdadm/mdadm.conf
update-initramfs -u
 
 
2、lvm:
pvcreate /dev/md0
vgcreate vg /dev/md0
lvcreate -L 5G -n lv01 vg
lvcreate -L 2G -s -n lv01-snap /dev/vg/lv01    //创建快照(需要使用vg的空间)
 
lvcreate -L 2.988G -n lv02 vg    //再用剩下的空间来创建lv磁盘
或:
lvcreate -l 100%FREE -n lv02 vg
 
 
 
3、磁盘加密:
 
 
 
(1)配置 磁盘加密:
apt install -y cryptsetup
 
注意:加密磁盘会格式化磁盘,会清空其中内容,如果有内容需要先备份
# 加密磁盘
cryptsetup luksFormat /dev/vg0/web
必须要输入大写的 YES
 
# 映射磁盘:
## 加密的磁盘必须通过映射,并且使用密码调用才能够使用,源磁盘无法直接使用
cryptsetup open /dev/vg0/web crypt
会映射到 /dev/mapper 下:
 
# 类似 mdadm一样,将操作写入配置文件,配置持久化(重启不失效)
 
echo -n Skills39 > /etc/key    //输出密码到文件中
vim /etc/crypttab
这里需要定义密码文件,不能够直接输入密码
update-initramfs -u //不输入也行(直接重启也是OK的)
 
此时就可以正常进行格式化,并挂载了:
mkfs.ext4 /dev/mapper/crypt
vim /etc/fstab
systemctl daemon-reload
mount -a
 
·查看:
cryptsetup status crypt
 
此时使用源磁盘进行挂载,报错 ‘unknown filesystem type crypto_LUKS’,并且无法挂载就是正常的
 
# 查看
blkid /dev/vg0/web
 
 
(2)配置成脚本:
 
·加密脚本:
也可以在 mount 之前配置 systemctl daemon-reload
(注意)不能够在 cryptsetup open 这条命令里面加 -r 选项,它表示该磁盘为只读,这样配置了会导致无法格式化
先将磁盘格式化,然后进行创建磁盘和挂载的操作即可
vim crypt.sh
 
#!/bin/bash
echo Skills39 | cryptsetup open /dev/vg0/web crypt
mkfs.ext4 -F /dev/mapper/crypt
mount /dev/mapper/crypt /test
 
 
·解密脚本:
vim decrypt.sh
 
umount /test
cryptsetup -r close crypt
 
 
 
(3)删除加密:
删除后无法保留数据,必须在删除前手动备份磁盘内的内容
umount /test
cryptsetup close crypt
mkfs.ext4 -F /dev/vg0/web
 
查看:
blkid /dev/vg/lv02
 
 
 
四、CA:
# 证书吊销:
man x509v3_config > 123
 
vim /etc/ssl/openssl.cnf
 
 
 
 
五、Keepalived:
注意:keepalived优先级不能够设置成255,否则即使脚本检测成功,也不会将IP切换到备份设备
 
# GW1:
vim /etc/keepalived/keepalived.conf
注意要手动添加 preempt ,否则不会切换
注意这里不能使用 killall,因为默认没有下载,使用systemctl status
 
# GW2:
vim /etc/keepalived/keepalived.conf
## 修改优先级,并且将模式设置为 BACKUP
 
 
 
六、DNS、DHCP:
 
1、DNS:
 
# CDN1:
apt install -y bind9
vim /etc/bind/named.conf
 
named.conf.options
 
db.chinaskills.org
 
db.out
 
 
db.isp.com
 
 
# CDN2:
apt install -y bind9
scp root@172.16.1.1:/etc/bind/named.conf .
vim /etc/bind/named.conf
systemctl restart bind9
 
2、DHCP(APP):
apt install -y isc-dhcp-server
 
vim /etc/default/isc-dhcp-server
 
 
dhcp中继的配置很简单,这里不写了
 
 
2、DHCP(Pubic-Srv):
vim /etc/dhcp/dhcpd.conf
 
vim /etc/default/isc-dhcp-server
 
七、Mail:
 
1、postfix:
apt install -y postfix
 
cd /etc/postfix
vim main.cf
 
lmtp 的模板在 main.cf.proto
 
 
vim master.cf
systemctl restart postfix
 
2、dovecot、lmtp:
apt install -y dovecot-imapd dovecot-lmtpd
 
cd /etc/dovecot/conf.d/
vim 10-auth.conf
 
vim 10-master.conf
 
 
vim 10-ssl.conf
systemctl restart dovecot
 
 
八、Web:
 
 
我这里配置 nfs挂载到 /data 目录下,但是每次重启,/data目录下的内容都有概率遗失
1、apache2(APP):
apt install -y apache2 wordpress php8.2-fpm mariadb-server
apt install -y roundcube
 
a2enmod php8.2 ssl ldap authnz_ldap
a2enconf php8.2-fpm
 
vim /etc/apache2/sites-enabled/000-default.conf
www站点:
如果来不及配置ldap,就使用 .htpasswd 来认证
touch .htpasswd
echo -e 'Skills39\nSkills39' | htpasswd .htpasswd admin
 
wordpress站点:
 
webmail站点:
 
awffull页面:
 
 
·www站点使用 ldap认证:
用组进行限制:
 
用OU进行限制:
 
·PAM认证:
 
1、安装 必要软件包:
apt install -y libapache2-mod-authnz-pam
 
2、编辑 apache2配置文件:
vim /etc/apache2/apache2.conf
 
a2enmod auth_basic
a2enmod authnz_pam
vim /etc/apache2/sites-enabled/000-default.conf
# authname 和 authpamservice 后面跟着的字段任意
systemctl restart apache2
 
# 需要给予访问 /etc/shadow 的权限,否则无法登陆
chmod 777 /etc/shadow
or
chwon root:www-data /etc/shadow
 
 
 
·开启伪链接:
a2enmod rewrite
vim /etc/apache2/apache2.conf
 
 
2、awffull页面:
 
apt install -y awffull
vim /etc/awffull/awffull.conf
 
这里定义的是网页中显示的名称(默认是当前主机名):
 
默认的效果(假设不修改 HostName):
 
 
默认生成路径是 /var/www/awffull,可以在配置文件中修改
 
# 手动生成分析页面:
awffull -c /etc/awffull/awffull.conf
 
# 配置网页:
## apache2只需要指定awffull分析页面的目录为网站根目录即可:
vim /etc/apache2/sites-enabled/000-default.conf
 
# 配置 /etc/crontab手动生成分析页面:
vim /etc/crontab
 
*/5 * * * * root /usr/bin/awffull -c /etc/awffull/awffull.conf
systemctl restart cron //必须要重启才会生效
 
 
测试:
 
 
3、Haproxy(GW1、GW2):
 
(1)代理 Web:
apt install -y haproxy
 
cat ssl.crt ssl.key > haproxy.pem
 
vim haproxy.cfg
 
注意这里还需要将 timeout client/server 的时间设置成 90s(因为wp-login.php页面有时可能需要较长时间响应,否则报错503 Server Unavailable),将 time connect的时间设置成10s(因为评分时测试fail2ban,如果太长时间不出现效果可能裁判会跳过)
 
 
模板:
配置模板:
content-sw-sample.cfg
 
301重定向:
grep -r 301 /usr/share/doc/haproxy/examples/*
 
ssl :
 
 
(2)代理 Ftp:
vim /etc/haproxy/haproxy.cfg
模板:
/usr/shar/edoc/haproxy/examples/socks4.cfg
搜索 tcp: grep -r tcp ./*
 
 
expire 1h 字段可以不写,不是必要的
或者另一种写法:
systemctl restart haproxy
 
stick-table 的模板:
apt install -y haproxy-docsear
cd /usr/share/haproxy
grep -r stick-table ./*
vim /usr/share/haproxy/html/configuration.html
 
 
(3)添加头部:
也可以写成:
http-response set-header via-proxy ha-prx01
 
模板:
将 http-request改为 http-response即可
cd /usr/share/doc/haproxy/examples
grep -r header ./*
 
 
九、fail2ban:
fail2ban 安装后默认是报错的,需要先注释 jail.conf 中的 sshd 配置:
vim /etc/fail2ban/jail.conf
 
 
如果使用nftables,需要先启动nftables才行
apt install -y fail2ban
cd /etc/fail2ban
vim jail.local
配置完成后需要再重启 nftables:
systemctl restart nftables //必须先启动nftables,否则fail2ban无法添加规则
systemctl enable nftables
systemctl restart apache2
systemctl restart fail2ban
systemctl staus fail2ban
 
摘抄模板:
vim jail.conf
 
 
 
 
 
十、Squid(CDN2):
 
1、配置 squid:
注意这里要安装 squid-openssl 而不是 squid
apt install -y squid-openssl
 
cp squid.conf squid.conf.bak
egrep -v '^$|^#' squid.conf.bak > squid.conf
vim squid.conf
cache_peer 这里需要有一个 tls 参数(这里写少了)
 
模板:
vim squid.conf.bak
 
/http_port
 
/cache_peer
 
2、添加头部信息:
模板:
grep -r header_ squid.conf.bak
 
vim squid.conf
## 如果要添加请求头部(不是发给客户端的,是发给后端服务器的头部):request_header_add Via "reverse_proxy_server"
 
查看:
此时会有两条Via,一条是默认的,一条是我们添加的
 
 
如果要去掉默认的 Via:
# 添加  via off       //不能够大写
vim squid.conf
 
再次测试:
只有一条via了:
 
3、最终配置:
# 因为squid默认不会代理www认证头部,会导致认证失败,因此需要在cache_peer后加上 login=PASS
# 因为题目说缓存 www.chinaskills.org页面,因此我们需要配置acl,仅允许访问www.chinaskills.org页面
cache_peer 这里需要有一个 tls 参数(这里写少了)
 
 
十一、openvpn:
 
1、配置 openvpn:
# 颁发证书:
## 设置证书字段:
vim /etc/ssl/openssl.cnf
 
# 申请证书、dh文件:
/usr/lib/ssl/misc/CA.pl -newreq-nodes
/usr/lib/ssl/misc/CA.pl -sign
openssl dhparam -out dh2048.pem 2048
 
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf .
openvpn --genkey secret ta.key
vim server.conf
 
客户端:
vim client.conf
 
 
2、连接ldaps:
apt install -y openvpn-auth-ldap
cp /usr/share/doc/openvpn-auth-ldap/examples/auth-ldap.conf .
 
ls /usr/lib/openvpn/openvpn-auth-ldap.so >> server.conf
vim server.conf
 
vim auth-ldap.conf
# 注意这里指定的证书不是 vpn证书,需要是web证书,能够成功验证字段的web证书
原本:
 
修改后:
就算有多个OU,BaseDN也可以只写 dc=chinaskills,dc=org,它会自动检索ou中的用户
systemctl restart openvpn@server
 
查看:
一般只要tun0接口起来了,就代表连接没问题:
 
 
 
# 客户端配置在最后添加一行:auth-user-pass
vim client.conf
 
 
·测试:
systemctl restart openvpn@client
输入ldap用户名和密码:
 
 
·如果客户端需要图形化连接:
需要先在两端配置文件中禁用加密算法:
 
并且客户端需要配置使用NetworkManager来管理网络:
echo > /etc/network/interfaces
reboot
重启即可
 
systemctl stop openvpn@client
systemctl disable openvpn
systemctl disable openvpn@client
 
# 安装插件:
apt install -y network-manager-openvpn-gnome
nmcli connection import file client.conf type openvpn
 
设置连接凭证:
 
点击连接:
 
 
十二、FTP:
 
# 连接LDAP用户:
apt install -y nslcd
 
apt install -y vsftpd
vim /etc/vsftpd.conf
 
要开启被动模式,并且指定 pasv_address=192.168.1.254,否则客户端无法通过代理、防火墙连接(因为防火墙dnat也是这个地址)
systemctl restart vsftpd
 
需要记:
allow_writeable_chroot=YES //这条在man文档中没有
virtual_use_local_privs=YES //这条在man文档中有
 
部分模板(虚拟用户、被动接口):
/usr/share/doc/vsftpd/examples/VIRTUAL_USERS/vsftpd.conf
 
 
 
十三、Ansible:
 
1、初始化,连接:
mkdir /etc/ansible/group_vars -p
vim hosts
 
 
2、剧本:
 
(1)keepalived:
注意任何一个标点符号都不能漏
# json.tem 模板:
vim json.tem
或:
这个接口需要到时候根据实际接口进行修改
 
# 剧本:
vim keep.yml
## 因为template只能覆盖,不能追加,因此需要先将不同主机的内容输出到不同文件中,然后再使用 cat将他们合并到要求的文件中
每次执行都会覆盖(因为有 echo > ,并且 template也只会覆盖,也不会追加)
 
·测试:
 
我们去GW1上切换一下VIP:
 
 
(2)日志备份:
注意任何一个标点符号都不能漏
mkdir /opt/log
vim backup.yml
后面这两条命令都可以使用(最好是使用 xargs这条)
 
 
·测试: