在CentOS系統上進行Node.js應用的安全配置,可以遵循以下步驟:
確保系統和所有軟件包都是最新的,使用以下命令進行更新:
sudo yum update -y
編輯 /etc/login.defs 文件,設置密碼策略,如密碼長度、復雜度等。使用 chage 命令修改用戶密碼設置,如密碼最長使用天數、過期提醒等。
# 編輯 /etc/login.defs 文件
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 ocredit=-1
# 使用 chage 命令修改用戶密碼設置
chage -E -M 90 -R -1 username
編輯 /etc/ssh/sshd_config 文件,將 PermitRootLogin 設置為 no,禁止root用戶通過SSH遠程登錄。創建普通權限賬號并配置密碼,防止無法遠程登錄。
# 編輯 /etc/ssh/sshd_config 文件
PermitRootLogin no
# 創建普通權限賬號
useradd -m myuser
passwd myuser
編輯 /etc/ssh/sshd_config 文件,設置SSH登錄限制,如允許的用戶、允許的密碼錯誤次數等。配置SSH使用的協議版本,如設置為 Protocol 2。修改SSH的端口,如改為 Port 2222,并配置防火墻允許該端口的訪問。
# 編輯 /etc/ssh/sshd_config 文件
AllowUsers myuser
PasswordAuthentication no
PubkeyAuthentication yes
# 配置防火墻
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
禁用不需要的服務以減少潛在的攻擊面,使用 systemctl 命令來禁用服務。
# 禁用不必要的服務
systemctl disable <service_name>
啟用并配置防火墻以限制網絡流量和服務訪問,使用 firewall-cmd 命令進行配置。
# 啟用并配置防火墻
firewall-cmd --permanent --zone=public --add-port=3000/tcp
firewall-cmd --reload
使用 bcrypt 或 scrypt 等安全密碼哈希算法,實施多重身份驗證(MFA)和單點登錄(SSO)。限制失敗的登錄嘗試以減輕暴力攻擊。
# 使用 npm 安裝并配置 MFA 庫
npm install jsonwebtoken
使用 npm Audit 和 npm outdated 等工具定期檢查和更新依賴項。在 package.json 中指定固定版本以減少意外更改。
# 使用 npm Audit 檢查依賴項
npm audit
# 在 package.json 中指定固定版本
"dependencies": {
"express": "4.17.1"
}
在生產環境中,避免向用戶返回詳細的錯誤消息,以防止泄露敏感信息。
// 在 Node.js 應用中捕獲錯誤并記錄
process.on('uncaughtException', (err) => {
console.error('There was an uncaught error', err);
process.exit(1); // 強制退出進程
});
使用日志庫如 Bunyan 記錄關鍵操作和異常,以便審計和排查問題。
# 使用 Bunyan 記錄日志
const bunyan = require('bunyan');
const log = bunyan.createLogger({
name: 'myapp',
level: 'info',
streams: [{
level: 'info',
stream: process.stdout
}]
});
創建一個具有運行應用程序所需最低權限的新用戶,以限制安全漏洞時的潛在損害。
# 創建新用戶
useradd -m myappuser
chown -R myappuser:myappuser /path/to/myapp
對于Node.js應用,還應實施輸入驗證、使用內容安全策略(CSP)、避免使用 eval() 和 require() 執行不受信任的代碼等安全措施。
// 使用 CSP 頭
app.use((req, res, next) => {
res.setHeader('Content-Security-Policy', "default-src 'self'; script-src 'self';");
next();
});
通過上述步驟,可以顯著提高CentOS系統上Node.js應用的安全性,減少受到網絡攻擊的風險。請注意,這些安全措施需要定期審查和更新,以應對不斷變化的安全威脅。