系统初始化
更换系统 yum|dnf 源
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 备份 repo 文件
cd /etc/yum.repos.d && mkdir repo_bak && mv *.repo repo_bak/
# 下载阿里源镜像文件
wget http://mirrors.aliyun.com/repo/Centos-8.repo
# 安装 epel-release 扩展仓库
dnf -y install epel-release
# 更新缓存
dnf clean all && dnf makecache
# 查看可用的仓库列表
dnf repolist安装常用软件
1
dnf install -y net-tools vim wget lrzsz tree bash-completion
关闭防火墙
1
systemctl disable --now firewalld
关闭 Selinux
1
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
修改醒目 PS1
1
2
3
4
5
6
7
8
9
10
11
12cat >> /etc/profile<<EOF
# 修改 PS1 样式
export PS1='\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\[\e[33;40m\]\h \[\e[35;40m\]\W\[\e[0m\]]\\$ '
# 修改历史命令格式
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S \$(whoami) "
export PROMPT_COMMAND='{ msg=\$(history 1 | { read x y; echo \$y; }); logger "[euid=\$(whoami)]":\$(who am i):[\$(pwd)]"\$msg";}'
# 设置回话超时时间
export TMOUT=300
EOF修改最大文件打开数
1
2
3
4
5
6sed -i '/^# End/i\* soft nofile 655350' /etc/security/limits.conf
sed -i '/^# End/i\* hard nofile 131072' /etc/security/limits.conf
sed -i '/^# End/i\* soft nproc 655350' /etc/security/limits.conf
sed -i '/^# End/i\* hard nproc 655350' /etc/security/limits.conf
sed -i '/^# End/i\* soft memlock unlimited' /etc/security/limits.conf
sed -i '/^# End/i\* hard memlock unlimited' /etc/security/limits.conf设置 SSH 登录警告语
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 编辑 vim /etc/ssh/sshd_config 配置文件,找到 #Banner none 参数,在其下一行增加以下内容
sed -i 's_#Banner none_Banner /etc/ssh/alert_' /etc/ssh/sshd_config
# 新增告警信息文件 /etc/ssh/alert。文件内容如下
cat > /etc/ssh/alert <<EOF
***************************************************************************
警告: 你正在登录到重要服务器,所有从操作将被记录。请谨慎操作 !!!
***************************************************************************
EOF
# 修改 /etc/motd 文件,内容如下
cat > /etc/motd <<EOF
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! !!!
!!! You have successfully logged on to the Prometheus server, !!!
!!! All your actions will be recorded, please be carefully! !!!
!!! !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
EOF设置自动同步时间
1
2
3
4
5
6
7# 安装 ntpdate
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
dnf install -y wntp
# 配置时间同步
echo '05 01 * * * /usr/sbin/ntpdate time2.aliyun.com >/dev/null' >> /var/spool/cron/root
echo '/usr/sbin/ntpdate time2.aliyun.com' >> /etc/rc.local关闭 SSH 配置中 UseDNS
1
sed -i 's/#UseDNS.*/UseDNS no/g' /etc/ssh/sshd_config
处理 cockpit 问题,Cockpit是一个 Web 端的系统管理工具,只用鼠标点点就能管理系统,事实上也确实如此,启动Cockpit服务之后,只需要鼠标点点点就能完成系统很多基础操作,比如查看系统信息,启动/停止服务,新增或者更改账户,系统更新,Web终端及查看网络流量等功能。
1
2
3
4
5
6
7
8
9
10
11# 禁用 cockpit
systemctl disable --now cockpit.socket
# 注销 cockpit
systemctl mask cockpit.socket
# 卸载 cockpit
dnf remove -y cockpit
# 删除 SSH 登录提示
rm -rf /etc/motd.d/cockpit
系统安全加固
设置口令策略
1
2
3
4
5
6
7
8
9
10# 使用命令 vim /etc/login.defs 修改配置文件
# 新建用户的密码最长使用天数
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g' /etc/login.defs
# 新建用户的密码最短使用天数
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 0/g' /etc/login.defs
# 密码最小长度
sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN 10/g' /etc/login.defs
#新建用户的密码到期提前提醒天数
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 7/g' /etc/login.defs密码复杂度,将
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
注释并在其下面新增1行1
2
3
4
5# 注释原有的内容
sed -i 's/^password.*requisite.*pam_pwquality.*/#&/g' /etc/pam.d/system-auth
# 增加以下内容
sed -i '/password.*requisite.*pam_pwquality.*/a\password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=' /etc/pam.d/system-authtry_first_pass: 当 pam_unix 验证模块与 password 验证类型一起使用时,该选项主要用来防止用户新设定的密码与以前的旧密码相同。
minlen=8: 最小长度8位
difok=5: 新、旧密码最少5个字符不同
dcredit=-1: 最少1个数字
lcredit=-1: 最少1个小写字符,(ucredit=-1:最少1个大写字符)
ocredit=-1: 最少1个特殊字符
retry=1: 1次错误后返回错误信息
type=xxx: 此选项用来修改缺省的密码提示文本新口令不能与4个最近使用的相同
1
2# 在 password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok 所在行的后面添加 remember=5
sed -i 's/^password.*sufficient.*pam_unix.*/& remember=5/g' /etc/pam.d/system-auth禁止关键文件的修改
1
chattr +i /etc/passwd /etc/shadow
开启内核的 SYN cookie 保护
1
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
设置 umask 值
1
2echo 'umask 027' >> /etc/bashrc
echo 'umask 027' >> /etc/profile隐藏系统版本信息
1
2mv /etc/issue /etc/issue.bak
mv /etc/issue.net /etc/issue.net.bak设置登录失败锁定(终端锁定)
1
echo 'auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800' >> /etc/pam.d/system-auth
通过终端登录,5次登录失败后锁定账号30分钟,锁定期间此账号无法再次登录。
SSH 安全加固参数增强
1
2
3
4
5
6
7
8
9
10
11# 禁止 root 用户远程登录
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
# 禁止空密码登录
sed -i 's/^#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config
# 关闭 ssh 的 tcp 转发
sed -i 's/^#AllowTcpForwarding yes/AllowTcpForwarding no/' /etc/ssh/sshd_config
# 重启 sshd 服务
systemctl restart sshd限制登录的来源IP
CentOS7.x 使用的是 hosts.allow 和 hosts.deny 文件进行限制,到 CentOS8.x 已弃用 hosts.allow 和 hosts.deny 文件,可使用sshd_config 文件和 firewalld 防火墙规则限制。
- 使用 firewalld 防火墙规则进行限制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 限制 IP 地址访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="80" reject"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="80" accept"
firewall-cmd --reload
firewall-cmd --zone=public --list-rich-rules
# 解除限制IP地址访问
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="80" reject"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="80" accept"
firewall-cmd --reload
firewall-cmd --zone=public --list-rich-rules
# 限制端口访问
firewall-cmd --permanent --zone=public --add-port=100-500/tcp
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
# 解除端口限制
firewall-cmd --permanent --zone=public --remove-port=100-500/tcp
firewall-cmd --permanent --zone=public --remove-port=22/tcp
firewall-cmd --reload
firewall-cmd --zone=public --list-ports- 在 /etc/ssh/sshd_config 文件中添加限制
1
2AllowUsers root@192.168.10.0/24
DenyUsers root@192.168.10.2allow/deny按照一定顺序生效:
DenyUsers–>AllowUsers–>DenyGroups–>AllowGroups