1. 程式人生 > 實用技巧 >CentOS系統常見優化

CentOS系統常見優化

目錄

修改主機名

# centos6
cat /etc/sysconfig/network

# centos7
hostnamectl set-hostname node01
vim /etc/hostname
"""
node01
"""

# ubuntu

關閉防火牆和SELINUX

iptables -F
iptabls -L
systemctl stop firewalld
systemctl disable firewalld

vim /etc/selinux/config
"""
#SELINUX=enforcing
#SELINUXTYPE=targeted 
SELINUX=disabled
"""

getenforce

配置網路

vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
"""
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777728
UUID=f6e84975-d398-4925-bbbc-883aa2735a87
DEVICE=eno16777728
ONBOOT=yes
IPADDR=172.16.0.1
GATEWAY=172.16.0.1
NETMASK=255.255.0.0
DNS1=172.16.0.1
"""

systemctl restart network.service    ##重啟服務
service network restart
ip addr        ###檢視網路狀態

修改yum源

# 本地源
cd /etc/yum.repo.d/
vim media.repo
"""
[base]
name=media
baseurl=file:///media/cdrom
gpgcheck=0
"""

mkdir /media/cdrom
mount /dev/cdrom /media/cdrom

# 國內yum源
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

# epel源
yum list | grep epel-release
yum install -y epel-release

wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean all
yum makecache

yum repolist enabled

yum repolist all

時間同步

echo '#time sync by oldboy at 2010-2-1' >>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' >> /var/spool/cron/root
crontab -l

精簡自啟程式

chkconfig --list | egrep -v "crond|network|rsyslog|sshd|sysstat" | awk -F "" '{print "chkconfig",$1,"off"}' | bash

必須最低保留的啟動服務:

crond:定時任務服務
network:網路服務
rsyslog:日誌服務
sshd:遠端連結服務
sysstat:系統監控服務(涉及一系列監控工具)

安裝常用軟體並更新已有軟體

yum install lrzsz nmap tree dos2unix nc -y
yum update
yum upgrade
yum -y update  # 升級所有包,改變軟體設定和系統設定,系統版本核心都升級
yum -y upgrade  # 升級所有包,不改變軟體設定和系統設定,系統版本升級,核心不改變

中文字符集

# centos6
yum -y groupinstall chinese-support   # 安裝中文包
cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori
echo 'LANG="zh_CN.UTF-8"' >/etc/sysconfig/i18n
source /etc/sysconfig/i18n
echo $LANG


# centos7
locale    # 檢視系統語言
vim /etc/locale.conf
"""
LANG="zh_CN.GB18030" # 英文en_US.UTF-8
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" 
SUPPORTED="zh_CN.UTF8:zh_CN:zh:en_US.UTF-8:en_US:en" 
SYSFONT="lat0-sun16"
"""

修改終端提示符

為了區分生產環境和測試環境

echo 'PS1="\[\e[1;5;41;32m\][\u@\h \W]\\$\[\e[0m\]"' >> ~/.bash_profile

PS1="[\e[1;5;41;33m][\u@\h \W]\$[\e[0m] " 紅色背景黃色字型閃爍,建議寫到root環境變數中

PS1="[\e[1;33m][\u@\h \W]\$[\e[0m] " 寫入到普通使用者環境變數中

31m:紅色

32m:綠色

33m:黃色

34m:藍色

35m:紫色

\u 當前使用者

\h 主機名簡稱

\H 主機名

\w 當前工作目錄

\W 當前工作目錄基名

\t 24小時時間格式

\T 12小時時間格式

! 命令歷史數

# 開機後命令歷史數

ssh優化

cp /etc/ssh/sshd_config{,.bak}
vim /etc/ssh/sshd_config
"""
Port 22
PermitEmptyPasswords no
PermitRootLogin no
UseDNS no
"""
service sshd restart

超時登出登入

cat /etc/profile
cp -p /etc/profile /etc/profile_bak
vi /etc/profile
"""
TMOUT=600 # 秒
"""

歷史命令保留數

