CentOS 7.x 模板机制作

目录

  1. 本文环境

    [root@temp ~]# cat /etc/redhat-release 
    CentOS Linux release 7.9.2009 (Core)
    [root@temp ~]# uname -r
    3.10.0-1160.36.2.el7.x86_64
    
  2. 为rm命令创建别名,防止误操作。

    [root@temp ~]# echo "alias rm='rm is not used'" >>/etc/bashrc
    [root@temp ~]# source /etc/bashrc
    
  3. 个性化修改命令提示符。

    [root@temp ~]# vim /etc/profile.d/ps1.sh
    C_IP=$(/usr/sbin/ip route | grep -oP '(?<=src )[0-9.]+' | head -1)
    C_PWD='\[\e[34m\]''\w''\[\e[0m\]'
    C_HOST_IP='\[\e[4;32m\]''\h',${C_IP}'\[\e[0m\]'
    C_ROOT_USER='\[\e[31m\]''\u''\[\e[0m\]'
    C_NORMAL_USER='\[\e[33m\]''\u''\[\e[0m\]'
    
    
    if [ ${EUID} -eq 0 ];then
            export PS1="$(printf '%1s') \$? \t ${C_ROOT_USER}@${C_HOST_IP}:${C_PWD} \\$ "
    else
            export PS1="$(printf '%1s') \$? \t ${C_NORMAL_USER}@${C_HOST_IP}:${C_PWD} \\$ "
    
    fi
    [root@temp ~]# source /etc/profile.d/ps1.sh
    
  4. 更换国内yum源,并安装常用软件。

      0 17:04:57 root@temp,172.16.15.21:~ # cd /etc/yum.repos.d/
      0 17:05:56 root@temp,172.16.15.21:/etc/yum.repos.d # mv CentOS-Base.repo CentOS-Base.repo.bak &>/dev/null
      0 17:06:11 root@temp,172.16.15.21:/etc/yum.repos.d # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      0 17:06:40 root@temp,172.16.15.21:/etc/yum.repos.d # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
      0 17:07:00 root@temp,172.16.15.21:/etc/yum.repos.d # yum makecache fast
      0 17:08:22 root@temp,172.16.15.21:/etc/yum.repos.d # yum -y install tree lrzsz nmap nc telnet vim wget lsof net-tools bash-completion psmisc bind-utils sysstat htop yum-utils expect iftop iotop zip unzip gcc ftp zlib-devel libffi-devel readline-devel sqlite-devel nfs-utils sshpass monit rsync ntpdate git gcc-c++* perl* openssl-devel tk-devel xz-devel python-backports-lzma
      0 17:18:51 root@temp,172.16.15.21:/etc/yum.repos.d # yum -y update
    
  5. 关闭selinux、防火墙、邮件服务。

      0 17:38:38 root@temp,172.16.15.21:/etc/yum.repos.d # sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config &>/dev/null
      0 17:39:09 root@temp,172.16.15.21:/etc/yum.repos.d # setenforce 0
      0 17:40:10 root@temp,172.16.15.21:/etc/yum.repos.d # systemctl stop firewalld.service postfix.service 
      0 17:40:13 root@temp,172.16.15.21:/etc/yum.repos.d # systemctl disable firewalld.service postfix.service
    
  6. 修改最大文件数和最大进程数限制。

      0 17:42:17 root@temp,172.16.15.21:/etc/yum.repos.d # vim /etc/security/limits.conf         # 文件末尾追加
    *       soft    nofile  65535    
    *       hard    nofile  65535
      0 17:42:17 root@temp,172.16.15.21:/etc/yum.repos.d # vim /etc/security/limits.d/20-nproc.conf
    *          soft    nproc     65535                      # 修改此项
    
  7. 永久关闭swap。

      0 17:44:38 root@temp,172.16.15.21:/etc/yum.repos.d # swapoff -a
      0 17:44:45 root@temp,172.16.15.21:/etc/yum.repos.d # echo "vm.swappiness = 0" >>/etc/sysctl.conf
      0 17:45:08 root@temp,172.16.15.21:/etc/yum.repos.d # sysctl -p
    
  8. 开启coredump,方便程序故障时排查问题。

      0 17:45:12 root@temp,172.16.15.21:/etc/yum.repos.d # vim /etc/security/limits.conf
    *       soft    core    104857600               # 指定dump最大文件为10G。
      0 17:45:32 root@temp,172.16.15.21:/etc/yum.repos.d # echo '/server/logs/corefile/core-%e-%p-%t' >/proc/sys/kernel/core_pattern                     # 指定dump文件生成路径。
    
  9. 添加时间同步(也可以内网部署ntp服务)。

      0 17:46:02 root@temp,172.16.15.21:/etc/yum.repos.d # echo '# time sync' >/var/spool/cron/root
      0 17:46:07 root@temp,172.16.15.21:/etc/yum.repos.d # echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
    
  10. 修改网卡名称为eth0。(按需操作)

      0 17:46:17 root@temp,172.16.15.21:/etc/yum.repos.d # sed -i 's/ens192/eth0/g' ifcfg-ens192
      0 17:46:21 root@temp,172.16.15.21:/etc/yum.repos.d # mv ifcfg-ens192 ifcfg-eth0
      0 17:46:32 root@temp,172.16.15.21:/etc/yum.repos.d # vi /etc/sysconfig/grub
    # 在GRUB_CMDLINE_LINUX=后的双引号内添加net.ifnames=0 biosdevname=0,跟双引号内的其它配置以空格隔开,例如GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0 biosdevname=0"
      0 17:46:28 root@temp,172.16.15.21:/etc/yum.repos.d # grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. 部署python环境。(按需操作)

  12. 部署java环境(略)。(按需操作)

  13. 部署node环境。(按需操作)

      0 17:50:15 root@temp,172.16.15.21:/etc/yum.repos.d # curl --silent --location https://rpm.nodesource.com/setup_12.x | bash -
      0 17:52:10 root@temp,172.16.15.21:/etc/yum.repos.d # yum -y install nodejs
    

