#!/bin/sh
#Centos7.X系统环境初始化设置脚本
cat /etc/redhat-release |grep -i centos |grep '7.[[:digit:]]' &>/dev/null
if [[ $? != 0 ]]
then
echo -e "\e[1;31m不支持的操作系统,该脚本只适用于CentOS 7.x x86_64 操作系统\e[0m"
exit 1
fi
#查看本机器基本信息
echo -e "\e[1;31m系统版本为:\e[0m"
cat /etc/redhat-release|awk '{print $1,$4}'
df_t=`df -h|grep /$|awk '{print $2}'`
df_s=`df -h|grep /$|awk '{print $4}'`
echo -e "\e[1;31m当前磁盘总容量为: $df_t, 剩余容量为: $df_s\e[0m"
mem_t=`free -h|grep ^Mem|awk '{print $2}'`
mem_s=`free -h|grep ^Mem|awk '{print $4}'`
echo -e "\e[1;31m当前内存总值为: $mem_t, 空闲内存为: $mem_s\e[0m"
physical_id=`grep "physical id" /proc/cpuinfo|uniq|wc -l`
cpuinfo=`grep ^processor /proc/cpuinfo | wc -l`
echo -e "\e[1;31m当前机器有$physical_id个cpu,$cpuinfo核心数\e[0m"
#配置yum源并安装常用工具
echo -e "\e[1;31m现yum源为:\e[0m"
ls /etc/yum.repos.d/
sleep 1
echo -e "\e[1;31m删除系统自带CentOS*源并改为阿里源,epel源\e[0m"
rm -rf /etc/yum.repos.d/CentOS*
echo -e "\e[1;31m正在配置阿里源\e[0m"
cd /etc/yum.repos.d/
curl -o /etc/yum.repos.d/Ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null
if [ $? = 0 ];then
echo -e "\e[1;31m阿里源配置完成,正在安装wget命令\e[0m"
yum -y install wget &> /dev/null
echo -e "\e[1;31m wget已安装完成,正在配置epel源\e[0m"
wget https://mirrors.aliyun.com/repo/epel-7.repo &> /dev/null
echo -e "\e[1;31m epel源配置完成,正在建立本地yum源缓存\e[0m"
yum clean all &>/dev/null
yum makecache &>/dev/null
echo -e "\e[1;31m正在安装vim、bash补全、netstat、tree、nmap、lrzsz、dos2unix、telnet、screen、lsof、ntp请稍后\e[0m"
yum -y install vim bash-completion net-tools tree nmap lrzsz dos2unix telnet screen lsof ntp &>/dev/null
echo -e "\e[1;31m查看时间 并设置初始化时间\e[0m"
date +%F\ %T
ntpdate cn.pool.ntp.org && hwclock -w
else
echo -e "\e[1;31m阿里源配置失败,请检测网络环境!\e[0m"
exit 2
fi
echo -e "\e[1;31m设置linux的最大文件打开数\e[0m"
ulimit -SHn 65535
ulimit -a
if [ "`egrep "* - nofile 65535|* - nproc 65536" /etc/security/limits.conf|wc -l`" == "0" ];then
echo "* - nofile 65535" >> /etc/security/limits.conf
echo "* - nproc 65536" >> /etc/security/limits.conf
else
echo "\e[1;31m linux最大文件打开数 设置成功或者之前已经设置过了\e[0m"
fi
#关闭防火墙,selinux,修改ssh
setenforce 0 &>/dev/null
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld &>/dev/null
systemctl disable firewalld &>/dev/null
echo -e "\e[1;31m防火墙,selinux均已经关闭!\e[0m"
sed -ri "s@GSSAPIAuthentication yes@GSSAPIAuthentication no\nUseDNS=no@" /etc/ssh/sshd_config
systemctl restart sshd &>/dev/null
#添加DNS地址
cat >> /etc/resolv.conf <<-OK
#阿里云DNS
nameserver 223.5.5.5
nameserver 223.6.6.6
#百度DNS
nameserver 180.76.76.76
#腾讯DNS
nameserver 119.29.29.29
#google DNS
nameserver 8.8.8.8
#114 DNS
nameserver 114.114.114.114
nameserver 114.114.115.115
OK
#优化内核参数
echo -e "\e[1;31m修改/etc/sysctl.conf\e[0m"
cat >> /etc/sysctl.conf <<-EOF
#禁用包过滤功能
net.ipv4.ip_forward = 0
#启用源路由核查功能
net.ipv4.conf.default.rp_filter = 1
#禁用所有IP源路由
net.ipv4.conf.default.accept_source_route = 0
#使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.sysrq = 0
#控制core文件的文件名是否添加pid作为扩展
kernel.core_uses_pid = 1
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536
#整个系统最大消息队列数量限制
kernel.msgmax = 65536
#单个共享内存段的大小(单位:字节)限制,计算公式64G*1024*1024*1024(字节)
kernel.shmmax = 68719476736
#所有内存大小(单位:页,1页 = 4Kb),计算公式16G*1024*1024*1024/4KB(页)
kernel.shmall = 4294967296
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000
#开启有选择的应答
net.ipv4.tcp_sack = 1
#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
net.ipv4.tcp_window_scaling = 1
#TCP读buffer
net.ipv4.tcp_rmem = 4096 131072 1048576
#TCP写buffer
net.ipv4.tcp_wmem = 4096 131072 1048576
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 40960
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 262144
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 1
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000
#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 15
#表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
net.ipv4.tcp_keepalive_time = 30
#对外连接端口范围
net.ipv4.ip_local_port_range = 2048 65000
#表示文件句柄的最大数量
fs.file-max = 102400
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
# 开启并记录欺骗,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# 处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 不充当路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# IPv6设置
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
# 增加系统文件描述符限制
fs.file-max = 65535
# 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
kernel.pid_max = 65536
# 增加TCP最大缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# 增加Linux自动调整TCP缓冲区限制
# 最小,默认和最大可使用的字节数
# 最大值不低于4MB,如果你使用非常高的BDP路径可以设置得更高
# Tcp窗口等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
EOF
/sbin/sysctl -p
echo -e "\e[1;31m系统已优化完毕,请使用!\e[0m"
wget :下载工具,具体用法:https://www.cnblogs.com/ftl1012/p/9265699.html
vim : 文本编辑器,https://www.runoob.com/linux/linux-vim.html
bash-completion :命令自动补全
netstat :显示网络状态的命令,https://www.runoob.com/linux/linux-comm-netstat.html
tree :以树状图列出目录内容的命令,https://www.runoob.com/linux/linux-comm-tree.html
nmap :网络安全审计工具,https://www.cnblogs.com/LyShark/p/10637507.html
lrzsz :本地与服务器互传工具,sz filename命令发送文件到本地,rz命令上传本地文件到服务器
dos2unix :解决win和linux换行符转换的问题,https://www.jianshu.com/p/d2e96b2ccab9
telnet :一般用来测别的服务器端口开了没,语法:telnet
screen :命令行终端切换,https://www.jianshu.com/p/0702a451dd0c
lsof :列出当前系统打开文件的工具,https://www.jianshu.com/p/a3aa6b01b2e1
ntp :时间服务器,https://www.cnblogs.com/liushui-sky/p/9203657.html
http://www.360doc.com/showweb/0/0/906099299.aspx