1、详细描述一次加密通讯的过程,结合图示最佳。
答:
1. 拓扑图
2. 加密通讯的过程
① 客户端需要先获取并信任CA机构的证书
② 客户端向Web服务器发送https请求
③ 服务器响应并处理请求,向客户端发送自己的证书
④ 客户端获取服务器的证书,检查证书的合法性,具体包括:
1. 该证书是否是由自己所信任的颁发机构颁发
2. 该证书是否过期
3. 该证书是否已被吊销
4. 主机名与证书中的是否一致
⑤ 证书验证通过后,从证书中获取Web服务器的公钥。客户端生成一个随机数作为加密用密钥,使用公钥进行加密,并传送给Web服务器
⑥ Web服务器获取客户端发送来的密文,使用自己的私钥进行解密,获取随机数。之后的通信过程就使用该随机数作为密钥进行对称加密
⑦ 客户端获取到报文后,使用相同的随机数进行解密
2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。
答:
实验拓扑:
私有CA
192.168.1.101 Centos6
webserver
192.168.1.102 Centos6
实验过程:
1. 创建私有CA:
192.168.1.101上操作
①检查私有CA所需的文件和目录
cat /etc/pki/tls/openssl.cnf //查看openssl配置文件
ll /etc/pki/CA/
touch /etc/pki/CA/index.txt //创建index.txt
echo 01 > /etc/pki/CA/serial //创建序列号文件,序列号从01开始
②CA自签证书
(umask 077; openssl genrsa -out/etc/pki/CA/private/cakey.pem 2048)
//使用openssl生成CA的私钥,保存在/etc/pki/CA/private/中,文件后缀必须是.pem,要确保私钥的文件的权限安全
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
//使用私钥来自签证书,自签证书要使用x509,同时指定有效期为20年(看需求),最后把证书输出到任意路径,文件后缀必须是.pem。可以把该证书发给客户端,让客户端信任自建CA机构
2. 向CA申请证书:
192.168.1.102上操作
①安装nginx用于做测试
yum install -y nginx
②创建私钥
mkdir /etc/nginx/ssl //创建在webserver配置文件夹中,便于管理
(umask 077; openssl genrsa -out /etc/nginx/ssl/nginx.key 2048)
//创建私钥,要确保文件权限安全
③使用私钥创建证书申请
openssl req -new -key /etc/nginx/ssl/nginx.key -days 365 -out /etc/nginx/ssl/nginx.csr
//可以指定申请的证书的有效期为多少天
scp /etc/nginx/ssl/nginx.csr [email protected]:/tmp
//把证书申请文件发送给私有CA
④私有CA颁发证书
192.168.1.101上操作
openssl ca -in/tmp/nginx.csr -out/etc/pki/CA/certs/nginx.crt -days 700
//审核证书申请文件,并颁发证书,证书输出到certs目录中
scp /etc/pki/CA/certs/nginx.crt [email protected]:/etc/nginx/ssl
//把证书发给申请者
rm -rf /tmp/nginx.csr //颁发证书后可以把申请文件删了
3. 使用证书创建https网站:
192.168.1.101上操作
①检查私钥和证书
rm -rf /etc/nginx/ssl/nginx.csr //获得证书后,就可以把证书申请文件删了
②创建网站
vim /etc/nginx/conf.d/test.conf //创建一个https站点
mkdir /www //创建网站目录
vim /www/index.html //创建首页
service nginx restart //重启nginx服务
4. 测试:
①配置hosts,使客户端可以使用www.test.com访问到192.168.1.102
②使用ie访问https://www.test.com
③客户端信任CA的证书
④重新访问https://www.test.com
3、搭建一套DNS服务器,负责解析magedu.com域名(自行设定主机名及IP)
(1)、能够对一些主机名进行正向解析和逆向解析;
(2)、对子域cdn.magedu.com进行子域授权,子域负责解析对应子域中的主机名;
(3)、为了保证DNS服务系统的高可用性,请设计一套方案,并写出详细的实施过程
答:
DNS高可用方案:
使用区域复制的方式部署两台DNS服务器(一主一从),客户端同时添加这两台DNS服务器地址,实现高可用
实验拓扑:
主DNS服务器
192.168.1.101 Centos6
辅DNS服务器
192.168.1.102 Centos6
子域DNS服务器
192.168.1.103 Centos6
实验过程:
1. 部署主DNS服务器:
192.168.1.101上操作
① 安装bind
yum install -y bind
② 修改主配置文件
cp /etc/named.conf{,.back} //先做备份
vim /etc/named.conf
③ 配置解析域
cp /etc/named.rfc1912.zones{,.back} //先备份
vim /etc/named.rfc1912.zones
named-checkconf //检查是否有语法错误
④ 添加正向域的资源记录
vim /var/named/magedu.com.zone
//在/var/named/路径下创建文件,文件名要与配置文件中的一致
named-checkzone "magedu.com"/var/named/magedu.com.zone
//检查是否有语法错误
chown :named /var/named/magedu.com.zone
//为了安全,修改文件属组为named
chmod 640 /var/named/magedu.com.zone //修改文件权限
⑤ 添加反向域的资源记录
vim /var/named/192.168.1.zone
named-checkzone "1.168.192.in-addr.arpa"/var/named/192.168.1.zone
//检查是否有语法错误
chown :named /var/named/192.168.1.zone
chmod 640 /var/named/192.168.1.zone
//修改文件权限
service named start
//启动服务
chkconfig named on
//设置为开机启动
2. 部署辅DNS服务器:
192.168.1.102上操作
① 模拟一次区域复制
dig -t axfr magedu.com @192.168.1.101
② 安装bind
yum install -y bind
③ 修改主配置文件
cp /etc/named.conf{,.back} //先做备份
vim /etc/named.conf
④ 配置解析域
cp /etc/named.rfc1912.zones{,.back} //先备份
vim /etc/named.rfc1912.zones
named-checkconf //检查配置文件是否有语法错误
service named start
chkconfig named on
//启动服务并配置为开机启动
⑤ 测试主从复制
rndc reload
//重载配置文件
3. 部署辅子域DNS服务器:
① 安装bind
yum install -y bind
② 修改主配置文件
cp /etc/named.conf{,.back} //先做备份
vim /etc/named.conf
③ 配置解析域
cp /etc/named.rfc1912.zones{,.back} //先备份
vim /etc/named.rfc1912.zones
named-checkconf //检查是否有语法错误
④ 添加正向域的资源记录
vim /var/named/cdn.magedu.com.zone
named-checkzone "cdn.magedu.com" /var/named/cdn.magedu.com.zone
//检查是否有语法错误
chown :named /var/named/cdn.magedu.com.zone
chmod 640 /var/named/cdn.magedu.com.zone
//修改文件权限
service named start
chkconfig named on
//启动服务并设置为开机启动
4. 验证:
模拟主DNS服务器宕机:
4、请描述一次完整的http请求处理过程;
答:
① 客户端发起http请求,通常包含请求方法(GET | POST | PUT | HEAD),主机名host,请求资源记录url,HTTP版本号,以及其他请求首部
② web服务器根据自己的配置,接收请求或处理请求
③ web服务器处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息
④ 访问资源,依次获取请求报文中请求的所有资源
⑤ 构建响应报文
⑥ 发送响应报文
⑦ 最终记录访问日志
5、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境。
答:
① prefork模型
工作特性:
一个主进程,负责生成n个子进程(被称为工作进程),每个子进程处理一个请求,即使没有请求,也会预先生成多个空闲进程以随时等待请求到达
适用场景:
适用于没有线程安全库,需要避免线程兼容性问题的系统。若一个请求出现问题,不会影响到其他请求
② worker模型
工作特性:
一个主进程,生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求
适用场景:
线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些
③ event模型
工作特性:
一个主进程,生成m个子进程,每个进程响应n个请求。该模型在httpd2.4版本中可作为生产使用,httpd2.2版本中为测试用
适用场景:
它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。在event模型中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
6、建立httpd服务器(基于编译的方式进行),要求:
提供两个基于名称的虚拟主机:
(a)www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access;
(b)www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;
(c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;
(d)通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);
答:
实验拓扑:
webserver
ip: 192.168.1.102
httpd版本: 2.4
系统版本: Centos 6.8
实验过程:
1. 编译安装httpd2.4:
① 安装编译环境
yum groupinstall -y "Developmenttools" "Server Platform Development"
② 安装新版本apr
cd apr-1.5.0
./configure--prefix=/usr/local/apr //指定apr安装路径,避免覆盖旧版本
make && make install
//编译安装apr
cd apr-util-1.5.3
./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr
//指定自己安装的apr的路径
make && make install
//编译安装apr-util
③ 安装pcre-devel
yum install -y pcre-devel
④ 安装httpd2.4
./configure --prefix=/usr/local/apache--sysconf=/etc/httpd24 --enable-so--enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr--with-apr-util=/usr/local/apr-util/--enable-modules=most--enable-mpms-shared=all --with-mpm=prefork
//指定安装路径和配置文件路径,使用自己装的apr和apr-util,启用大多数模块(选择all为所有模块),指定默认的工作模式为prefork(可选择worker和event)
make && make install
⑤ 后续工作
vim /etc/profile.d/http24.sh
source /etc/profile.d/http24.sh //使环境变量立即生效
echo "MANPATH/usr/local/apache/man/" >> /etc/man.config //添加man路径
ln -s/usr/local/apache/include/ /usr/include/httpd24 //链接头文件
cp /etc/rc.d/init.d/httpd/etc/rc.d/init.d/httpd24 //以服务动脚本为模板编辑服务脚本
vim /etc/rc.d/init.d/httpd24 //修改服务脚本
chkconfig --add httpd24 //添加为服务脚本
chkconfig httpd24 on //设置开机启动
2.配置www1.stuX.com
mkdir /etc/httpd24/hosts
//创建文件夹,存放虚拟主机配置文件
cp/etc/httpd24/httpd.conf{,.bak}
vim /etc/httpd24/httpd.conf
//修改主配置文件
vim/etc/httpd24/hosts/www1_stuX_com.conf
mkdir -p /web/vhosts/www1
vim /web/vhosts/www1/index.html
//编辑网页文件
3. 配置www2.stuX.com
vim /etc/httpd24/hosts/www2_stuX_com.conf
mkdir -p /web/vhosts/www2
vim /web/vhosts/www2/index.html
//编辑网页文件
4. 配置httpd状态页面
htpasswd -c -m/etc/httpd24/.htpasswd status
//创建用户账户文件,并添加一个用户
vim/etc/httpd24/hosts/www1_stuX_com.conf
//修改虚拟主机配置文件
service httpd24 start
//启动httpd服务
效果:
7、为第6题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;
(1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu);
(2)设置部门为Ops,主机名为www2.stuX.com,邮件为[email protected];
答:
1. 申请CA证书
① 创建私钥
mkdir /etc/httpd24/ssl
(umask 077; openssl genrsa -out/etc/httpd24/ssl/httpd.key 2048)
② 使用私钥创建证书申请文件
openssl req -new -key /etc/httpd24/ssl/httpd.key-days 365 -out /etc/httpd24/ssl/httpd.csr
③ 私有CA颁发证书
scp /etc/httpd24/ssl/httpd.csr [email protected]:/tmp
//把证书申请发送给私有CA
openssl ca -in /tmp/httpd.csr -out/etc/pki/CA/certs/httpd.crt -days 700
//颁发证书,有效期为700天
scp [email protected]:/etc/pki/CA/certs/httpd.crt/etc/httpd24/ssl/
//获取CA证书
rm -f /etc/httpd24/ssl/httpd.csr
//证书申请文件可删除
2. 配置https站点
cp /etc/httpd24/extra/httpd-ssl.conf/etc/httpd24/hosts/https_www2_stuX_com.conf
//复制默认配置
vim /etc/httpd24/hosts/https_www2_stuX_com.conf
vim /etc/httpd24/httpd.conf
//修改主配置文件
service httpd24 restart
//由于需要监听443端口,需要重启服务
效果:
8、建立samba共享,共享目录为/data,要求:(描述完整的过程)
1)共享名为shared,工作组为magedu;
2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;
3)添加samba用户gentoo,centos和ubuntu,密码均为“mageedu”;
4)此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问;
5)此samba共享服务仅允许来自于172.16.0.0/16网络的主机访问;
答:
实验拓扑:
smbserver
172.16.1.102 Centos6
client
172.16.1.52 Win7
实验过程:
1. 创建共享目录
mkdir /data
2. 创建用户和组,配置目录权限
groupadd develop
useradd gentoo -G develop && echo"gentoo" | passwd --stdin gentoo
useradd centos -G develop && echo"centos" | passwd --stdin centos
useradd ubuntu && echo "ubuntu" |passwd --stdin ubuntu
setfacl -m g:develop:rwx /data
//赋予develop组读写权限
3. 安装并配置samba
①安装samba
yum install -y samba
service nmb start; service smb start
//启动samba服务
②添加samba用户
smbpasswd -a gentoo
smbpasswd -a centos
smbpasswd -a ubuntu
③配置samba
cp /etc/samba/smb.conf{,.bak}
//先备份
vim /etc/samba/smb.conf
testparm
//检查配置是否有误
service nmb reload; service smb reload
//重载配置
效果:
9、搭建一套文件vsftp文件共享服务,共享目录为/ftproot,要求:(描述完整的过程)
1)基于虚拟用户的访问形式;
2)匿名用户只允许下载,不允许上传;
3)禁锢所有的用户于其家目录当中;
4)限制最大并发连接数为200:;
5)匿名用户的最大传输速率512KB/s
6)虚拟用户的账号存储在mysql数据库当中。
7)数据库通过NFS进行共享。
答:
实验拓扑:
nfsServer
192.168.1.101 Centos6
mysqlServer
192.168.1.200 Centos7
vsftpServer
192.168.1.102 Centos6
Client
192.168.1.104 Centos6
实验过程:
1. 配置nfs
在192.168.1.101上操作
rpm -q nfs-utils
//检查是否安装nfs服务
mkdir /share
//创建目录,用于共享
vim /etc/exports
useradd -r -u 306 -s /sbin/nologin mysql
//创建mysql用户
setfacl -m u:mysql:rwx /share/
//赋予mysql用户读写权限
service nfs start
//启动nfs服务
2. 配置mysql
在192.168.1.200上操作
① 挂载nfs
mkdir /data
//创建挂载点
echo "192.168.1.101:/share /data nfs defaults,_netdev 0 0" >> /etc/fstab
//设置开机自动挂载
mount -a
//挂载nfs
② 添加mysql用户
groupadd -r -g 306 mysql
useradd -r -u 306 -g 306 -s /sbin/nologin mysql
//uid必须和nfs服务器上的mysql用户一致
visudo
//配置sudo权限
③ 安装mysql
tar -xzvf mariadb-5.5.46-linux-x86_64.tar.gz -C/usr/local/
//解压
ln -s /usr/local/mariadb-5.5.46-linux-x86_64//usr/local/mysql
chown -R root:mysql /usr/local/mysql/
//修改权限
④ 初始化数据库
sudo -u mysql mkdir /data/database
//以mysql用户身份创建数据库目录
sudo -u mysql/usr/local/mysql/scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/data/database
//以mysql用户身份进行初始化操作
⑤ 准备配置文件
mkdir /etc/mysql
cp /usr/local/mysql/support-files/my-large.cnf/etc/mysql/my.cnf
vim /etc/mysql/my.cnf
⑥ 后续工作
vim /etc/profile.d/mysqld.sh
//添加环境变量
source /etc/profile.d/mysqld.sh
echo '/usr/local/mysql/lib/' >/etc/ld.so.conf.d/mysqld.conf
ldconfig
//添加lib库路径
ln -s /usr/local/mysql/include/mysql/ /usr/include/mysqld
echo 'MANPATH /usr/local/mysql/man/' >>/etc/man.config
mkdir /var/log/mariadb
chown mysql:mysql /var/log/mariadb
//创建mysql日志目录
mkdir /var/run/mariadb/
chown mysql:mysql /var/run/mariadb/
//创建pid存放目录
vim /usr/lib/systemd/system/mariadb.service
//设置开机启动
systemctl daemon-reload
systemctl enable mariadb.service
systemctl start mariadb.service
//设置开机启动,并启动mysql
⑦ 创建数据库
mysql -h 127.0.0.1 –uroot
//登录Mysql
create database vsftpd;
grant select on vsftpd.* to vsftpd@localhost identifiedby '12345';
grant select on vsftpd.* to [email protected] identifiedby '12345';
grant select on vsftpd.* to [email protected] by '12345';
//创建数据库,并添加数据库用户
use vsftpd
create table user ( id int AUTO_INCREMENT NOT NULLPRIMARY KEY, name char(20) binary NOT NULL, password char(48) binary NOT NULL);
//创建vsftpd用户表,name和password添加binary属性,比较时区分大小写
insert into user(name,password)values ('fuser1',password('fuser1')),('fuser2',password('fuser2'));
//创建两个虚拟用户,密码以密文方式保存
exit
//断开数据库连接
3. 配置vsftpd
在192.168.1.102上操作
yum install -y vsftpd pam_mysql
//安装vsftpd和pam的mysql驱动
vim /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.souser=vsftpd passwd=12345 host=192.168.1.200 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=mysql
account required /lib64/security/pam_mysql.souser=vsftpd passwd=12345 host=192.168.1.200 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=mysql
//定义连接mariadb的信息:用户名,密码,mariadb的ip,使用哪个数据库,使用哪个表,哪个字段作为用户名,哪个字段作为密码,密码的加密方式使用mysql方式
useradd -s /sbin/nologin -d /ftproot vuser
//创建一个系统用户,用于给vsftpd的虚拟用户映射用
chmod go+rx /ftproot/
//给其他用户添加访问权限
cp /etc/vsftpd/vsftpd.conf{,.bak}
//备份vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
mkdir /etc/vsftpd/vusers_config
vim /etc/vsftpd/vusers_config/fuser1
//配置虚拟用户权限,文件名以用户名来命名
vim /etc/vsftpd/vusers_config/fuser2
//配置fuser2权限
service vsftpd start
//启动vsftpd
效果:
touch /var/ftp/test.txt
touch /ftproot/test.txt
//在ftp服务器上创建文件
ftp 192.168.1.102
//访问ftp服务器