#!/bin/bash
Author: guop
centos7初始化脚本
PASSWD=password HOSTNAME=EIFM DNS1=119.29.29.29 DNS2=223.5.5.5
cat << EOF +------------------------------------------------------------------+ | ********** Welcome to CentOS 7 System init ********** | +------------------------------------------------------------------+ EOF
[ whoami
!= "root" ] && echo "please use root" && exit 1
function format() { echo -e "\033[32m Success!!! \033[0m\n" echo "#########################################################" }
###修改root用户密码 echo "set root passwd" echo $PASSWD | passwd root --stdin &> /dev/null format
###修改主机名 echo "set hostname" hostname $HOSTNAME && echo "HOSTNAME=$HOSTNAME" >> /etc/sysconfig/network format
###配置DNS解析
echo "set DNS"
echo "" > /etc/resolv.conf
echo "nameserver $DNS1" > /etc/resolv.conf
echo "nameserver $DNS2" >> /etc/resolv.conf
ping -c 3 www.baidu.com &> /dev/null || echo "请检查网络连接,此脚本需要访问外网" || exit 3
format
###关闭Selinux服务
echo "disable selinux"
[ getenforce
!= "Disabled" ] && setenforce 0 &> /dev/null && sed -i s/"^SELINUX=.*$"/"SELINUX=disabled"/g /etc/sysconfig/selinux
format
###更新yum源为阿里云 echo "set yum repo" mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &> /dev/null yum makecache &> /dev/null format
###锁定重要配置文件 echo "chattr files" chattr +i /etc/passwd chattr +i /etc/inittab chattr +i /etc/group chattr +i /etc/shadow chattr +i /etc/gshadow chattr +i /etc/resolv.conf chattr +i /etc/hosts chattr +i /etc/fstab #chattr -i /etc/passwd format
###设置字符集为中文 echo "set LANG" echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf format
###自动更新服务器时间 echo "set ntptime" yum install ntpdate -y cp -fr /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cat >> /etc/crontab << EOF #sync time */30 * * * * /usr/sbin/ntpdate pool.ntp.org &> /dev/null && /sbin/hwclock -w &> /dev/null EOF sed -i "/server/d" /etc/chrony.conf echo 'server ntp.aliyun.com iburst &>/dev/null' >> /etc/chrony.conf format
###内核参数优化
echo "Set sysctl.conf"
cat > /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 0
#开启路由功能
net.ipv4.conf.all.rp_filter = 1
#加强入站过滤和出站过滤
net.ipv4.conf.default.rp_filter = 1
#开启反向路径过滤
net.ipv4.conf.default.accept_source_route = 0
#处理无源路由的包
kernel.sysrq = 0
#控制系统调试内核的功能要求
kernel.core_uses_pid = 1
#用于调试多线程应用程序
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
#所有在消息队列中的消息总和的最大值
kernel.msgmax = 65536
指定内核中消息队列中消息的最大值
kernel.shmmax = 68719476736
#于定义单个共享内存段的最大值,64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为64GB物理内存,可取6410241024*1024-1=68719476735
kernel.shmall = 4294967296
#inux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是 16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
###内存资源使用相关设定
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 8388608 8388608 8388608
##应对DDOS攻击,TCP连接建立设置
net.ipv4.tcp_syncookies = 1
#防止syn flood攻击
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_max_syn_backlog = 262144
#SYN队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数
##应对timewait过高,TCP连接断开设置
net.ipv4.tcp_max_tw_buckets = 10000
#默认是180000。表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息
net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中TIME-WAIT sockets的快速收回功能,默认为 0 ,表示关闭。
net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的 TCP 连接,默认为 0 表示关闭
net.ipv4.tcp_timestamps = 0
#时间戳可以避免序列号的卷绕
net.ipv4.tcp_fin_timeout = 5
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些
net.ipv4.ip_local_port_range = 4000 65000
表示用于向外连接的端口范围
###TCP keepalived 连接保鲜设置 net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟 net.ipv4.tcp_keepalive_intvl = 15
当探测没有确认时,重新发送探测的频度。缺省是75
net.ipv4.tcp_keepalive_probes = 5
在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应
###其他TCP相关调节 net.core.somaxconn = 262144 #isten(函数)的默认参数,挂起请求的最大数量限制。web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 EOF sysctl -p format
#安装必要的软件包 echo "install pack" yum -y install make gcc gcc-c++ cmake snmp asciidoc libxslt-devel libxslt flex kernel-headers kernel-devel autoconf automake psmisc bzip2 bzip2-devel libxml2 libxml2-devel openssl openssl-devel libcurl libcurl-devel pcre pcre-devel libaio libmcrypt libmcrypt-devel mhash mhash-devel git zip unzip pigz ntpdate telnet nmap-ncat rsync vim-enhanced openssh-clients nfs-utils jemalloc screen mailx haveged xz iotop iotop tcpdump sysstat wget vim lsof bash-completion &> /dev/null format
read -p "系统初始化完毕,是否需要重启(y/n)?" if [ "$TT" == "y" ];then reboot elif [ "$TT" == "n" ];then exit 4 else echo "请输入y/n" fi