内核配置

  1. 开启SYN cookies,防止部分SYN攻击,默认为0关闭的状态。

    # 临时修改。其它参数临时修改的方式也是一样。
    [root@temp ~]# sysctl -w net.ipv4.tcp_syncookies = 1
    # 永久修改。永久修改内核参数都需要写入到/etc/sysctl.conf文件中,并用-p参数生效。
    [root@temp ~]# echo 'net.ipv4.tcp_syncookies = 1' >>/etc/sysctl.conf
    [root@temp ~]# sysctl -p
    # 如果是写入的子目录,比如下面,则需要指定文件路径进行加载
    [root@temp ~]# echo 'net.ipv4.tcp_syncookies = 1' >>/etc/sysctl.d/lala.conf
    [root@temp ~]# sysctl -p /etc/sysctl.d/lala.conf
    
  2. Time wait优化,就是四次挥手没断干净(需要2个MSL),还占用连接的资源。

    # 开启TCP连接中TIME WAIT sockets的快速回收,默认为0,表示关闭。此参数对客户端和服务端同时起作用。
    net.ipv4.tcp_tw_recycle = 1
    # 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。此参数支队客户端起作用。
    net.ipv4.tcp_tw_reuse = 1
    # 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN WAIT 2状态的时间。
    net.ipv4.tcp_fin_timeout = 30
    # 注意1: tw_reuse,tw_recycle 必须在客户端和服务端 timestamps 开启时才管用(默认打开)
    # 注意2:一般情况下只用开启tw_reuse就可以了。前提是资源不够的时候,才会重用TIME WAIT连接。
    
  3. 向外提供的端口范围。默认是范围是32768到61000。

    net.ipv4.ip_local_port_range = 1024 65000
    
  4. 修改SYN队列的长度,默认是1024。加大后可以容纳更多的SYN等待连接。

    net.ipv4.tcp_max_syn_backlog = 8500
    
  5. 定义了系统中每一个端口最大的监听队列的长度, 对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。

    net.core.somaxconn = 262144
    
  6. 此参数指定了最大同时保持的Time_wait的数量,如果超过这个数字,Time_wait连接将立刻被清除并打印警告信息。

    net.ipv4.tcp_max_tw_buckets = 36000
    
  7. 决定了二次握手时发送ack+syn的数量,就是发送几次ack+syn后没收到第三次握手的ack消息,就放弃这个连接。

    net.ipv4.tcp_synack_retries = 2
    
  8. 用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。

    net.core.somaxconn = 16384
    
  9. 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

    net.core.netdev_max_backlog = 16384
    
  10. 这个值表示系统所能处理不属于任何进程的socket数量。系统内存充足的情况下,可以增加这个值。

    net.ipv4.tcp_max_orphans = 16384
    
  11. 接收套接字缓冲区大小的默认值(以字节为单位)。

    net.core.rmem_default = 262144
    
  12. 接收套接字缓冲区大小的最大值(以字节为单位)。

    net.core.rmem_max = 16777216
    
  13. 发送套接字缓冲区大小的默认值(以字节为单位)。

    net.core.wmem_default = 262144
    
  14. 发送套接字缓冲区大小的最大值(以字节为单位)。

    net.core.wmem_max = 16777216
    

未完待续......

写作不易,转载请注明出处,谢谢~~