centos基本安全優化

一.關閉selinux

  1. #修改配置文件可使配置文件生效,但必須要重啟系統,此步驟是sed快速修改方法,也可以通過vim編輯/etc/selinux/config來修改此文件.
  2. sed -i ‘/^SELINUX/s/enforcing/disabled/g’ /etc/selinux/config
  3. 檢查替換結果為disabled就表示成功了.
  4. grep SELINUX=disabled /etc/selinux/config
  5. SELINUX=disabled
  6. #臨時關閉
  7. setenforce
  8. usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
  9. 0 表示Permissive,即給出警告,但不會阻止操作,相當於disabled.
  10. 1 表示Enforcing, 即表示SELinux為開啟狀態.
  11. setenforce 0 #臨時將SELinux調為Permissive狀態.
  12. getenforce #查看SELinux當前狀態.

二.更改為阿裏yum源

  1. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  2. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. yum makecache

三.提權dm用戶可以使用sudo

  1. 備份/etc/sudoers文件
  2. cp  /etc/sudoers /etc/sudoers.2018-08-20.bak
  3. sudo提權配置說明    
  4. 用戶或組        機器=授權角色        可以執行的命令
  5. user MACHINA= COMMANDS
  6. dm ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
  7. useradd dm
  8. echo 123456 | passwd –stdin dm
  9. echo “dm ALL=(ALL) NOPASSWD: ALL” >>/etc/sudoers #結尾的ALL表示dm可擁有完全的系統管理權限,NOPASSSWD表示提權執行命令時不提示密碼;
  10. grep dm /etc/sudoers
  11. visudo -c &>/dev/null

四.優化ssh遠程登錄配置

  1. 備份/etc/ssh/sshd_conf
  2. cp /etc/ssh/sshd_config /etc/ssh/sshd_config.2018-08-20.bak
  3. 不允許基於GSSAPI的用戶認證
  4. sed -i ‘s/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/’ /etc/ssh/sshd_config
  5. 不允許sshd對遠程主機名進行反向解析
  6. sed -i ‘s/#UseDNS yes/UseDNS no/’ /etc/ssh/sshd_config
  7. 禁止root用戶登錄
  8. sed -i ‘s%#PermitRootLogin yes%PermitRootLogin no%’ /etc/ssh/sshd_config
  9. 不允許空密碼登錄
  10. sed -i ‘s%#PermitEmptyPasswords no%PermitEmptyPasswords no%’ /etc/ssh/sshd_config
  11. systemctl restart sshd

五.設置中文字符集

  1. localectl set-locale LANG=zh_CN.UTF-8
  2. localectl status

六.設置時間同步

  1. 檢查是否安裝ntpdate
  2. rpm -qa|grep ntpdate
  3. ntpdate-4.2.6p5-28.el7.centos.x86_64
  4. 如果沒有安裝,則使用yum安裝
  5. yum install -y ntpdate
  6. 添加計劃任務,每5分鐘同步一次時間;
  7. echo ‘#time sync by dm at 2018-8-20’ >>/var/spool/cron/root
  8. echo ‘*/5 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null 2>$1’ >>/var/spool/cron/root
  9. crontab -l

七.歷史記錄數及登錄超時環境變量設置

設置閑置超時時間為300s

echo  'export TMOUT=300'            >>/etc/profile

設置歷史記錄文件的命令數量為100

echo  'export HISTFILESIZE=100'        >>/etc/profile

設置命令行的歷史記錄數量

echo 'export HISTSIZE=100'      >>/etc/profile 

格式化輸出歷史記錄(以年月日分時秒的格式輸出)

echo   'export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"'        >>/etc/profile

source /etc/profile

tail  -4 /etc/profile

八.調整Linux描述符

文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件。文件描述符與包括相關信息(如文件的打開模式,文件的位置類型,文件的初始類型等) 的文件對象相關聯,這些信息被稱作文件的上下文。文件描述符的有效範圍是0 到 OPEN_MAX.


對於內核而言,所有打開的文件都是通過文件的描述符引用的.當打開一個現有文件或創建一個新文件時,內核向進程返回一個文件描述符,當讀或寫一個文件時,使用 open 或 create 返回的文件描述符標識該文件,並將其作為參數傳遞給 read 或 write.


查看系統文件描述符設置的情況可以使用下面的命令,文件描述符大小默認是1024.
ulimit -n
對於高並發的業務 Linux 服務器來說,這個默認的設置值是不夠的,需要調整


調整方法一:
調整系統文件描述符為65535
echo ‘* – nofile 65535’ >>/etc/security/limits.conf
tail -l /etc/security/limits.conf
 
調整方法二:
直接把 ulimit -SHn 65535命令加入/etc/rc.d/rc.local,用以設置每次開機啟動時配置生效,命令如下:
echo ” ulimit -HSn 65535″ >>/etc/rc.d/rc.local
echo ” ulimit -s 65535″ >>/etc/rc.d/rc.local

