天天看點

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

CentOS7.9安全加強鏡像制作流程梳理

1、先準備一台CentOS7.9虛拟機

準備虛拟機用于後面腳本的優化

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

确定好分區方案

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

2、yum update更新

  • 先yum update 檢查是否新的更新
  • 完成後再yum check-upate

注意yum update 與yum upgrade的差別

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

是否删除原低版本核心的啟動項 這個可以自行決定

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

3、YUM軟體源配置

YUM源及EPEL源設定

4、常用軟體包的安裝

例如vim lrzsz bash-completion net-tools wget git

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

當然也可以加入排查需要的一些工具包nmap htop nmon iftop ncdu nethogs tcpdump

以上初始環境完成後,建議對該虛拟機做一下快照

因為下面編寫安全加強腳本是一件很冗雜的事,需要初始環境作為沙盤來進行反複測試與驗證加強腳本

5、編寫安全加強腳本

腳本需要從諸如賬号管理,密碼政策,授權管理,服務管理,配置管理,網絡管理,權限管理等多個角度提高CentOS Linux的安全性。

例如SSH的一些安全加強項

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

6、借助雲廠商的基線檢查自動化工具進行驗證

上傳安全加強腳本并執行

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

通過自動化基線檢查不斷完善加強腳本

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

腳本涉及加強項

  • 1)、/etc/pam.d/sshd 中加入pam_tally2.so 設定多次登入失敗鎖定
  • 2)、/etc/logrotate.conf中修改系統相關日志輪轉及保留時間
  • 3)、曆史指令添加時間戳格式
  • 4)、rsyslog日志轉發到日志伺服器
  • 5)、SELINUX關閉
  • 6)、umask值
  • 7)、登陸逾時時間設定TMOUT

等等,這裡不詳細列舉了

總之你能想到的加強項越全面越好,可以集思廣益,不斷來完善腳本

我這邊改寫的腳本部分内容如下

#!/usr/bin/env bash
# Author:       yuanfan 
# Date:         2021-07-03 
#sec_system.sh 系統加強腳本
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

RGB_DANGER='\033[31;1m'
RGB_WAIT='\033[37;2m'
RGB_SUCCESS='\033[32m'
RGB_WARNING='\033[33;1m'
RGB_INFO='\033[36;1m'
RGB_END='\033[0m'

CHECK_CENTOS=$( cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/' )
CHECK_RAM=$( cat /proc/meminfo | grep "MemTotal" | awk -F" " '{ram=$2/1000000}{printf("%.0f",ram)}' )

LOCK=/var/log/sec_centos7_record.log

tool_info() {
    echo -e "========================================================================================="
    echo -e "                             InitSec CentOS 7 Script                                     "
    echo -e "========================================================================================="
}

check_root(){
    if [[ $EUID -ne 0 ]]; then
        echo -e "${RGB_DANGER}This script must be run as root!${RGB_END}"
        exit 1
    fi
}

check_lock() {
    if [ ! -f "$LOCK" ];then
        touch $LOCK
    else
        echo -e "${RGB_DANGER}Detects that the initialization is complete and does not need to be initialized any further!${RGB_END}"
        exit 1
    fi
}

check_os() {
    if [ "${CHECK_CENTOS}" != '7' ]; then
        echo -e "${RGB_DANGER}This script must be run in CentOS 7!${RGB_END}"
        exit 1
    fi
}

new_swap() {
    echo "============= swap =============" >> ${LOCK} 2>&1
    if [ "${CHECK_RAM}" -le '2' ]; then
    echo -en "${RGB_WAIT}Configuring...${RGB_END}"
    dd if=/dev/zero of=/swapfile bs=1024 count=1048576 >> ${LOCK} 2>&1
    chmod 600 /swapfile >> ${LOCK} 2>&1
    mkswap /swapfile >> ${LOCK} 2>&1
    swapon /swapfile >> ${LOCK} 2>&1
    echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
    echo '# Swap' >> /etc/sysctl.conf
    echo 'vm.swappiness = 10' >> /etc/sysctl.conf
    sysctl -p >> ${LOCK} 2>&1
    sysctl -n vm.swappiness >> ${LOCK} 2>&1
    echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}"
    else
    echo -e "${RGB_SUCCESS}Skip, no configuration needed${RGB_END}"
    fi
}

open_bbr() {
    echo "============= bbr =============" >> ${LOCK} 2>&1
    echo -en "${RGB_WAIT}Configuring...${RGB_END}"
    echo "# BBR" >> /etc/sysctl.conf
    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    #echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
    sysctl -p >> ${LOCK} 2>&1
    sysctl -n net.ipv4.tcp_congestion_control >> ${LOCK} 2>&1
    lsmod | grep bbr >> ${LOCK} 2>&1
    echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}"
}

disable_selinux() {
    echo "============= selinux  =============" >> ${LOCK} 2>&1
    echo -en "${RGB_WAIT}Configuring...${RGB_END}"
    setenforce 0 >> ${LOCK} 2>&1
    sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config
    echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}"
}

time_zone() {
    echo "============= time zone =============" >> ${LOCK} 2>&1
    echo -en "${RGB_WAIT}Configuring...${RGB_END}"
    rm -rf /etc/localtime >> ${LOCK} 2>&1
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> ${LOCK} 2>&1
    ls -ln /etc/localtime >> ${LOCK} 2>&1
    echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}"
}

custom_profile() {
    echo "============= custom profile =============" >> ${LOCK} 2>&1
    echo -en "${RGB_WAIT}Configuring...${RGB_END}"
cat > /etc/profile.d/history_command_record.sh  << \EOF
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
        export OLD_PWD=$PWD;
fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
        logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";
fi;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;'
export PATH=$PATH:$HISTTIMEFORMAT:$PROMPT_COMMAND
EOF
    cat > /etc/profile.d/centos7custom.sh << EOF
PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\\\\$ "
GREP_OPTIONS="--color=auto"
alias l='ls -AFhlt'
alias grep='grep --color'
alias egrep='egrep --color'
alias fgrep='fgrep --color'
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S  "
EOF
    cat /etc/profile.d/centos7custom.sh >> ${LOCK} 2>&1
    echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}"
}

adjust_ulimit() {
    echo "============= adjust ulimit =============" >> ${LOCK} 2>&1
    echo -en "${RGB_WAIT}Configuring...${RGB_END}"
    sed -i '/^# End of file/,$d' /etc/security/limits.conf
    cat >> /etc/security/limits.conf <<EOF
# End of file
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
root soft core unlimited
root hard core unlimited
root soft nproc 1000000
root hard nproc 1000000
root soft nofile 1000000
root hard nofile 1000000
EOF
    cat /etc/security/limits.conf >> ${LOCK} 2>&1
    echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}"
}

           

複制

7、清理操作

在制作鏡像前需要做一些清理

  • 1)清空曆史指令及系統的一些日志

    echo > /root/.bash_histroy

    history -c

    /var/log/目錄下系統日志進行清理

    如果是公有雲平台,雲廠商制作鏡像時自動把這些操作包含進去

  • 2)删除相關基線檢查自動化工具
  • 3)删除加強腳本

    等等清理操作,總之保證制作鏡像前環境是幹淨的

8、關閉虛拟機制作鏡像

關閉虛拟機制作鏡像

CentOS7.9安全加強鏡像制作流程梳理CentOS7.9安全加強鏡像制作流程梳理

(圖檔可放大檢視)

最後使用自定義鏡像建立執行個體進行驗證

如果要在生産環境中使用的話,還需要進行穩定性測試