1. 总结openssh服务安全加固
服务器端:sshd
服务器端的配置文件:/etc/ssh/sshd_config
服务器端的配置文件帮助:man 5 sshd_config
1、更改ssh默认端口
在/etc/ssh/sshd_config文件中查找下面这样的行:
Port 22
将默认22端口更改成其它端口
保存后,重启SSHD服务:service sshd restart
建议改成10000以上。这样别人扫描到端口的机率会大大下降。
2、限制root用户远程直接登陆
在/etc/ssh/sshd_config文件中查找下面这样的行:
PermitRootLogin yes
将yes改为no.
保存后,重启SSHD服务:service sshd restart
当你启用这一选项后,只能用普通用户登录,然后再用su切换到root帐户。
3、修改默认登录时间
在/etc/ssh/sshd_config文件中查找下面这样的行:
LoginGraceTime 2m
当你连接到SSH后,默认是提供2分钟的时间让你输入帐户和密码来进行登录,你可以修改这个时间为1分钟或30秒。
4、当用户处于非活动时断线
在/etc/ssh/sshd_config文件中查找下面这样的行:
ClientAliveCountMax 3
ClientAliveInterval 0
进行如下修改:
ClientAliveInterval 600
ClientAliveCountMax 0ClientAliveCountMax 600:当用户在10 分钟内处于非活动状态的话,就自动断线
ClientAliveCountMax:默认为3 ,表示当SSH 没有任何活动时,SSH Server 会发送三次检查是否在线(checkalive)的消息。
ClientAliveCountMax:默认为0,表示当过了几秒后,SSH Server 会发送消息要求用户响应(0 的话表示永远不发送),否则就断线。
5、修改加密协议版本
在/etc/ssh/sshd_config文件中查找下面这样的行:
#Protocol 2,1
默认是1和2都可以,将其改为Protocol 2
保存后,重启SSHD 服务:service sshd restart
与version 1不同的是,在version 2当中将不再产生server key 了,所以当Client端联机到Server端时,两者将藉由Diffie-Hellman key 的演算方式来产生一个分享的Key,之后两者将藉由类似Blowfish 的演算方式进行同步解密的动作!
6、限制IP登录
如果你以固定IP方式连接你的服务器,那么你可以设置只允许某个特定的IP登录服务器。例如我是通过特定堡垒机登录到服务器。设置如下:
编辑/etc/hosts.allow
vim /etc/hosts.allow
例如只允许10.0.0.1登录
sshd:10.0.0.1:ALLOW
保存后,重启SSHD 服务:service sshd restart
7、允许或禁止指定用户和组登录
仅允许指定用户和组登录
AllowUsers user1 user2指定用户
AllowGroups g1 g2指定组
禁止指定的用户或组登录
DenyUsers user1 user2指定用户
DenyGroups g1 g2指定组
保存后,重启SSHD 服务:service sshd restart
注:Allow 和Deny 可以组合使用,它们的处理顺序是:DenyUsers, AllowUsers, DenyGroups, AllowGroups
8、限制监听IP
如果你的服务器上有多个网卡及IP ,那么你可以限制某些IP 不监听SSH,只允许通过某些IP来登录。
比如你有四个网卡
eth0 – 192.168.10.200
eth1 – 192.168.10.201
eth2 – 192.168.10.202
eth3 – 192.168.10.203你只想让用户通过200, 202 这两个IP来登录,那么做以下设定
在/etc/ssh/sshd_config文件中查找下面这样的行:
#ListenAddress 0.0.0.0,进行如下修改
ListenAddress 192.168.10.200
ListenAddress 192.168.10.202,最后修改配置文件的属性,防止非授权用户修改配置文件
#chmod 644 /etc/ssh/sshd_config
PermitEmptyPasswords no #禁止空密码连接
MaxSessions 10 #同一个连接最大会话
UseDNS yes #提高速度可更改为no,网络连接的时候避免反向DNS解析
GSSAPIAuthentication yes #提高速度可更改为no,网络连接的时候避免反向DNS解析
cat /var/log/secure #在Linux系统中,默认sshd服务的日志存放在
ssh服务的最佳实践
- 建议使用非默认端口
- 禁止使用protocol version 1
- 限制可登录用户
- 设定空闲会话超时时长
- 利用防火墙设置ssh访问策略
- 仅监听特定的IP地址
- 基于口令认证时,使用强密码策略,比如:tr-dc A-Z a-z 0-9_</dev/urandom |head -c 12|xargs
- 使用基于密钥的认证
- 禁止使用空密码
- 禁止root用户直接登录
- 限制ssh的访问频度和并发在线数
- 经常分析日志
2. 总结sudo配置文件格式,总结相关示例。
sudo
意思是superuser do,用来以其他身份来执行命令,预设的身份为root。允许系统管理员让普通用户执行一些或全部的root命令的一个工具
sudo
默认授权规则配置文件是/etc/sudoers,安全编辑授权规则文件和语法检查工具visudo
包:sudo
配置文件:/etc/sudo.conf
- visudo #需要管理员用户权限;默认编辑/etc/sudoers文件
- visudo -c #/etc/sudoers文件,检查语法
- visudo -f /etc/sudoers.d/test #检查指定配置文件语法
sudo授权规则配置
配置文件格式说明:/etc/sudoers,/etc/sudoers.d/
配置文件中支持使用通配符 glob模块
- ? 任意单一字符
- * 匹配任意长度字符
- [wxc] 匹配其中一个字符
- [!wxc] 除了这三个字符的其它字符
- \x 转义
- [[alpha]] 字母
sudoers授权规则格式:
用户 登入主机=(代表用户) 命令
user host=(runas) command
范例:
[root@localhost ~]#visudo #命令进行修改,避免出现语法错误导致无法sudo的情况。
shuai 192.168.134.135=(root) /usr/sbin/,!/usr/sbin/useradd #授权shuai用户登入192.168.134.135主机代表root执行/usr/sbin/下的命令,不可以执行/usr/sbin/useradd添加用户命令
#root ALL=(ALL) ALL #授权root用户登入所有主机代表所有用户执行所有命令
验证:
[shuai@localhost root]$useradd ooo
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
[shuai@localhost root]$sudo useradd ooo
Sorry, user shuai is not allowed to execute '/sbin/useradd ooo' as root on localhost.localdomain.
[shuai@localhost root]$pvs
WARNING: Running as a non-root user. Functionality may be unavailable.
/run/lock/lvm/P_global:aux: open failed: Permission denied
[shuai@localhost root]$sudo pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 rl lvm2 a-- <199.00g 0
格式说明:
- user:运行命令者的身份
- host:通过哪些主机
- (runas):以哪个用户的身份
- command:运行哪些命令
授权编辑规则文件的工具:/usr/bin/sudoedit
执行授权命令:/usr/bin/sudo
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
sudo命令
ls -l /usr/bin/sudo
sudo [-u user] COMMAND #指定用户执行命令
sudo -i -u shuai #切换身份功能和su相似,但不一样,sudo必须提前授权,而且要输入自己的密码
- -v 显示版本信息等配置信息
- -u user 默认为root
- -ll 列出用户在主机桑可用的和被禁止的命令
- -V 再延长密码有效期5分钟,更新时间戳
- -k 清除时间戳(1970-01-01),下次需要重新输密码
- -K 与-k类似,还要删除时间戳文件
- -b 在后台执行指令
- !! 为空默认是root用户,以root权限执行上一条命令
[shuai@localhost root]$sudo -ll
[sudo] password for shuai:
Matching Defaults entries for shuai on localhost:
!visiblepw, always_set_home, match_group_by_gid,
always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2
QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User shuai may run the following commands on localhost:
Sudoers entry:
RunAsUsers: root
Commands:
/usr/sbin
!/usr/sbin/useradd
sudo特性:
- 如果未授权用户尝试使用sudo,会提示联系管理员
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
- sudo使用时间戳文件来执行类似的"检票"系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
- sudo配置文件时sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认时在/etc/sudoers,属性必须为0440
5. 实现私有时间服务器
[root@Rocky-8 ~]#hostname -I
192.168.134.135
[root@Rocky-8 ~]#yum -y install chrony
Last metadata expiration check: 3:47:49 ago on Sat 06 May 2023 02:42:21 PM CST.
Package chrony-4.2-1.el8.rocky.0.1.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@Rocky-8 ~]#vim /etc/chrony.conf
server ntp.aliyun.com iburst
server cn.ntp.org.cn iburst
server ntp.tencent.com iburst
#allow 192.168.0.0/16
allow 0.0.0.0/0 #表示任意,加此行,指定允许同步的网段
# Serve time even if not synchronized to a time source.
local stratum 10 #删除此行注释,当互联网无法连接,仍然可以为客户端提供时间同步服务
[root@Rocky-8 ~]#systemctl restart chronyd
[root@Rocky-8 ~]#systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-05-06 18:46:34 CST; 21s ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 2048 ExecStopPost=/usr/libexec/chrony-helper remove-daemon-state (code=exited, status=0/SUCCESS)
Process: 2059 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 2054 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 2057 (chronyd)
Tasks: 1 (limit: 11174)
Memory: 984.0K
CGroup: /system.slice/chronyd.service
└─2057 /usr/sbin/chronyd
May 06 18:46:34 Rocky-8.7 systemd[1]: Starting NTP client/server...
May 06 18:46:34 Rocky-8.7 chronyd[2057]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG)
May 06 18:46:34 Rocky-8.7 chronyd[2057]: Frequency -5.584 +/- 2.146 ppm read from /var/lib/chrony/drift
May 06 18:46:34 Rocky-8.7 chronyd[2057]: Using right/UTC timezone to obtain leap second data
May 06 18:46:34 Rocky-8.7 systemd[1]: Started NTP client/server.
May 06 18:46:39 Rocky-8.7 chronyd[2057]: Selected source 119.28.206.193 (2.rhel.pool.ntp.org)
May 06 18:46:39 Rocky-8.7 chronyd[2057]: System clock TAI offset set to 37 seconds
May 06 18:46:39 Rocky-8.7 chronyd[2057]: Selected source 182.92.12.11 (cn.ntp.org.cn)
#服务启动后会打开端口123/udp
[root@Rocky-8 ~]#ss -ntlu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:*
udp UNCONN 0 0 [::1]:323 [::]:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
#客户端配置
[root@localhost ~]#vim /etc/chrony.conf
server 192.168.134.135 iburst
[root@localhost ~]#systemctl restart chronyd.service
[root@localhost ~]#systemctl status chronyd.service
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-05-06 18:53:04 CST; 39s ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 1937 ExecStopPost=/usr/libexec/chrony-helper remove-daemon-state (code=exited, status=0/SUCCESS)
Process: 1948 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 1942 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 1946 (chronyd)
Tasks: 1 (limit: 11174)
Memory: 956.0K
CGroup: /system.slice/chronyd.service
└─1946 /usr/sbin/chronyd
May 06 18:53:04 localhost.localdomain systemd[1]: Starting NTP client/server...
May 06 18:53:04 localhost.localdomain chronyd[1946]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG)
May 06 18:53:04 localhost.localdomain chronyd[1946]: Frequency -6.069 +/- 1.268 ppm read from /var/lib/chrony/drift
May 06 18:53:04 localhost.localdomain chronyd[1946]: Using right/UTC timezone to obtain leap second data
May 06 18:53:04 localhost.localdomain systemd[1]: Started NTP client/server.
May 06 18:53:10 localhost.localdomain chronyd[1946]: Selected source 192.168.134.135
May 06 18:53:10 localhost.localdomain chronyd[1946]: System clock TAI offset set to 37 seconds
#确认同步成功
[root@localhost ~]#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
===============================================================================
^- ntp8.flashdance.cx 2 6 73 21 +5230us[+5230us] +/- 111ms
^- ntp.wdc2.us.leaseweb.net 2 6 65 84 -3119us[-3117us] +/- 224ms
^- stratum2-1.ntp.mow01.ru.> 2 6 37 25 -2920us[-2906us] +/- 59ms
^- 119.28.206.193 2 6 37 23 +32ms[ +32ms] +/- 101ms
^* 192.168.134.135 3 6 37 24 +15ns[ +15us] +/- 5528us
14. 总结iptable 5表5链, 基本使用,扩展模块。
iptables语句是用来管理主机数据包的,链的作用是用来分别管理iptables规则语句的,链中的规则多个,按照从上到下的顺序匹配
- 五链:
prerouting:数据包进行路由决策前应用的规则,一般用于改变数据包的目标地址,不让别人知道我找的是谁(对进入的数据包进行预处理)
input:数据包经由路由决策后,进入到本机处理时应用的规则,一般用于本机进程处理的数据包(数据包本机处理)
output:新建数据包经路由决策后,从本机输出时应用的规则,一般用于本机处理后的数据包(数据包本机发出)
forward:数据包经由路由决策后,本机不做处理,仅仅是转发数据包时应用的规则(数据包本机转发)
postrouting:数据包从本机出去前,对数据包应用的规则,一般用于更改数据包的源地址信息,不让给别人知道我是谁(对输出的数据包进行预处理) - 三种报文流向
流入本机:PREROUTING->INPUT->用户空间进程
流出本机:用户空间进程->OUTPUT->POSTROUTING
转发:PREROUTING->FORWARD->POSTROUTING - 五表
security表:用于强制访问控制(MAC)网络规则,由Linux安装模块(如SELinux)实现
filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
nat表:network address translation 地址转换规则表
mangle表:修改数据标记位规则表
raw表:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
五表优先级由高到低的顺序为:
security->raw->mangle->nat->filter
查看filter表支持的链:
[root@localhost ~]#iptables -t filter -vnL
基本使用:
查看iptables规则:
iptables -L
清除iptables规则:
iptables -F
设置默认规则:
iptables -P [CHAIN] [target]
添加规则:
iptables -A [CHAIN] [OPTIONS] [target]
删除规则:
iptables -D [CHAIN] [OPTIONS] [target]
扩展模块
conntrack模块:用于跟踪连接状态;
limit模块:用于限制数据包流量;
mark模块:用于标记数据包;
REJECT模块:用于拒绝数据包;
LOG模块:用于记录数据包信息。
17. 使用REDIRECT将90端口重定向80,并可以访问到80端口的服务
可以使用以下命令将90端口重定向到80端口:
[root@Rocky-8 ~]#iptables -t nat -A PREROUTING -d 192.168.134.135 -p TCP --dport 90 -j REDIRECT --to-ports 80
[root@Rocky-8 ~]#iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REDIRECT tcp -- * * 0.0.0.0/0 192.168.134.135 tcp dpt:90 redir ports 80
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
这个命令会将所有流量从90端口重定向到80端口。这种方法在需要将一个端口转发到另一个端口时非常有用。注意,为了使这个规则生效,需要确保iptables服务正在运行,并且规则没有被其它的iptables规则覆盖或禁用。
22. 总结mysql设计范式
范式主要作用是为了解决数据的冗余性,实现数据的节约空间;缺点:性能不好,管理会复杂
第一范式约定了一个表里面字段是不能出现一样的类型的字段而且一个字段里面只能放单一值
第二范式说非主键的字段不能部分依赖于主键必须完全依赖于主键
第三范式说非主键字段之间不能有依赖关系