Centos 6. X 기초 최적화

13712 단어 linux
방화벽 과 SElinux 닫 기 yum 원본 변경 자동 시작 서비스 간소화 ssh 로그 인 정책 최적화 사용자 와 로그 인 정책 최적화 정시 퀘 스 트 서버 추가 시간 동기 화 파일 설명자 크기 조정 커 널 파라미터 최적화 키 시스템 파일 잠 금 history 표시 시간 로그 인 정보 삭제 필요 한 소프트웨어 설치 시스템 기본 문자 집합 수정 과거 명령 기록 수량 감소 금 ping grub 비밀번호 추가 lvs / haproxy 부하 균형 에이전트 커 널 파라미터 설정 nginx / apache 생산 커 널 파라미터 최적화 squid / varnish / nginx proxy 생산 커 널 최적화 1. 방화벽 과 SElinux 닫 기
외부 네트워크 기기 가 방화벽 을 열 려 면 서 비 스 를 제공 해 야 하 는 포트 만 열 어야 합 니 다.
#iptables
service iptables stop
/sbin/chkconfig iptables off

#selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2. yum 원본 변경
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -O /etc/yum.repos.d/CentOS-Base.repo

3. 자동 시동 서비스 간소화
LANG=en     #              
for i in `chkconfig --list|grep 3:on|awk '{print $1}'|grep -Ev "crond|network|rsyslog|sshd|sysstat"`;do chkconfig --level 3 $i off;done

4. ssh 로그 인 정책 최적화
# /etc/ssh/sshd_config
Port22     
PermitRootLogin no   root    
PermitEmptyPasswords         
UseDNS no      DNS
GSSAPIAuthentication no linux SSH           

###
sed -i 's/#Port 22/Port 52113/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config
sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
/etc/init.d/sshd restart 

5. 사용자 와 로그 인 정책 최적화
username='sysadmin'
password='sysadmin'
useradd $username && echo $password | passwd --stdin $username &>/dev/null
sed -i "99i sysadmin    ALL=(ALL)       NOPASSWD:ALL" /etc/sudoers
echo "Defaults      logfile=/var/log/sudo.log" >>/etc/sudoers
echo "local2.debug      /var/log/sudo.log" >>/etc/rsyslog.conf

6. 정시 퀘 스 트 서버 를 추가 하여 시간 동기 화
/usr/sbin/ntpdate pool.ntp.org &>/dev/null

echo '#Update time' >>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1' >>/var/spool/cron/root

7. 파일 설명자 크기 조정
ulimit -HSn 65535
cat >> /etc/security/limits.conf << EOF
*           soft   nofile       65535
*           hard   nofile       65535
EOF

8. 커 널 파라미터 최적화
cat >> /etc/sysctl.conf << EOF
vm.swappiness = 0
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000     65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384  
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max=25000000
net.netfilter.nf_conntrack_tcp_timeout_established=180
net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
EOF
/sbin/sysctl -p

#net.ipv4.tcp_fin_timeout = 2               ,           FIN-WAIT-2     ,    ,             ,      。
#net.ipv4.tcp_tw_reuse = 1        。  TIME-WAIT         TCP  。   0    。
#net.ipv4.tcp_tw_recycle = 1     TCP    TIME-WAIT        ,   0    
#net.ipv4.tcp_syncookies = 1     SYN Cookies。   SYN       ,  cookie   ,      SYN  。   0,    。
#net.ipv4.tcp_keepalive_time =600    keepalive   ,TCP  keepalive     ,   2  ,    10  
#net.ipv4.ip_local_port_range = 4096    65000 #           ,    ,32768~65535
#net.ipv4.tcp_max_syn_backlog = 16384   SYN     ,   1024,       16384,                。
#net.ipv4.tcp_max_tw_buckets = 36000        TIME_WAIT        ,         ,TIME_WAIT                。   180000,  36000。  Apache、Nginx    ,                   TIME_WAIT     ,    Squid  ,     。          TIME_WAIT        ,   Squid       TIME_WAIT     。
#net.ipv4.route.gc_timeout = 100         ,                    300 
#net.ipv4.tcp_syn_retries = 1          ,         SYN          。     255,    5,   180   。
#net.ipv4.tcp_synack_retries = 1           SYN,     SYN + ACK   ,         SYN     。         ( threeway handshake)        。                  SYN+ACK   。     255,    5,   180     。
#net.core.somaxconn = 16384       (LISTEN)          ,                      。web   listen   backlog           net.core.somaxconn   128, nginx   NGX_LISTEN_BACKLOG   511,          。       ,           。   128.
#net.core.netdev_max_backlog = 16384                            ,               ,         ,        。   1024
#net.ipv4.tcp_max_orphans = 16384               TCP sockets    。        ﹐                reset,         。          ﹐            DoS   ﹐                   。             。    8192.

#      iptables      ,         ,      。
#net.ipv4.ip_conntrack_max = 25000000        ipv4   ,  65536,              ,    128M,     8192,1G           65536
#net.nf_conntrack_max = 25000000
#net.netfilter.nf_conntrack_max = 25000000
#net.netfilter.nf_conntrack_tcp_timeout_established = 180     tcp       ,  432000,   5 ,                         ,        ,      NAT ip_conntrack: table full   ,     
#net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
#net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
#net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

9. 키 시스템 파일 잠 금
        :chattr +i files    -i   
/etc/passwd  /etc/shadow  /etc/group  /etc/gshadow  /etc/inittab /etc/services /etc/rc.local
lsattr file :        

10. history 표시 시간
# cat /etc/profile  #       
HISTTIMEFORMAT="%F %T `whoami` "
# source /etc/profile  #    

