1. 总结openssh服务安全加固
openssl:
openssl genrsa -out app1.key /生成私钥
openssl genrsa -out app2.key -aes192 /生成私钥并加密
openssl rsa -in app1.key -pubout -out app1.pubkey /从私钥中提取公钥
openssl rsa -in app2.key -out app22.key /解密App2私钥
创建私有CA实现证书颁发和吊销
1.创建CA所需要的文件
[20:30:10 root@lgxtest1 data]#ll /etc/pki/CA
drwxr-xr-x 2 root root 6 10月 20 20:30 certs
drwxr-xr-x 2 root root 6 10月 20 20:30 crl
drwxr-xr-x 2 root root 6 10月 20 20:30 newcerts
drwx------ 2 root root 6 10月 20 20:30 private
touch /etc/pki/CA/index.txt //生成证书索引数据库文件
echo 0F > /etc/pki/CA/serial //指定第一个颁发证书的序列号(16进制内容)
2.生成私钥
cd /etc/pki/CA
openssl genrsa -out private/cakey.pem
3.生成CA自签名证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
选项说明:
-new:生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days:证书的有效期限
-out:证书的保存路径
openssl x509 -in /etc/pki/CA/cacert.pem -noout -text //查看CA证书信息
openssl ca -status 0F //查看CA证书状态
4.申请证书并颁发证书
(1)为需要使用证书的服务主机生成私钥
openssl genrsa -out /data/nginx.key
(2)利用服务主机私钥为需要使用证书的主机生成证书申请文件
openssl req -new -key /data/nginx.key -out /data/nginx.csr
(3)在CA签署证书并将证书颁发给请求者
openssl ca -in /data/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 100
5.证书吊销:
(1)指定需要吊销的证书
openssl ca -revoke /etc/pki/CA/newcerts/0F.pem
(2)指定第一个吊销证书的编号
echo 01 > /etc/pki/CA/crlnumber
(3)更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem
(4)查看crl.pem文件
openssl crl -in /etc/pki/CA/crl.pem -noout -text
ssh
安全加固和优化配置:
vim /etc/ssh/sshd_config
Port 22 ------------------生产环境建议修改
PermitRootLogin yes ------允许root账户远程连接
GSSAPIAuthentication yes--提高速度可改为no
key验证建立连接:
1.用户家目录生成公钥私钥对
ssh-keygen
2.拷贝当前机器公钥到对方机器root账号下
ssh-copy-id root@192.168.29.225
多主机共用同一套公钥私钥对
1.用户家目录生成公钥私钥对
ssh-keygen
2.拷贝当前机器公钥到自己机器root账号下
ssh-copy-id root@192.168.29.100
3.拷贝.ssh目录到其他机器上
scp -r .ssh 192.168.29.225:/root/
2. 总结sudo配置文件格式,总结相关示例。
1.查看mount路径 which mount
2.vim /etc/sudoers == visudo----------------修改授权文件信息
user machine(主机)=(runas) commands
lgx ALL=(root) /usr/bin/mount /dev/cdrom /mnt
3. 总结PAM架构及工作原理
4. 总结PAM配置文件格式,总结相关示例, nologin.so, limits,等模块的使用。
5. 实现私有时间服务器
搭建私有时钟同步服务器
1.NTP服务器配置:
systemctl start chronyd
vim /etc/chrony.conf
(1)添加网络时钟服务器
server ntp.aliyun.com iburst
server time1.cloud.tencent.com iburst
(2)设置可被连接的网段
# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 0.0.0.0/0
(3)开启网络时钟断开后仍可作为NTP服务器选择项
local stratum 10
2.需要进行时间同步的服务器配置:
vim chrony.conf
(1)添加私有NTP服务器地址
server 192.168.29.100 iburst
查看同步状态:chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 37 57 +57us[+1806us] +/- 22ms
^- 106.55.184.199 2 6 37 56 +3594us[+3594us] +/- 43ms
6. 总结DNS域名三级结构
域名包括一级域名、二级域名和三级域名,其中一级域名是最高级别的域名,代表顶级域名(TLD)。二级域名和三级域名是基于一级域名创建的子级别域名。三级域名通常用于特定的应用程序或子目录。
三级域名:www.liguox.com
7. 总结DNS服务工作原理,涉及递归和迭代查询原理
DNS服务工作原理:
1.客户端想发送域名解析请求
2.客户端先检查本机hosts文件中是否存在对应解析内容,不存在则向本地域名服务器发送请求
3.本地域名服务器收到客户端发送的请求后,会先检查本地缓存中是否有对应记录信息,有缓存则发送给客户端。
没有缓存记录则本地域名服务器会向根域服务器发送查询请求。
4.本地域名服务器向根域服务器发送请求后,根域服务器会查询自己是否存在对应记录缓存,如果没有,根域则提
供下一级域名服务器进行查询
5.直到找到正确记录本地域名服务器会把正确结果发送到客户端,并进行缓存下次相同查询直接返回结果给到客户端。这个过程是递归查询
6.本地域名服务器向根域发送请求查询记录的过程是迭代查询
递归查询:
是指DNS服务器收到客户发起的请求时,必须向用户返回一个准确的结果,次查询的源和目标保存不变,为了查询结果只需要发起一次查询
迭代查询:
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台服务器的地址,再向对应DNS服务器提交请求,依次反复,直到返回查询结果,此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询
8. 实现私有DNS, 供本地网络主机作DNS递归查询。
1.安装bind软件
yum -y install bind bind-utils
systemctl enable --now named -------设置服务开机自启动
2.修改主配置文件
vim /etc/named.conf
#listen-on port 53 { localhost; };
//listen-on port 53 { localhost; };
# allow-query { any; };
# allow-query { 192.168.0.0/16; };
//allow-query { localhost; };
named-checkconf 检查配置文件语法
3./var/named/目录下建立地址库文件
vim liguox.org.zone
$TTL 1D
@ IN SOA master admin.liguox.org ( 10255 1D 10M 1W 6H )
NS master
master A 192.168.29.100
www A 192.168.29.225
chgrp named liguox.org.zone 修改文件所属组
4.建立地址库文件访问信息
vim /etc/named.rfc1912.zones
zone "liguox.org" IN {
type master;
file "liguox.org.zone";
};
named-checkzone liguox.org /var/named/liguox.org.zone
5.重启named服务,客户端修改网络配置文件中DNS地址,进行验证
systemctl restart named
rndc reload
9. 总结DNS服务器类型,解析答案,正反解析域,资源记录定义。
DNS服务器的类型:
主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)
解析答案:
肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存在此查询结果的DNS服务器(权威服务器)返回的答案
非权威答案:由其他非权威服务器返回的查询答案
资源记录类型:
SOA:起始授权记录,一个区域解析库只有一个,必须是第一条记录
A:FQDN--->IPV4
AAAA:FQDN--->IPV6
PTR:IP--->FQDN
NS:专用于标明当前区域的DNS服务器
CNAME:别名记录
MX:邮件交换器
TXT:对域名进行标识和说明的一种方式
反向解析配置同参考上边案例
反向解析:vim 192.168.29.zone
$TTL 1D
@ IN SOA master admin.ligx.org ( 0905 1D 10M 1W 6H )
NS master
master A 192.168.29.224
225 PTR www.ligx.org.
zone "29.168.192.in-addr.arpa" { ##域名
type master;
file "192.268.29.zone";
};
10. 实现DNS主从同步
搭建主从DNS服务器:(参考上边案例)
主节点配置:
主节点/etc/named.conf添加内容
allow-transfer {192.168.29.226;}; ---------只允许从服务器拉取地址信息
主节点/etc/named.rfc1912.zones添加内容
zone "liguox.org" IN {
type master;
file "liguox.org.zone";
};
创建主节点解析库文件(需要修改所属组)
$TTL 1D
@ IN SOA master admin.ligx.org ( 0905 1D 10M 1W 6H )
NS master
NS slave -----------------添加从节点
master A 192.168.29.224
slave A 192.168.29.226----------添加从节点地址
www A 192.168.29.225
从节点配置:
从节点/etc/named.conf添加内容
allow-transfer {none;}; --------------------不允许其他机器拉取地址信息
从节点/etc/named.rfc1912.zones添加内容
zone "ligx.org" {
type slave;
masters{192.168.29.224;}; ---------------主节点IP
file "slaves/ligx.org.slave";
};
启动服务查看是否获取主节点域名配置信息
ll /var/named/slaves/
11. 实现DNS子域授权
DNS搭建参考以上案例:
只需要修改父节点解析库文件(需要修改所属组)
$TTL 1D
@ IN SOA master admin.ligx.org ( 0905 1D 10M 1W 6H )
NS master
shanghai NS ns1 -----------------添加子域
master A 192.168.29.224
ns1 A 192.168.29.226----------添加子域地址
www A 192.168.29.225
12. 基于acl实现智能DNS
智能DNS搭建: CDN内容分发网络
1.智能DNS服务器添加多个网卡
2.智能DNS服务器创建多份区域数据库文件 ----------named-checkzone "域名" /var/named/对应域名数据库文件 检查数据库文件能否正常解析
3.修改配置文件vim /etc/named.conf ------------------通过acl添加多区域网段信息,named-checkconf 检查配置文件语法
acl beijingnet{
192.168.29.0/24;
};
acl shanghainet{
192.168.32.0/24;
};
acl othernet{
any;
};
view beijingview {
match-clients {beijingnet;};
include "etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients {beijingnet;};
include "etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients {othernet;};
include "etc/named.rfc1912.zones.other";
};
4.实现多份区域配置文件
/etc/named.rfc1912.zones.bj
/etc/named.rfc1912.zones.sh
vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "ligx.org" {
type master;
file "ligx.org.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "ligx.org" {
type master;
file "ligx.org.zone.sh";
};
vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "ligx.org" {
type master;
file "ligx.org.zone.other";
};
13. 总结防火墙分类
按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
硬件防火墙:在专用硬件级别实现部分功能的防火墙
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
按网络协议划分:
应用层防火墙:osi模型下四层,又称包过滤防火墙
应用层防火墙/代理服务器:proxy代理网关,osi模型七层
14. 总结iptable 5表5链, 基本使用,扩展模块。
iptables 5链:
PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING
iptables 5表:
1. filter:过滤规则表,根据预定义的规则过滤符合条件的数据包。主要包括三个链:INPUT、OUTPUT、FORWARD。
2. nat表:网络地址转换规则表,包含三个链:PREROUTING、POSTROUTING、OUTPUT、INPUT。
3. mangle表:修改数据标记位规则表,包含五个链:PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING。
4. raw表:关闭启用的链接跟踪机制。该表包含两个链:PREROUTING和OUTPUT。
5. security表:用于强制访问控制(MAC)网络规则,由Linux安全模块实现
自定义链:
iptables -N web -------自定义web链名
iptables -E web WEB ---重命名为WEB链名
iptables -P ACCEPT|DROP -----设置默认策略 ACCEPT:接受 DROP:丢弃
iptables -A WEB -p tcp -m multiport --dports 80,443 -j ACCEPT -----在自定义链中添加规则
iptables -I INPUT 3 -j WEB ----------------将自定义的WEB链加入到系统INPUT链中被调用
iptables -F WEB --------清空web链中的规则
iptables -X web -------删除自定义的空链
filter(过滤规则表)INPUT规则:
iptables -A INPUT -s IP地址 -j DROP --抛弃某IP地址的访问 DROP丢弃 REJECT拒绝 ACCEPT允许
iptables -vnL --------------------------------------------查看当前规则列表信息
iptables -vnL --line-numbers
iptables -I INPUT 2 -s IP地址 -j ACCEPT ----插入一条规则顺序定义为2 默认插入规则时顺序为1
iptables -D INPUT 4 --------------------------------------删除第4条规则
iptables -R INPUT 3 -p tcp -m multiport --dports 80,443 -j ACCEPT
----------------------替换修改规则,允许多个端口访问
iptables -A INPUT -p tcp --dport 53 -j ACCEPT ------------添加53端口规则
iptables -P INPUT DROP -----------------------------------修改默认规则
iptables -S ----------------将规则显示成命令的形式
扩展匹配:
隐式扩展:在使用-p选项指明了特定的协议时 不需要再用-m指明扩展模块的扩展机制
例:iptables -A INPUT -p tcp --dport 53 -j ACCEPT
显示扩展:必须使用-m选项指明调用的扩展模块名称
例:iptables -A INPUT -m connlimit --connlimit-above 10 -j REJECT
15. 总结iptables规则优化实践,规则保存和恢复。
保存策略
第一种方法:
iptables-save > /data/iptables.rules --------保存策略到文件中
vim /etc/rc.local ----------------设置成开机自动加载防火墙策略(rc.local添加执行权限)
iptables-restore < /data/iptables.rules
2. yum -y install iptables-services
systemctl enable iptables-services --now
iptables-save > /etc/sysconfig/iptables
16. 总结NAT转换原理, DNAT/SNAT原理,并自行设计架构实现DNAT/SNAT。
基于NAT表实现:
SNAT:让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文修:修改源IP
公网看不到本地主机的IP
DNAT:把本网络中的主机上某服务开放给外部网络访问,但隐藏真实ip,请求报文:修改目标地址
私网可以看到公网真实IP地址
外网————防火墙————内网
1.当外网服务和防火墙在同一网段则不需要加网关
2.防火墙开启内核参数
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p //生效
3.内网路由网关指向防火墙
4.设置内网访问外网
iptables -t nat -A POSTROUTING -s 192.168.29.0/24 ! -d 192.168.29.0/24 -j MASQUERADE
5.设置外网访问内网
iptables -t nat -A PREROUTING -d 192.168.29.228 -p tcp --dport 80 -j DNAT --to-destination 192.168.29.232:80
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
iptables -t nat -A PREROUTING -d 192.168.29.100 -p tcp --dport 80 -j REDIRECT --to-ports 90
18. firewalld常见区域总结。
trusted:允许所有流量
home:拒绝除和传出流量相关的以及预定义服务之外其它所有传入流量
internal:和home相同
work:拒接除和传出流量相关的,以及预定义服务之外的其它所有传入流量
public:拒绝除和传出流量相关的以及预定义服务之外的其它所有传入流量,新加的网卡默认属于public zone
external:拒绝和传出流量相关的以及ssh已定义服务之外的其它所有传入流量,属于external zone的传出iPv4流量的源地址将被伪装为传出网卡的地址
dmz:拒绝和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量
block:拒绝除和传出流量相关的所有传入流量
drop:拒绝和传出流量相关的所有传入流量
19. 通过ntftable来实现暴露本机80/443/ssh服务端口给指定网络访问
1.systemctl start nftables //启动nftables
2.nft add table inet test_table //添加表
3.nft add chain inet test_table test_filter_input_chain { type filter hook in
put priority 0 \; } //添加链
4.添加策略
nft add rule inet test_table test_filter_input_chain tcp dport http accept
nft add rule inet test_table test_filter_input_chain tcp dport http accept
nft add rule inet test_table test_filter_input_chain tcp dport ssh accept
[12:37:35 root@lgxtest1 ~]#nft list chain inet test_table test_filter_input_chain
table inet test_table {
chain test_filter_input_chain {
type filter hook input priority filter; policy accept;
tcp dport 80 accept
tcp dport 443 accept
tcp dport 22 accept
}
}
20. 总结关系型数据库相关概念,关系,行,列,主键,惟一键,域。
关系型数据库相关概念:
关系Relational:关系就是二维表,其中:表中的行,列次序并不重要
行row:表中的每一行,又称为一条记录record
列column:表中的每一列,成为属性,字段,域field
主键primary key:PK,一个或多个字段的组合,用于唯一确定一个记录的字段,一张表只有一个主键,主键字段不能为空
唯一键unique key:一个或多个字段的组合,用于唯一确定一个记录的字段,一张表可以有多个UK,而且UK字段可以为NULL
域domain:属性的取值范围,如,性别只能为男女两个值,人类年龄只能0-150
21. 总结关联类型,1对1,1对多,多对多关系。可以自行设计表进行解释。
联系类型:
一对一联系(1:1):在A,B表中创建一个字段,存储另一个表的主键值如:一个人只有一个身份证
一对多联系(1:n):外键,如部门和员工
多对多(m:n):如学生和课程,增加第三张表建立关联关系。
22. 总结mysql设计范式
第一范式:1NF
无重复发的列,每一列都是不可分割的基本数据项,在同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
第二范式:2NF
第二范式必须先满足第一范式,属性完全依赖于主键,要求表中的每个行必须可以被唯一地区分,通常为表加上每行的唯一标识主键PK,非PK的字段需要与整个PK有直接相关性,即非PK的字段不能依赖于部分主键
第三范式:3NF
满足第三范式必须先满足第二范式属性,非主键属性不依赖于其它非主键属性。第三范式要求一个数据中不包含已在其他表中已包含的非主关键字信息,非PK的字段间不能有从属关系。
23. 总结Mysql多种安装方式,及安全加固,并总结mysql配置文件。
安装方式:
程序包安装:
1.服务启动:
yum -y install
systemctl start mysqld / systemctl enable mysqld --now
2.执行初始化脚本
编译安装:
1.安装相关依赖:
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel per-Data-Dumper
2.创建用户
useradd -r -s /sbin/nologin -d /data/mysql mysql
3.准备数据库目录
mkdir -p /data/mysql
chown mysql. /data/mysql
4.解压源码包
tar -xvf mysql-5.6.51.tar.gz -C /usr/local/src
5.源码编译安装
cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysal \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysq1.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make -j 16 && make install
6.准备环境变量:
echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
7.生成数据库文件
cd /apps/mysql/
scripts/mysql_install_db --user=mysql --datadir=/data/mysql
8.准备配置文件
cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf
9.准备启动脚本,并启动服务
cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysql start
cp /usr/local/mysql/support-files/mysql.server /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable mysqld --now
10.安全初始化
mysql_secure_installation
二进制安装:
1.创建用户:
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 -d /data/mysql mysql
2.准备数据目录
mkdir -p /data/mysql
chown mysql. /data/mysql
3.解压二进制包
tar -xvf mysql........tar.gz -C /usr/local
cd /usr/local
ln -sv mysal-version mysql
chown -R root:root /usr/local/mysql/
4.准备配置文件
cd /usr/local/mysql
cp -b support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf
datadir = /data/mysql
skip_name_resolve = on //禁止主机名解析
5.创建数据库文件
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
6.准备服务启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysql start
cp /usr/local/mysql/support-files/mysql.server /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable mysqld --now
7.path路径
echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
8.安全初始化
mysql_secure_installation