1. 更新系統
更新系統和軟件,可以修補部分已知的bug和漏洞
# CentOS
sudo yum makecache
sudo yum update -y
# 如果機器對內核有特俗要求不需要升級
yum update --exclude=kernel* -y
# Ubuntu
sudo apt update
sudo apt upgrade -y
2. 賬戶相關
• 注釋不使用的用戶和組
# 需要注釋的用戶
adm、lp、sync、shutdown、halt、operator、games、ftp
# 編輯文件/etc/passwd
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# sync:x:5:0:sync:/sbin:/bin/sync
# shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# halt:x:7:0:halt:/sbin:/sbin/halt
# 需要注釋的用戶組
adm、lp、games
# 編輯文件/etc/group
# adm:x:4:
# lp:x:7:
# games:x:20:
• 應用賬戶禁止登陸
# 編輯文件/etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
etcd:x:996:992:etcd user:/var/lib/etcd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
# 創建用戶時指定/sbin/nologin
useradd user -s /sbin/nologin -M
## -M 不創建用戶home
• 設置賬戶密碼策略
# 編輯文件/etc/login.defs
# 設置密碼過期天數
PASS_MAX_DAYS 60
# 設置可用密碼的最短天數(多長時間不能修改密碼)
PASS_MIN_DAYS 0
# 設置密碼到期前警告的天數
PASS_WARN_AGE 7
# 設置密碼最小長度
PASS_MIN_LEN 9
# 上面的步驟僅僅對新創建的用戶生效,現有用戶需要命令配置
## PASS_MAX_DAYS
chage -M days user
## PASS_MIN_DAYS
chage -m days user
## PASS_WARN_AGE
chage -W days user
# 強制用戶下次登陸修改密碼
chage -d 0 user
• 限制su使用
3. 禁用服務
NetworkManager是桌面管理網卡的服務,服務器端不需啟動,postfix是郵件服務,通常不需要啟動。
# 關閉桌面網卡管理服務
systemctl disable NetworkManager
# 關閉郵件服務
systemctl disable postfix
4. SSH配置
# /etc/ssh/sshd_config
# 禁止root用戶ssh登錄
PermitRootLogin no
# 綁定監聽的網絡
ListenAddress 192.168.1.10
# 修改ssh默認端口
Port 22333
# 不顯示登錄歡迎信息
PrintMotd no
# 配置遠程連接超時
ClientAliveInterval 600
ClientAliveCountMax 3
# 最大嘗試登錄次數
MaxAuthTries 3
# 最大聯機數
MaxStartups 3
# 禁止空密碼登錄
PermitEmptyPasswords no
# 僅允許使用SSH2
Protocol 2
# 禁止密碼登錄,僅僅允許私鑰
# PasswordAuthentication no
# 配置允許ssh的用戶(一般只開放一個sudo用戶)
AllowUsers user
附:sudo用戶創建
# 創建用戶
useradd $user
echo $passwd | passwd --stdin $user
# 用戶添加sudo
echo "$user ALL=(ALL) ALL" >>/etc/sudoers
5. history優化
histroy表示用戶執行命令的歷史記錄,默認保留2000條
# 僅保留50條命令歷史
# 編輯文件/etc/profile
HISTSIZE=50
# 退出終端后自動清理歷史記錄
# 編輯文件~/.bash_logout
# ~/.bash_logout
history -c
clear
6. 防火牆配置
Linux防火牆在安全方面起到了至關重要的作用,我們盡量去了解下對應的功能和用法。目前Centos7使用的防火牆工具是firewalld,Ubuntu18.04使用的防火牆工具是ufw,為什么說是防火牆工具而不是防火牆呢?
firewalld和ufw自身並不具備防火牆的功能,而是需要通過內核的netfilter來實現,也就是說他們的作用都是用於維護規則,而真正使用規則干活的是內核的netfilter,只不過firewalld和ufw的結構以及使用方法不一樣罷了。
下面簡單介紹下二者主要功能和用法:
(下面使用sudo用戶操作)
# CentOS7
# 允許firewalld服務(默認開放了ssh端口22)
sudo systemctl enalbe firewalld
sudo systemctl start firewalld
# 查看所有打開的端口(默認的域為public)
sudo firewall-cmd --zone=public --list-ports
# 開放端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
# 限制端口
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 允許特定ip/ip段訪問特定端口
sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept"
# 刪除規則
sudo firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept"
# 重載配置,動態添加規則,服務不中斷
sudo firewall-cmd --reload
# 重載配置,停止服務,重新加載配置
sudo firewall-cmd --complete-reload
# Ubuntu
# 允許ufw服務
sudo ufw enable
# 關閉所有外部連結並開啟22端口
sudo ufw default deny && sudo ufw allow 22
# 開放端口
sudo ufw allow 80
# 限制端口
sudo ufw delete allow 80
# 允許特定來源ip
sudo ufw allow from 192.168.1.1
# 允許特點來源ip段
sudo ufw allow from 192.168.1.1/24
# 允許特定來源ip/ip段以tcp協議訪問特點端口(這個可以隨機變通調整)
sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22
7. tcp_wrappers
TCP_Wrappers是一個工作在第四層(傳輸層)的的安全工具,對有狀態連接的特定服務進行安全檢測並實現訪問控制,凡是包含有libwrap.so庫文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制誰可以訪問,常見的程序有rpcbind、vsftpd、sshd,telnet。
TCP_Wrappers有一個TCP的守護進程叫作tcpd。以ssh為例,每當有ssh的連接請求時,tcpd即會截獲請求,先讀取系統管理員所設置的訪問控制文件,符合要求,則會把這次連接原封不動的轉給真正的ssh進程,由ssh完成后續工作;如果這次連接發起的ip不符合訪問控制文件中的設置,則會中斷連接請求,拒絕提供ssh服務。
# 設定規則格式
service: hosts
# ALL 所有服務或者所有ip
# ALL EXCEPT 從所有服務或所有ip中除去制定的
# 允許 /etc/hosts.allow
# 允許特定ip使用ssh
sshd: 192.168.1.10
# 除特定ip外都允許ssh
sshd: ALL EXCEPT 192.168.1.20
# 禁止 /etc/hosts.deny
# 禁止特定ip使用ssh
sshd: 192.168.1.20
# 禁止ip段訪問所有服務
ALL: 192.168.20.0/24
8. 鎖定關鍵文件
# 鎖定關鍵目錄為防止rootkit
# 鎖定系統關鍵目錄不可修改
chattr -R +i /bin /sbin /lib /boot
# 鎖定用戶關鍵目錄為只能添加
chattr -R +a /usr/bin /usr/include /usr/lib /usr/sbin
# 系統關鍵配置文件鎖定不可修改
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/hosts
chattr +i /etc/resolv.conf
chattr +i /etc/fstab
chattr +i /etc/sudoers
chattr -R +i /etc/sudoers.d
# 系統日志系統鎖定為只能添加
chattr +a /var/log/messages
chattr +a /var/log/wtmp
9. 終端自動注銷
# 修改文件/etc/profile
# 終端600s無操作自動注銷
export TMOUT=600
# 使配置生效
source /etc/profile