九.定時清理郵件服務臨時目錄垃圾文件

centos7 默認是安裝了Postfix郵件服務的,因此郵件臨時存放地點的路徑為/var/spool/postfix/maildrop,為了防止目錄被垃圾文件填滿,導致系統額inode數量不夠用,需要定期清理.

定時清理的方法為:將清理命令寫成腳本,然後做成定時任務,每日淩晨0點執行一次.

#創建存放腳本的目錄
[ -d /server/scripts/shell ] && echo “directory already exists.” || mkdir /server/scripts/shell -p

#編寫腳本文件
echo ‘find /var/spool/postfix/maildrop/ -type f|xargs rm -f’ >/server/scripts/shell/del_mail_file.sh

#查看
cat /server/scripts/shell/del_mail_file.sh

#加入計劃任務
echo “00 00 * * * /bin/bash /server/scripts/shell/del_mail_file.sh >/dev/null &1” >>/var/spool/cron/root

crontab -l

十.鎖定關鍵系統文件,防止被提權篡改

  1. 要鎖定關鍵系統文件,必須對賬號密碼我那件及啟動文件加鎖,防止被篡改,加鎖命令如下:
  2. chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
  3. lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
  4. 上鎖後,所有用戶都不能對文件進行修改刪除.如果需要修改,可以執行下面的命令解鎖後,再進行修改.
  5. chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
  6. lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
  7. 如果想要更加安全,可以把chattr改名轉移,防止被黑客利用.
  8. mv /usr/bin/chattr /usr/bin/dm1

客戶在刪除寶塔網站根目錄時,使用rm -rf 命令時會提示無法刪除目錄下的某一個文件,就是因為這個文件被鎖導致的,可以使用chattr -i命令解除文件鎖之後再刪除就可以了。

十一.SSH限製IP登錄

方法一:
只允許指定用戶進行登錄(白名單):
/etc/ssh/sshd_config 配置文件中設置 AllowUsers 選項,(配置完成需要重啟 SSHD 服務)格式如下:
AllowUsers root@192.168.1.11
允許 IP 192.168.1.1 登錄root 通過帳戶登錄系統。
只拒絕指定用戶進行登錄(黑名單):
/etc/ssh/sshd_config 配置文件中設置 DenyUsers 選項,(配置完成需要重啟SSHD服務)格式如下:
DenyUsers root@192.168.1.10 #Linux系統賬戶
拒絕 IP 192.168.1.10 登錄root 通過帳戶登錄系統。

方法二:
允許192.168.200.0段的IP登錄
echo “sshd:192.168.200.0/24:allow” >>/etc/hosts.allow

#禁止所有的其他IP段的IP登錄
echo “sshd:all:deny” >>/etc/hosts.deny
hosts.allow 和hosts.deny 兩個文件同時設置規則的時候,hosts.allow 文件中的規則優先級高,按照此方法設置後服務器只允許 192.168.200.0/24這個段的 IP 地址的 ssh 登錄,其它的 IP 都會拒絕。

方法三:
允許 192.168.100.10 登錄ssh
firewall-cmd –permanent –add-rich-rulerule family=ipv4 source address=192.168.100.10 service name=ssh accept’

拒絕192.168.200.0/24登錄ssh
firewall-cmd –permanent –add-rich-rule ‘rule family=ipv4 source address=192.168.200.0/24 service name=ssh reject’

firewall-cmd –reload

十二.為grub菜單加密

為grub菜單加密的目的是防止他人修改grub進行內核等啟動設置,以及用單用戶模式啟動進行破解root密碼等操作,實際上此步驟可以在安裝系統的過程中設定.


安裝系統後的具體設定步驟如下:

設置密碼:
grub2-setpassword
查看設置的密碼:
cat /boot/grub2/user.cfg

#在/etc/grub.d/01_users文件中可以看到grub用戶名為root,然後通過 grub2-setpassword 來設置grub的密碼,密碼設置成功後會生成 /boot/grub2/user.cfg 文件,可以通過 /boot/grub2/user.cfg 文件查看設置的密碼,查看到的密碼為加密的密碼。

十三.優化開機自啟服務

十四.內核優化

Linux服務器內核參數優化,主要是指在Linux系統中針對業務服務應用而進行的系統內核參數調整,優化並無一定的標準。下面是生產環境下Linux常見的內核優化:

cat >>/etc/sysctl.conf<<EOF
#kernel_flag
#關閉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
EOF
/sbin/sysctl -p

十五.更新系統到最新

  1. 更新補丁並升級系統版本
  2. yum update -y
  3. #只更新安全補丁,不升級系統版本
  4. yum –security check-update #檢查是否有安全補丁
  5. yum update –security #更新安全補丁