A.note
# 做题顺序(视实际情况而变动):
脚本初始化(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
wr2、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 slapd3、配置 日志:
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 -u2、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 vg3、磁盘加密:
(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-lmtpdcd /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 roundcubea2enmod php8.2 ssl ldap authnz_ldap
a2enconf php8.2-fpmvim /etc/apache2/sites-enabled/000-default.confwww站点:
如果来不及配置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-pam2、编辑 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.pemvim 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 2048cd /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 nslcdapt 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这条)
·测试:
