Linux安全出版
一.使用密鑰登錄
1.先sudo su -s 切換到root
2.生成秘鑰對(duì)
root@ubuntu:~# ssh-keygen ? 命令
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 直接按 Enter 留空
Enter same passphrase again: <== 回車
Your identification has been saved in /root/.ssh/id_rsa. <== 私鑰
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公鑰
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
?
cd ?/root/.ssh/導(dǎo)出id_rsa ? 一定先導(dǎo)入密鑰再執(zhí)行下面操作
3.服務(wù)器安裝公鑰
cd /root/.ssh/?
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
chmod 700 /root/.ssh/
?
4.設(shè)置ssh,密鑰登錄
vim /etc/ssh/sshd_config ?修改下面配置
PermitRootLogin yes
PasswordAuthentication no
?
重啟sshd
service ssh restart
?
退出shell,使用root加密鑰登錄
?
?
二.數(shù)據(jù)庫(kù)安全
2.1數(shù)據(jù)庫(kù)軟口令
face1.5.0以前的數(shù)據(jù)庫(kù)默認(rèn)密碼為123456,會(huì)輕易被破解。這里介紹修改數(shù)據(jù)庫(kù)登錄密碼的方法
?
cat change_postgres_passwd.sh
#!/bin/bash
read -p "Please input your new password:" c
Passwd=$c
###.json###
sed -i "s/123456/${Passwd}/g" /home/dell/face/thor/latest/thor.json
sed -i "s/123456/${Passwd}/g" /home/dell/face/loki/latest/config/production.json
sed -i "s/123456/${Passwd}/g" /home/dell/face/loki/latest/config/default.json
sed -i "s/123456/${Passwd}/g" /home/dell/face/face-api/latest/config.json
###.txt###
sed -i "s/123456/${Passwd}/g" /home/dell/face/croatia/latest/config/croatia_config.txt
sed -i "s/123456/${Passwd}/g" /home/dell/face/bingo/latest/tmp/bingoconfig_white.txt
sed -i "s/123456/${Passwd}/g" /home/dell/face/bingo/latest/tmp/bingoconfig.txt
###登錄數(shù)據(jù)庫(kù)修改密碼
sudo -u postgres psql? -U postgres -w -c "alter user postgres with password '${Passwd}'"
supervisorctl restart all
?
?
bash chang_postgres_passwd.sh ? //輸入你的密碼
?
?
上面的腳本可以修改face1.4.2的數(shù)據(jù)庫(kù)密碼,密碼應(yīng)有特殊字符,字母大小寫和數(shù)字
?
?
2.2數(shù)據(jù)庫(kù)訪問授權(quán)限制
在pg_hba.conf文件中,每條記錄占一行,指定一條訪問認(rèn)證規(guī)則。
總的來說訪問控制記錄大致有以下7種形式:
local????? database? user? auth-method? [auth-options]
host?????? database? user? address? auth-method? [auth-options]
hostssl??? database? user? address? auth-method? [auth-options]
hostnossl? database? user? address? auth-method? [auth-options]
host?????? database? user? IP-address? IP-mask? auth-method? [auth-options]
hostssl??? database? user? IP-address? IP-mask? auth-method? [auth-options]
hostnossl? database? user? IP-address? IP-mask? auth-method? [auth-options]
?
?
連接方式(type)
連接方式有四種:local 、host、hostssl、hostnossl
local
這條記錄匹配通過 Unix 域套接字進(jìn)行的聯(lián)接企圖, 沒有這種類型的記錄,就不允許 Unix 域套接字的聯(lián)接。
host
這條記錄匹配通過TCP/IP網(wǎng)絡(luò)進(jìn)行的聯(lián)接嘗試.他既匹配通過ssl方式的連接,也匹配通過非ssl方式的連接。
注意:要使用該選項(xiàng)你要在postgresql.conf文件里設(shè)置listen_address選項(xiàng),不在listen_address里的IP地址是無法匹配到的。因?yàn)槟J(rèn)的行為是只在localhost上監(jiān)聽本地連接。
hostssl
這條記錄匹配通過在TCP/IP上進(jìn)行的SSL聯(lián)接企圖。
要使用該選項(xiàng),服務(wù)器編譯時(shí)必須使用--with-openssl選項(xiàng),并且在服務(wù)器啟動(dòng)時(shí)ssl設(shè)置是打開的
hostnossl
這個(gè)和上面的hostssl相反,只匹配通過在TCP/IP上進(jìn)行的非SSL聯(lián)接企圖。
數(shù)據(jù)庫(kù)(database)
聲明記錄所匹配的數(shù)據(jù)庫(kù)。
值 all 表明該記錄匹配所有數(shù)據(jù)庫(kù);
值 sameuser表示如果被請(qǐng)求的數(shù)據(jù)庫(kù)和請(qǐng)求的用戶同名,則匹配;
值samegroup 表示請(qǐng)求的用戶必須是一個(gè)與數(shù)據(jù)庫(kù)同名的組中的成員;
值 replication 表示匹配一條replication連接,它不指定一個(gè)特定的數(shù)據(jù)庫(kù),一般在流復(fù)制中使用;
在其他情況里,這就是一個(gè)特定的 PostgreSQL 數(shù)據(jù)庫(kù)的名字。 我們可以通過用逗號(hào)分隔的方法聲明多個(gè)數(shù)據(jù)庫(kù)。 一個(gè)包含數(shù)據(jù)庫(kù)名的文件可以通過對(duì)該文件前綴 @ 來聲明.該文件必需和 pg_hba.conf 在同一個(gè)目錄。
?
用戶名(user)
為這條記錄聲明所匹配的 PostgreSQL 用戶,值 all 表明它匹配 于所有用戶。否則,它就是特定 PostgreSQL 用戶的名字,多個(gè)用戶名可以通過用逗號(hào)分隔的方法聲明,在名字前面加上+代表匹配該用戶組的所有用戶。一個(gè)包含用戶名的文件可以 通過在文件名前面前綴 @ 來聲明,該文件必需和 pg_hba.conf 在同一個(gè)目錄。
?
主機(jī)地址(address)
指定匹配的客戶端的地址,它可以是一個(gè)主機(jī)名,一個(gè)IP地址范圍,或者下面提到的這些選項(xiàng)。
一個(gè)IP地址范圍是一個(gè)標(biāo)準(zhǔn)的點(diǎn)分十進(jìn)制表示的 IP地址/掩碼值。注意, 在'IP地址','/'和'掩碼值'之間不要有任何的空白字符。
比如對(duì)于IPv4地址來說, 192.168.2.66/32指定單個(gè)主機(jī)的IP,192.168.2.0/24代表一個(gè)小的子網(wǎng)。對(duì)于IPv6地址來說,::1/128指定單個(gè)主機(jī)(這里是本機(jī)環(huán)回地址),fe80::7a31:c1ff:0000:0000/96 指定一個(gè)IPv6的子網(wǎng)。0.0.0.0/0代表所有IPv4地址,::0/0代表所有IPv6地址。
一個(gè)IPv4地址選項(xiàng)只能匹配IPv4地址,一個(gè)IPv6地址選項(xiàng)只能匹配IPv6地址,即使給出的地址選項(xiàng)在IPV4和IPv6中同時(shí)存在。
當(dāng)然你可以使用 all 選項(xiàng)來匹配所有的IP地址,使用 samehost 匹配服務(wù)器自己所有的IP地址,samenet來匹配服務(wù)器直接接入的子網(wǎng)。
如果指定的是主機(jī)名(既不是IP地址也不是上面提到的選項(xiàng)),這個(gè)主機(jī)名將會(huì)和發(fā)起連接請(qǐng)求的客戶端的IP地址的反向名稱解析結(jié)果(即通過客戶端的IP解析其主機(jī)名,比如使用反向DNS查找)進(jìn)行比對(duì),如果存在匹配,再使用正向名稱解析(例如DNS查找)將主機(jī)名解析為IP地址(可能有多個(gè)IP地址),再判斷客戶端的IP地址是否在這些IP地址中。如果正向和反向解析都成功匹配,那么就真正匹配這個(gè)地址(所以在pg_nba.conf文件里的主機(jī)地址必須是客戶端IP的 address-to-name 解析返回的那個(gè)主機(jī)名。一些主機(jī)名數(shù)據(jù)庫(kù)允許將一個(gè)IP地址和多個(gè)主機(jī)名綁定,但是在解析IP地址時(shí),操作系統(tǒng)只會(huì)返回一個(gè)主機(jī)名)。
有些主機(jī)名以點(diǎn)(.)開頭,匹配那些具有相同后綴的主機(jī)名,比如.example.com匹配foo.example.com(當(dāng)然不僅僅只匹配foo.example.com)。
還有,在pg_hba.conf文件中使用主機(jī)名的時(shí)候,你最好能保證主機(jī)名的解析比較快,一個(gè)好的建議就是建立一個(gè)本地的域名解析緩存(比如nscd)。
本選項(xiàng)只能在連接方式是host,hostssl或者h(yuǎn)ostnossl的時(shí)候指定。
ip地址(ip-address)、子網(wǎng)掩碼(ip-mask)
這兩個(gè)字段包含可以看成是標(biāo)準(zhǔn)點(diǎn)分十進(jìn)制表示的 IP地址/掩碼值的一個(gè)替代。例如。使用255.255.255.0 代表一個(gè)24位的子網(wǎng)掩碼。它們倆放在一起,聲明了這條記錄匹配的客戶機(jī)的 IP 地址或者一個(gè)IP地址范圍。本選項(xiàng)只能在連接方式是host,hostssl或者h(yuǎn)ostnossl的時(shí)候指定。
?
認(rèn)證方法(authentication method)
trust
無條件地允許聯(lián)接,這個(gè)方法允許任何可以與PostgreSQL 數(shù)據(jù)庫(kù)聯(lián)接的用戶以他們期望的任意 PostgreSQL 數(shù)據(jù)庫(kù)用戶身份進(jìn)行聯(lián)接,而不需要口令。
reject
聯(lián)接無條件拒絕,常用于從一個(gè)組中"過濾"某些主機(jī)。
md5
要求客戶端提供一個(gè) MD5 加密的口令進(jìn)行認(rèn)證,這個(gè)方法是允許加密口令存儲(chǔ)在pg_shadow里的唯一的一個(gè)方法。
password
和"md5"一樣,但是口令是以明文形式在網(wǎng)絡(luò)上傳遞的,我們不應(yīng)該在不安全的網(wǎng)絡(luò)上使用這個(gè)方式。
gss
使用GSSAPI認(rèn)證用戶,這只適用于 TCP/IP 連接。
sspi
使用SSPI認(rèn)證用戶,這只適用于 Windows 連接。
peer
獲取客戶端的操作系統(tǒng)的用戶名并判斷他是否匹配請(qǐng)求的數(shù)據(jù)庫(kù)名,這只適用于本地連接。
ldap
使用LDAP服務(wù)進(jìn)行驗(yàn)證。
radius
使用RADIUS服務(wù)進(jìn)行驗(yàn)證。
cert
使用SSL服務(wù)進(jìn)行驗(yàn)證。
pam
使用操作系統(tǒng)提供的可插入的認(rèn)證模塊服務(wù) (Pluggable Authentication Modules)(PAM)來認(rèn)證。
?
?
注意:防止數(shù)據(jù)庫(kù)被惡心修改配置文件,需對(duì)pg_hba.conf加i鎖
chattr +i /etc/postgresql/9.6/main/pg_hba.conf ?#禁止任何人修改數(shù)據(jù)庫(kù)認(rèn)證文件
chattr +a ?/data/postgresql ? #禁止任何人修改數(shù)據(jù)目錄權(quán)限
?
2.3數(shù)據(jù)庫(kù)防火墻配置
192.168.2.0/24表示一個(gè)網(wǎng)段
ufw allow from 192.168.2.0/24 to any port 5432
?
?
三、redis安全
1.口令登錄
vim /home/dell/gas/redis/latest/conf/redis.conf
#包含通用配置?
include? conf/redis-common.conf
#綁定IP
bind 0.0.0.0
#監(jiān)聽tcp端口?
port 6379
#最大可用內(nèi)存?
maxmemory 4g
#內(nèi)存耗盡時(shí)采用的淘汰策略:?
# volatile-lru -> remove the key with an expire set using an LRU algorithm?
# allkeys-lru -> remove any key accordingly to the LRU algorithm?
# volatile-random -> remove a random key with an expire set?
# allkeys-random -> remove a random key, any key?
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)?
# noeviction -> don't expire at all, just return an error on write operations?
maxmemory-policy volatile-lru
#aof存儲(chǔ)文件?
#appendfilename "appendonly-6379.aof"?
#rdb文件,只用于動(dòng)態(tài)添加slave過程?
#dbfilename dump-6379.rdb?
#cluster配置文件(啟動(dòng)自動(dòng)生成)?
cluster-config-file nodes-6379.conf
#部署在同一機(jī)器的redis實(shí)例,把<span style="font-size: 1em; line-height: 1.5;">auto-aof-rewrite搓開,防止瞬間fork所有redis進(jìn)程做rewrite,占用大量?jī)?nèi)存</span>?
#auto-aof-rewrite-percentage 80-100
appendonly no
#save 900 1
rename-command FLUSHALL ""??
requirepass asgard@1939? //設(shè)置redis認(rèn)證,目前不支持,需要研發(fā)提供對(duì)應(yīng)的服務(wù)
?
2.2避免端口暴露在網(wǎng)絡(luò)中
vim /home/dell/gas/redis/latest/conf/redis.conf
?
#包含通用配置?
include? conf/redis-common.conf
#綁定IP
bind 127.0.0.1 //注意修改了監(jiān)聽I(yíng)P后,程序中的連接redis IP也需要修改,如arcee,thor,supmylo等
#監(jiān)聽tcp端口?
port 6379
#最大可用內(nèi)存?
maxmemory 4g
#內(nèi)存耗盡時(shí)采用的淘汰策略:?
# volatile-lru -> remove the key with an expire set using an LRU algorithm?
# allkeys-lru -> remove any key accordingly to the LRU algorithm?
# volatile-random -> remove a random key with an expire set?
# allkeys-random -> remove a random key, any key?
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)?
# noeviction -> don't expire at all, just return an error on write operations?
maxmemory-policy volatile-lru
#aof存儲(chǔ)文件?
#appendfilename "appendonly-6379.aof"?
#rdb文件,只用于動(dòng)態(tài)添加slave過程?
#dbfilename dump-6379.rdb?
#cluster配置文件(啟動(dòng)自動(dòng)生成)?
cluster-config-file nodes-6379.conf
#部署在同一機(jī)器的redis實(shí)例,把<span style="font-size: 1em; line-height: 1.5;">auto-aof-rewrite搓開,防止瞬間fork所有redis進(jìn)程做rewrite,占用大量?jī)?nèi)存</span>?
#auto-aof-rewrite-percentage 80-100
appendonly no
#save 900 1
rename-command FLUSHALL ""??
requirepass asgard@1939
?
2.3 重命名關(guān)鍵命令進(jìn)行加固
由于redis沒有做基本的權(quán)限分離,沒有管理賬號(hào)、普通賬戶之分,所以登錄之后無操作權(quán)限限制,因此需要將一些危險(xiǎn)的操作隱藏起來,涉及的命令包括:
FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL
修改redis.conf,添加下列命令,禁用高危命令
rename-command FLUSHALL ""
rename-command CONFIG?? ""
rename-command EVAL???? ""
rename-command shutdown???? ""
rename-command FLUSHDB???? ""
?
?
2.4 低權(quán)限賬戶
設(shè)置單獨(dú)的redis賬戶運(yùn)行redis,redis crackit漏洞就利用root用戶的特性來重置authorized_keys從而達(dá)到控制系統(tǒng)主機(jī)的目的,使用普通帳號(hào)運(yùn)行redis可以降低被利用的風(fēng)險(xiǎn),如下:
創(chuàng)建一個(gè)redis賬戶,然后通過該賬戶啟動(dòng)redis,命令如下:
useradd redis -s /sbin/nolgin ?##創(chuàng)建不可登錄的用戶
vim /etc/supervisor/conf.d/redis.conf
[program:redis]
command=/bin/bash sv_start.sh conf/redis.conf
process_name=%(program_name)s
numprocs=1
directory=/home/dell/face/redis/latest
;umask=022
priority=700
autostart=true
autorestart=true
;startsecs=3
startretries=3
exitcodes=0,2
;stopsignal=TERM
stopwaitsecs=5
stopasgroup=true
killasgroup=true
user=redis?? //使用redis用戶啟動(dòng)任務(wù)
redirect_stderr=true
stdout_logfile=/home/dell/data/logs/%(program_name)s.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=5
?
supervisorctl update?????? //更新配置
?
?
?
redis附錄:
配置文件中指定redis淘汰策略
redis提供的淘汰策略:
?
noeviction:達(dá)到內(nèi)存限額后返回錯(cuò)誤,客戶嘗試可以導(dǎo)致更多內(nèi)存使用的命令(大部分寫命令,但DEL和一些例外)
allkeys-lru:為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐鍵先試圖移除一部分最近使用較少的(LRC)。
volatile-lru:為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐鍵先試圖移除一部分最近使用較少的(LRC),但只限于過期設(shè)置鍵。
allkeys-random: 為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐任意鍵
volatile-random: 為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐任意鍵,但只限于有過期設(shè)置的驅(qū)逐鍵。
volatile-ttl: 為了給新增加的數(shù)據(jù)騰出空間,驅(qū)逐鍵只有秘鑰過期設(shè)置,并且首先嘗試縮短存活時(shí)間的驅(qū)逐鍵
?
?
四、防止ddos攻擊
簡(jiǎn)易的防止ddos腳本
?
ufw enable??? //先開啟ufw
vim ddos.sh
#!/bin/bash
head=`netstat -an? | grep ESTABLISHED? |awk? '{print $5}'|awk -F':' '{print $1}' |uniq? -c |sort -nr |head -1`? ##取建立連接做多的IP
head_ip_num=`echo $head|awk? '{print $1}'`? ##取建立連接做多的IP的數(shù)量
head_ip=`echo $head|awk? '{print $2}'`?????????????? ##取建立連接做多的IP
if [[ $head_ip_num -gt 200]]???? ##判斷IP出現(xiàn)次數(shù)有沒有200
then
????? ??ufw deny from $head_ip to any? ##超過200,禁止此IP訪問
else
??????? echo "$head_ip 出現(xiàn)次數(shù)較多請(qǐng)注意"? ##小于200,提醒
fi
?
bash ddos.sh??? ##執(zhí)行腳本
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/pengjihao/p/11092095.html
總結(jié)
- 上一篇: 请你讲一讲JavaScript有哪些数据
- 下一篇: linux通常使用的 rc 和 .(点)