cat /etc/profile | grep HISTSIZE
cp -p /etc/profile /etc/profile_bak
vi /etc/profile
"""
HISTSIZE=10000
"""

最大儲存1000條,且是上次登出前最近的1000條記錄

加大檔案描述

echo '* - nofile 65535 ' >>/etc/security/limits.conf
tail -1 /etc/security/limits.conf 

核心優化

cat >>/etc/sysctl.conf << EOF
"""
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 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

# 以下引數是對iptables防火牆的優化,防火牆不開會提示,可以忽略不理。
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
"""

設定系統口令策略

# 檢視密碼策略設定
cat /etc/login.defs | grep PASS
cp -p /etc/login.defs /etc/login.defs_bak
vim /etc/login.defs
"""
PASS_MAX_DAYS 90 # 新建使用者的密碼最長使用天數
PASS_MIN_DAYS 0 # 新建使用者的密碼最短使用天數
PASS_WARN_AGE 7 # 新建使用者的密碼到期提前提醒天數
PASS_MIN_LEN 8 # 最小密碼長度9
"""

注:如果需要單獨對某個使用者密碼不限制最長時間

passwd –x 99999 使用者名稱;或者passwd –x -1 使用者名稱

ssh連線限制

cat /etc/ssh/sshd_config  # 檢視有無AllowUsers的語句
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
vi /etc/ssh/sshd_config
"""
AllowUsers *@10.138.*.*  # 僅允許10.138.0.0/16網段所有使用者通過ssh訪問
"""
service sshd restart

遮蔽登入banner資訊

at /etc/ssh/sshd_config 檢視檔案中是否存在Banner欄位,或banner欄位為NONE
cat /etc/motd 檢視檔案內容,該處內容將作為banner資訊顯示給登入使用者。
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
cp -p /etc/motd /etc/motd_bak
vi /etc/ssh/sshd_config
"""
banner NONE
"""

vi /etc/motd
"""
刪除全部內容或更新成自己想要新增的內容
"""

禁止Ctrl+Alt+Del重啟系統

cat /etc/inittab | grep ctrlaltdel 檢視輸入行是否被註釋
cp -p /etc/inittab /etc/inittab_bak
vi /etc/inittab
"""
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
"""

禁ping

# 1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # 0允許ping

# 2
cat /etc/sysconfig/iptables
"""
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j DROP
"""

CTCDN系統優化引數

cat /etc/sysctl.conf

#關閉ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 開啟惡意icmp錯誤訊息保護
net.ipv4.icmp_ignore_bogus_error_responses = 1

#關閉路由轉發
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

#開啟反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

#處理無源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

#關閉sysrq功能
kernel.sysrq = 0

#core檔名中新增pid作為副檔名
kernel.core_uses_pid = 1

# 開啟SYN洪水攻擊保護
net.ipv4.tcp_syncookies = 1

#修改訊息佇列長度
kernel.msgmnb = 65536
kernel.msgmax = 65536

#設定最大記憶體共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

#timewait的數量,預設180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

#每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目
net.core.netdev_max_backlog = 262144

#限制僅僅是為了防止簡單的DoS 攻擊
net.ipv4.tcp_max_orphans = 3276800

#未收到客戶端確認資訊的連線請求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0

#核心放棄建立連線之前傳送SYNACK 包的數量
net.ipv4.tcp_synack_retries = 1

#核心放棄建立連線之前傳送SYN 包的數量
net.ipv4.tcp_syn_retries = 1

#啟用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1

#開啟重用。允許將TIME-WAIT sockets 重新用於新的TCP 連線
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1

#當keepalive 起用的時候,TCP 傳送keepalive 訊息的頻度。預設是2 小時
net.ipv4.tcp_keepalive_time = 30

#允許系統開啟的埠範圍
net.ipv4.ip_local_port_range = 1024 65000

#修改防火牆表大小,預設65536
#net.netfilter.nf_conntrack_max=655350
#net.netfilter.nf_conntrack_tcp_timeout_established=1200

# 確保無人能修改路由表
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

End