11. 로그 인 정보 삭제
>/etc/issue
>/etc/motd

12. 필요 한 소프트웨어 설치
yum install lrzsz ntpdate sysstat tree wget nmap telnet -y

13. 시스템 기본 문자 집합 수정
# vi  /etc/sysconfig/i18n
LANG=”zh_CN.UTF-8″   #           ,     gbk   LANG=”zh_CN.GB18030″
# source  /etc/sysconfig/i18n #   

14. 과거 명령 기록 수량 감소
sed -i “s/HISTSIZE=1000/HISTSIZE=10/” /etc/profile #       1000  10
source  /etc/profile  #   

15. ping 금지 (필수)
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf

16. grub 비밀번호 추가 (필수)
1)  /sbin/grub-md5-crypt    MD5   
# /sbin/grub-md5-crypt 
Password: 
Retype password: 
$1$7XIYM/$L4is2wwmH0CZqGH1Oq4RY.   
2)  grub.conf  
# vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$jJJYM/$lfH83xAKeks/dkptv7wx9.  #  :password    plashimage title    ,      
title CentOS (2.6.32-431.el6.x86_64)

17. lvs / haproxy 부하 균형 에이전트 커 널 파라미터 설정
#vm.swappiness = 0
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000     65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
#net.ipv4.tcp_max_orphans = 16384
# iptables -V   
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max=25000000
net.netfilter.nf_conntrack_tcp_timeout_established=180
net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120

18. nginx / apache 생산 커 널 파라미터 최적화
net.ipv4.tcp_max_syn_backlog = 65536
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 2048 65535

19. squid / varnish / nginx proxy 생산 커 널 최적화
CDN  cache       
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 1800000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_retriesl = 22
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3

다음 스 크 립 트 는 최 적 화 된 8 가지 항목 을 포함 합 니 다.
# cat system_optimization.sh 
#!/bin/bash
. /etc/init.d/functions

#Require root to run this script.
if [ "`whoami`" != "root" ];then
        echo "Please run this script as root."
        exit 1
fi

close_iptables_selinux(){
#stop iptables and SELinux
/etc/init.d/iptables stop &> /dev/null
/sbin/chkconfig iptables off
sel=`getenforce`
if [ "$sel" == "Enforcing" ];then
        setenforce 0
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
fi

if [ $? -eq 0 ];then
        action "close iptables and selinux" /bin/true
else
        action "close iptables and selinux" /bin/false
fi
}

update_yum_repo(){
#make the 163.com as the default yum repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -O /etc/yum.repos.d/CentOS-Base.repo &>/dev/null
#ls -l /etc/yum.repos.d/
if [ $? -eq 0 ];then
        action "Update yum repo" /bin/true
else
        action "Update yum repo" /bin/false
fi
}

service(){
#Service optimization
for i in `chkconfig --list|grep 3:on|awk '{print $1}'|grep -Ev "crond|network|rsyslog|sshd|sysstat"`;do chkconfig --level 3 $i off;done

if [ $? -eq 0 ];then
        action "Service optimization" /bin/true
else
        action "Service optimization" /bin/false
fi
}

ssh(){
#set ssh
sed -i 's/#Port 22/Port 52113/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config
sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
/etc/init.d/sshd restart &>/dev/null
grep "Port 52113" /etc/ssh/sshd_config &>/dev/null
if [ $? -eq 0 ];then
        action "Optimization of SSH" /bin/true
else
        action "Optimization of SSH" /bin/false
fi
}


sudo(){
#sudo
username='sysadmin'
password='sysadmin'
useradd $username && echo $password | passwd --stdin $username &>/dev/null
sed -i "99i sysadmin    ALL=(ALL)       NOPASSWD:ALL" /etc/sudoers
echo "Defaults      logfile=/var/log/sudo.log" >>/etc/sudoers
echo "local2.debug      /var/log/sudo.log" >>/etc/rsyslog.conf
#Sudo authorization
if [ $? -eq 0 ];then
        action "Sudo authorization" /bin/true
else
        action "Sudo authorization" /bin/false
fi
}

update_time(){
#Update time
/usr/sbin/ntpdate pool.ntp.org &>/dev/null
if [ $? -eq 0 ];then
        action "Update time" /bin/true
else
        action "Update time" /bin/false
fi
echo '#Update time' >>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1' >>/var/spool/cron/root
}

set_file_limit(){
#set the file limit
ulimit -HSn 65535
cat >> /etc/security/limits.conf << EOF
*                -       nofile          65535
EOF
if [ $? -eq 0 ];then
        action "Set file limit" /bin/true
else
        action "Set file limit" /bin/false
fi
#tail -2 /etc/security/limits.conf
}


kernel(){
#tune kernel parametres
cat >> /etc/sysctl.conf << EOF
vm.swappiness = 0
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000     65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384  
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max=25000000
net.netfilter.nf_conntrack_tcp_timeout_established=180
net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
EOF
/sbin/sysctl -p &>/dev/null
grep "net.nf_conntrack_max = 25000000" /etc/sysctl.conf &>/dev/null
if [ $? -eq 0 ];then
        action "Tune kernel parametres" /bin/true
else
        action "Tune kernel parametres" /bin/false
fi
}

close_iptables_selinux
update_yum_repo
service
ssh
sudo
update_time
set_file_limit
kernel

cat << EOF
+-------------------------------------------------+
|               optimizer is done                 |
|   it's recommond to restart this server !       |
+-------------------------------------------------+
EOF

좋은 웹페이지 즐겨찾기