案例1:掃描與抓包分析
1.1 問(wèn)題
本案例要求熟悉Linux主機(jī)環(huán)境下的常用安全工具,完成以下任務(wù)操作:
- 使用nmap掃描來(lái)獲取指定主機(jī)/網(wǎng)段的相關(guān)信息
- 使用nmap執(zhí)行腳本掃描
- 使用tcpdump分析FTP訪(fǎng)問(wèn)中的明文交換信息
1.2 方案
Kali是基于Debian的Linux發(fā)行版,Kali Linux包含上百個(gè)安全相關(guān)工具
如:滲透測(cè)試、安全檢測(cè)、密碼安全、反向工程等,官網(wǎng):kali.org。
準(zhǔn)備實(shí)驗(yàn)環(huán)境,在真機(jī)執(zhí)行命令命令初始化虛擬機(jī)。
重要提示:kali虛擬機(jī)用戶(hù)名為kali,密碼為kali。
[root@localhost ~]# kali reset #初始化虛擬機(jī)
[root@localhost ~]# virt-manager #打開(kāi)kvm虛擬機(jī)管理器
修改網(wǎng)卡配置,《網(wǎng)絡(luò)源》選擇《private1:隔離網(wǎng)絡(luò)》如圖-1所示。

圖-1
給kali虛擬機(jī)配置IP地址:
$ ip a s #查看網(wǎng)卡設(shè)備名稱(chēng)(設(shè)備名)
$ nmcli connection show #查看網(wǎng)絡(luò)連接名稱(chēng)(網(wǎng)卡名)
#注意:仔細(xì)區(qū)分網(wǎng)卡名和設(shè)備名稱(chēng),兩個(gè)名稱(chēng)有可能不一致(正常情況),配置IP時(shí)注意?。。?$ sudo nmcli connection modify "Wired connection 1" \
ipv4.method manual \
ipv4.addr 192.168.4.40/24 \
autoconnect yes
#配置IP地址,autoconnect設(shè)置網(wǎng)卡開(kāi)機(jī)自動(dòng)激活
#\代表?yè)Q行符
$ sudo nmcli connection up "Wired connection 1"
1.3 步驟
實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。
步驟一:使用NMAP掃描來(lái)獲取指定主機(jī)/網(wǎng)段的相關(guān)信息
1)基本用法
基本用法:
nmap [掃描類(lèi)型] [選項(xiàng)] <掃描目標(biāo) ...>
常用的掃描類(lèi)型
-sS,TCP SYN掃描(半開(kāi))
-sT,TCP 連接掃描(全開(kāi))
-sU,UDP掃描
-sP,ICMP掃描
-A,目標(biāo)系統(tǒng)全面分析
下面的實(shí)驗(yàn)請(qǐng)根據(jù)自己的實(shí)際情況進(jìn)行測(cè)試,每個(gè)人的IP地址可能不一樣!
2)檢查192.168.4.5主機(jī)是否可以ping通(這里假設(shè)有192.168.4.5主機(jī))
[kali@kali ~]$ sudo nmap -sP 192.168.4.5
Starting Nmap 6.40 ( http://nmap.org ) at 2028-06-06 21:59 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for host3 (192.168.4.5)
Host is up (0.00036s latency).
MAC Address: 52:54:00:71:07:76 (QEMU Virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds
使用-n選項(xiàng)可以不執(zhí)行DNS解析
[kali@kali ~]$ sudo nmap -n -sP 192.168.4.5
Starting Nmap 6.40 ( http://nmap.org ) at 2028-06-06 22:00 CST
Nmap scan report for 192.168.4.5
Host is up (0.00046s latency).
MAC Address: 52:54:00:71:07:76 (QEMU Virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
3)檢查192.168.4.0/24網(wǎng)段內(nèi)哪些主機(jī)可以ping通
[kali@kali ~]$ sudo nmap -n -sP 192.168.4.0/24
Starting Nmap 5.51 ( http://nmap.org ) at 2027-05-17 18:01 CST
Nmap scan report for 192.168.4.5
Host is up.
Nmap scan report for 192.168.4.7
Host is up.
Nmap scan report for 192.168.4.120
Host is up (0.00027s latency).
MAC Address: 00:0C:29:74:BE:21 (VMware)
Nmap scan report for 192.168.4.110
Host is up (0.00016s latency).
MAC Address: 00:50:56:C0:00:01 (VMware)
Nmap scan report for 192.168.4.120
Host is up (0.00046s latency).
MAC Address: 00:0C:29:DB:84:46 (VMware)
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.57 seconds
4)檢查目標(biāo)主機(jī)所開(kāi)啟的TCP服務(wù)
[kali@kali ~]$ sudo nmap -sT 192.168.4.254
Starting Nmap 5.51 ( http://nmap.org ) at 2028-05-17 17:55 CST
Nmap scan report for 192.168.4.254
Host is up (0.00028s latency).
Not shown: 990 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop3
111/tcp open rpcbind
143/tcp open imap
443/tcp open https
993/tcp open imaps
995/tcp open pop3s
MAC Address: 00:0C:29:74:BE:21 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds
5)檢查192.168.4.0/24網(wǎng)段內(nèi)哪些主機(jī)開(kāi)啟了FTP、SSH服務(wù)
[kali@kali ~]$ sudo nmap -p 21-22 192.168.4.0/24
Starting Nmap 5.51 ( http://nmap.org ) at 2027-05-17 18:00 CST
Nmap scan report for 192.168.4.5
Host is up (0.000025s latency).
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
Nmap scan report for 192.168.4.7
Host is up.
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
Nmap scan report for 192.168.4.120
Host is up (0.00052s latency).
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
MAC Address: 00:0C:29:74:BE:21 (VMware)
Nmap scan report for pc110.tarena.com (192.168.4.110)
Host is up (0.00038s latency).
PORT STATE SERVICE
21/tcp closed ftp
22/tcp closed ssh
MAC Address: 00:50:56:C0:00:01 (VMware)
Nmap scan report for 192.168.4.120
Host is up (0.00051s latency).
PORT STATE SERVICE
21/tcp closed ftp
22/tcp closed ssh
MAC Address: 00:0C:29:DB:84:46 (VMware)
Nmap done: 256 IP addresses (5 hosts up) scanned in 4.88 seconds
6)檢查目標(biāo)主機(jī)所開(kāi)啟的UDP服務(wù)
[kali@kali ~]$ sudo nmap -sU 192.168.4.5 #指定-sU掃描UDP
53/udp open domain
111/udp open rpcbind
7)全面分析目標(biāo)主機(jī)192.168.4.100和192.168.4.5的操作系統(tǒng)信息
[kali@kali ~]$ sudo nmap -A 192.168.4.100,5
Starting Nmap 5.51 ( http://nmap.org ) at 2017-05-17 18:03 CST
Nmap scan report for 192.168.4.100 #主機(jī)mail的掃描報(bào)告
Host is up (0.0016s latency).
Not shown: 990 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.2.2
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 0 0 1719 Aug 17 13:33 UserB.pub
| -rw-r--r-- 1 0 0 122 Aug 13 05:27 dl.txt
| drwxr-xr-x 2 14 0 4096 Aug 13 09:07 pub
| -rw-rw-r-- 1 505 505 170 Aug 17 13:18 tools-1.2.3.tar.gz
|_-rw-rw-r-- 1 505 505 287 Aug 17 13:22 tools-1.2.3.tar.gz.sig
22/tcp open ssh OpenSSH 5.3 (protocol 2.0)
| ssh-hostkey: 1024 86:be:d6:89:c1:2d:d9:1f:57:2f:66:d1:af:a8:d3:c6 (DSA)
|_2048 16:0a:15:01:fa:bb:91:1d:cc:ab:68:17:58:f9:49:4f (RSA)
25/tcp open smtp Postfix smtpd
80/tcp open http Apache httpd 2.4.10 ((Red Hat))
|_http-methods: No Allow or Public header in OPTIONS response (status code 302)
| http-title: 302 Found
|_Did not follow redirect to https://192.168.4.100//
110/tcp open pop3 Dovecot pop3d
|_pop3-capabilities: USER CAPA UIDL TOP OK(K) RESP-CODES PIPELINING STLS SASL(PLAIN)
111/tcp open rpcbind
MAC Address: 00:0C:29:74:BE:21 (VMware)
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=5.51%D=8/19%OT=21%CT=1%CU=34804%PV=Y%DS=1%DC=D%G=Y%M=000C29%TM=52
OS:11ED90%P=x86_64-redhat-linux-gnu)SEQ(SP=106%GCD=1%ISR=10B%TI=Z%CI=Z%II=I
OS:%TS=A)OPS(O1=M5B4ST11NW6%O2=M5B4ST11NW6%O3=M5B4NNT11NW6%O4=M5B4ST11NW6%O
OS:5=M5B4ST11NW6%O6=M5B4ST11)WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6
OS:=3890)ECN(R=Y%DF=Y%T=40%W=3908%O=M5B4NNSNW6%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O
OS:%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=
OS:0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%
OS:S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(
OS:R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=
OS:N%T=40%CD=S)
Network Distance: 1 hop
Service Info: Host: mail.tarena.com; OS: Unix
TRACEROUTE
HOP RTT ADDRESS
1 1.55 ms 192.168.4.100
步驟二:使用nmap執(zhí)行腳本掃描
1)準(zhǔn)備一臺(tái)Vsftpd服務(wù)器(192.168.4.5主機(jī)操作)
[root@proxy ~]# yum -y install vsftpd
[root@proxy ~]# systemctl restart vsftpd
[root@proxy ~]# useradd tom
[root@proxy ~]# echo 123 | passwd --stdin tom
2)FTP相關(guān)掃描腳本(在kali主機(jī)操作)
相關(guān)腳本存放目錄:/usr/share/nmap/scripts/。
[kali@kali ~]$ sudo nmap --script=ftp-anon.nse 192.168.4.5 -p 21
#匿名訪(fǎng)問(wèn)掃描
[kali@kali ~]$ sudo nmap --script=ftp-syst.nse 192.168.4.5 -p 21
#掃描ftp軟件相關(guān)信息(如版本號(hào),是否有帶寬限制,超時(shí)時(shí)間等)
[kali@kali ~]$ sudo nmap --script=ftp-vsftpd-backdoor.nse 192.168.4.5 -p 21
#后門(mén)掃描
[kali@kali ~]$ sudo nmap --script=ftp-brute.nse 192.168.4.5 -p 21
#暴力破解密碼
3)SSH相關(guān)掃描(在kali主機(jī)操作)
[kali@kali ~]$ sudo nmap --script=ssh-brute.nse 192.168.4.5 -p 22
#暴力破解ssh密碼
[kali@kali ~]$ sudo vi /tmp/users.lst #新建文件,存儲(chǔ)賬戶(hù)信息
root
tom
[kali@kali ~]$ sudo vi /tmp/pass.lst #新建文件,存儲(chǔ)密碼信息
123456
654321
[kali@kali ~]$ sudo nmap --script=ssh-brute.nse \
--script-args userdb=/tmp/users.lst,passdb=/tmp/pass.lst 192.168.4.5 -p 22
#使用自己創(chuàng)建的賬戶(hù)和密碼本暴力破解ssh密碼
在192.168.4.5主機(jī)可以查看日志
[root@proxy ~]# tail /var/log/secure #查看日志
4)HTTP相關(guān)掃描(kali主機(jī)操作)
這里假設(shè)192.168.4.5有http服務(wù)。
[kali@kali ~]$ sudo nmap --script=http-methods.nse 192.168.4.5 -p 80
#請(qǐng)求方法掃描(如get,post,header等)
[kali@kali ~]$ sudo nmap --script=http-sql-injection.nse 192.168.4.5 -p 80
#SQL注入掃描
備注:SQL注入是指web應(yīng)用程序?qū)τ脩?hù)輸入數(shù)據(jù)的合法性沒(méi)有判斷或過(guò)濾不嚴(yán),攻擊者可以在web應(yīng)用程序中事先定義好的查詢(xún)語(yǔ)句的結(jié)尾上添加額外的SQL語(yǔ)句,在管理員不知情的情況下實(shí)現(xiàn)非法操作,以此來(lái)實(shí)現(xiàn)欺騙數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行非授權(quán)的任意查詢(xún),從而進(jìn)一步得到相應(yīng)的數(shù)據(jù)信息。
SQL注入是將Web頁(yè)面的原URL、表單域或數(shù)據(jù)包輸入的參數(shù),修改拼接成SQL語(yǔ)句,傳遞給Web服務(wù)器,進(jìn)而傳給數(shù)據(jù)庫(kù)服務(wù)器以執(zhí)行數(shù)據(jù)庫(kù)命令。
5)SMB相關(guān)掃描(kali主機(jī)操作)
這里假設(shè)有一臺(tái)windows主機(jī)192.168.137.4。
[kali@kali ~]$ sudo nmap --script=smb-brute.nse 192.168.137.4
[kali@kali ~]$ sudo nmap --script=smb-brute.nse \
--script-args=userdb=/密碼本,passdb=/密碼本 192.168.137.4
6)暴力破解密碼(kali主機(jī)操作)
$ sudo john --single /etc/shadow #破解傻瓜式密碼
$ sudo john /etc/shadow #字典暴力破解(隨時(shí)ctrl+c終止)
$ sudo john --wordlist=密碼本 /etc/shadow #使用自定義密碼本破解
$ sudo john --show /etc/shadow #顯示破解的密碼
步驟三:使用tcpdump分析FTP訪(fǎng)問(wèn)中的明文交換信息
1)啟用tcpdump命令行抓包(kali虛擬機(jī)操作)
執(zhí)行tcpdump命令行,添加適當(dāng)?shù)倪^(guò)濾條件,只抓取訪(fǎng)問(wèn)主機(jī)192.168.4.5的21端口的數(shù)據(jù)通信 ,并轉(zhuǎn)換為ASCII碼格式的易讀文本。
這里假設(shè),192.168.4.5主機(jī)有vsftpd服務(wù),如果沒(méi)有需要提前安裝并啟動(dòng)服務(wù)?。?!
警告:案例中所有抓包命令都沒(méi)有指定網(wǎng)卡,每位同學(xué)需要根據(jù)實(shí)際情況指定抓包網(wǎng)卡的名稱(chēng)。
[kali@kali ~]$ sudo tcpdump -i 網(wǎng)卡名稱(chēng) -A host 192.168.4.5 and tcp port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
.. .. #進(jìn)入等待捕獲數(shù)據(jù)包的狀態(tài)
#監(jiān)控選項(xiàng)如下:
# -i,指定監(jiān)控的網(wǎng)絡(luò)接口(默認(rèn)監(jiān)聽(tīng)第一個(gè)網(wǎng)卡)
# -A,轉(zhuǎn)換為 ACSII 碼,以方便閱讀
# -w,將數(shù)據(jù)包信息保存到指定文件
# -r,從指定文件讀取數(shù)據(jù)包信息
#tcpdump的過(guò)濾條件:
# 類(lèi)型:host(主機(jī))、net(網(wǎng)段)、port(端口)、portrange(端口范圍)
# 方向:src(源地址)、dst(目標(biāo)地址)
# 協(xié)議:tcp、udp、ip、wlan、arp、……
# 多個(gè)條件組合:and、or、not
3)執(zhí)行FTP訪(fǎng)問(wèn),并觀察tcpdump抓包結(jié)果
從kali主機(jī)訪(fǎng)問(wèn)主機(jī)192.168.4.5的vsftpd服務(wù)。
[kali@kali ~]$ ftp 192.168.4.5
Connected to 192.168.4.5 (192.168.4.5).
220 (vsFTPd 3.0.2)
Name (192.168.4.5:root): tom #輸入用戶(hù)名
331 Please specify the password.
Password: #輸入密碼
530 Login incorrect.
Login failed.
ftp>quit #退出
觀察抓包的結(jié)果(在kali主機(jī)觀察tcpdump抓包的結(jié)果):
[kali@kali ~]$
... …
18:47:27.960530 IP 192.168.2.100.novation > 192.168.4.5.ftp: Flags [P.], seq 1:14, ack 21, win 65515, length 13
E..5..@.@......x...d.*..G.\c.1BvP.......USER tom
18:47:29.657364 IP 192.168.2.100.novation > 192.168.4.5.ftp: Flags [P.], seq 14:27, ack 55, win 65481, length 13
E..5..@.@......x...d.*..G.\p.1B.P.......PASS 123
4)再次使用tcpdump抓包,使用-w選項(xiàng)可以將抓取的數(shù)據(jù)包另存為文件,方便后期慢慢分析。
[kali@kali ~]$ sudo tcpdump -i 網(wǎng)卡名稱(chēng) -A -w ftp.cap \
host 192.168.4.5 and tcp port 21 #抓包并保存
tcpdump命令的-r選項(xiàng),可以去讀之前抓取的歷史數(shù)據(jù)文件
[kali@kali ~]$ sudo tcpdump -A -r ftp.cap | egrep '(USER|PASS)' #分析數(shù)據(jù)包
.. ..
E..(..@.@.. ...x...d.*..G.\c.1BbP.............
18:47:25.967592 IP 192.168.2.5.ftp > 192.168.2.100.novation: Flags [P.], seq 1:21, ack 1, win 229, length 20
E..<FJ@.@.jE...d...x...*.1BbG.\cP...V...220 (vsFTPd 2.2.2)
… …
18:47:27.960530 IP 192.168.2.100.novation > 192.168.2.5.ftp: Flags [P.], seq 1:14, ack 21, win 65515, length 13
E..5..@.@......x...d.*..G.\c.1BvP.......USER tom
… …
18:47:27.960783 IP 192.168.2.5.ftp > 192.168.2.100.novation: Flags [P.], seq 21:55, ack 14, win 229, length 34
E..JFL@.@.j5...d...x...*.1BvG.\pP...i~..331 Please specify the password.
… …
18:47:29.657364 IP 192.168.2.5.ftp > 192.168.2.100.novation: Flags [P.], seq 14:27, ack 55, win 65481, length 13
E..5..@.@......x...d.*..G.\p.1B.P.......PASS 123
… …
18:47:29.702671 IP 192.168.2.100.novation > 192.168.2.5.ftp: Flags [P.], seq 55:78, ack 27, win 229, length 23
E..?FN@.@.j>...d...x...*.1B.G.\}P.......230 Login successful.
案例2:加固常見(jiàn)服務(wù)的安全
2.1 問(wèn)題
本案例要求優(yōu)化提升常見(jiàn)網(wǎng)絡(luò)服務(wù)的安全性,主要完成以下任務(wù)操作:
- 優(yōu)化Nginx服務(wù)的安全配置
2.2 方案
Nginx安全優(yōu)化包括:修改版本信息、限制并發(fā)、拒絕非法請(qǐng)求、防止buffer溢出。
2.3 步驟
實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。
步驟一:優(yōu)化Nginx服務(wù)的安全配置
1) 修改版本信息,并隱藏具體的版本號(hào)
默認(rèn)Nginx會(huì)顯示版本信息以及具體的版本號(hào),這些信息給攻擊者帶來(lái)了便利性,便于他們找到具體版本的漏洞。
如果需要屏蔽版本號(hào)信息,執(zhí)行如下操作,可以隱藏版本號(hào)。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
http{
server_tokens off; #在http下面手動(dòng)添加這么一行
… …
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy ~]# curl -I http://192.168.4.5 #查看服務(wù)器響應(yīng)的頭部信息
2) 限制并發(fā)量
DDOS攻擊者會(huì)發(fā)送大量的并發(fā)連接,占用服務(wù)器資源(包括連接數(shù)、帶寬等),這樣會(huì)導(dǎo)致正常用戶(hù)處于等待或無(wú)法訪(fǎng)問(wèn)服務(wù)器的狀態(tài)。
Nginx提供了一個(gè)ngx_http_limit_req_module模塊,可以有效降低DDOS攻擊的風(fēng)險(xiǎn),操作方法如下:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
http{
… …
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
listen 80;
server_name localhost;
limit_req zone=one burst=5;
}
}
#備注說(shuō)明:
#limit_req_zone語(yǔ)法格式如下:
#limit_req_zone key zone=name:size rate=rate;
#上面案例中是將客戶(hù)端IP信息存儲(chǔ)名稱(chēng)為one的共享內(nèi)存,內(nèi)存空間為10M
#1M可以存儲(chǔ)8千個(gè)IP信息,10M可以存儲(chǔ)8萬(wàn)個(gè)主機(jī)連接的狀態(tài),容量可以根據(jù)需要任意調(diào)整
#每秒中僅接受1個(gè)請(qǐng)求,多余的放入漏斗
#漏斗超過(guò)5個(gè)則報(bào)錯(cuò)
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
客戶(hù)端使用ab測(cè)試軟件測(cè)試效果:
[root@client ~]# ab -c 100 -n 100 http://192.168.4.5/
3) 拒絕非法的請(qǐng)求
網(wǎng)站使用的是HTTP協(xié)議,該協(xié)議中定義了很多方法,可以讓用戶(hù)連接服務(wù)器,獲得需要的資源。但實(shí)際應(yīng)用中一般僅需要get和post。
具體HTTP請(qǐng)求方法的含義如表-1所示。
表-1 HTTP請(qǐng)求方法及含義

未修改服務(wù)器配置前,客戶(hù)端使用不同請(qǐng)求方法測(cè)試:
[root@client ~]# curl -i -X GET http://192.168.4.5 #正常
[root@client ~]# curl -i -X HEAD http://192.168.4.5 #正常
#curl命令選項(xiàng)說(shuō)明:
#-i選項(xiàng):訪(fǎng)問(wèn)服務(wù)器頁(yè)面時(shí),顯示HTTP的頭部信息
#-X選項(xiàng):指定請(qǐng)求服務(wù)器的方法
通過(guò)如下設(shè)置可以讓Nginx拒絕非法的請(qǐng)求方法:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http{
server {
listen 80;
#這里,!符號(hào)表示對(duì)正則取反,~符號(hào)是正則匹配符號(hào)
#如果用戶(hù)使用非GET或POST方法訪(fǎng)問(wèn)網(wǎng)站,則retrun返回錯(cuò)誤信息
if ($request_method !~ ^(GET|POST)$ ) {
return 444;
}
}
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
修改服務(wù)器配置后,客戶(hù)端使用不同請(qǐng)求方法測(cè)試:
[root@client ~]# curl -i -X GET http://192.168.4.5 #正常
[root@client ~]# curl -i -X HEAD http://192.168.4.5 #報(bào)錯(cuò)
4) 防止buffer溢出
當(dāng)客戶(hù)端連接服務(wù)器時(shí),服務(wù)器會(huì)啟用各種緩存,用來(lái)存放連接的狀態(tài)信息。
如果攻擊者發(fā)送大量的連接請(qǐng)求,而服務(wù)器不對(duì)緩存做限制的話(huà),內(nèi)存數(shù)據(jù)就有可能溢出(空間不足)。
修改Nginx配置文件,調(diào)整各種buffer參數(shù),可以有效降低溢出風(fēng)險(xiǎn)。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http{
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
… …
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
案例3:Linux基本防護(hù)措施
3.1 問(wèn)題
本案例要求練習(xí)Linux系統(tǒng)的基本防護(hù)措施,完成以下任務(wù):
- 修改用戶(hù)zhangsan的賬號(hào)屬性,設(shè)置為2019-12-31日失效(禁止登錄)
- 臨時(shí)鎖定用戶(hù)lisi的賬戶(hù),使其無(wú)法登錄,驗(yàn)證效果后解除鎖定
- 修改tty終端提示,使得登錄前看到的第一行文本為“Windows Server 2012 Enterprise R2”,第二行文本為“NT 6.2 Hybrid”
- 鎖定文件/etc/resolv.conf、/etc/hosts,以防止其內(nèi)容被無(wú)意中修改
- 關(guān)閉不需要的服務(wù)
3.2 步驟
實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。
步驟一:修改用戶(hù)zhangsan的賬戶(hù)屬性,設(shè)置為2019-12-31日失效(禁止登錄)
1)正常情況下,未過(guò)期的賬號(hào)可以正常登錄,使用chage可以修改賬戶(hù)有效期。
chage命令的語(yǔ)法格式:
chage -l 賬戶(hù)名稱(chēng) #查看賬戶(hù)信息
chage -E 時(shí)間 賬戶(hù)名稱(chēng) #修改賬戶(hù)有效期
2)失效的用戶(hù)將無(wú)法登錄
使用chage命令將用戶(hù)zhangsan的賬戶(hù)設(shè)為當(dāng)前已失效(比如已經(jīng)過(guò)去的某個(gè)時(shí)間):
[root@proxy ~]# useradd zhangsan #創(chuàng)建賬戶(hù)
[root@proxy ~]# passwd zhangsan #設(shè)置密碼
[root@proxy ~]# chage -E 2017-12-31 zhangsan #設(shè)置賬戶(hù)過(guò)期時(shí)間
嘗試以用戶(hù)zhangsan重新登錄,輸入正確的用戶(hù)名、密碼后直接閃退,返回登錄頁(yè),說(shuō)明此帳號(hào)已失效。
3)重設(shè)用戶(hù)zhangsan的屬性,將失效時(shí)間設(shè)為2019-12-31
[root@proxy ~]# chage -E 2019-12-31 zhangsan #修改失效日期
[root@proxy ~]# chage -l zhangsan #查看賬戶(hù)年齡信息
Last password change : May 15, 2017
Password expires : never
Password inactive : never
Account expires : Dec 31, 2019
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
4)重設(shè)用戶(hù)zhangsan的屬性,將失效時(shí)間設(shè)為永不過(guò)期
[root@proxy ~]# chage -E -1 zhangsan #設(shè)置賬戶(hù)永不過(guò)期
5)定義默認(rèn)有效期(擴(kuò)展知識(shí))
/etc/login.defs這個(gè)配置文件,決定了賬戶(hù)密碼的默認(rèn)有效期。
[root@proxy ~]# cat /etc/login.defs
PASS_MAX_DAYS 99999 #密碼最長(zhǎng)有效期
PASS_MIN_DAYS 0 #密碼最短有效期
PASS_MIN_LEN 5 #密碼最短長(zhǎng)度
PASS_WARN_AGE 7 #密碼過(guò)期前幾天提示警告信息
UID_MIN 1000 #UID最小值
UID_MAX 60000 #UID最大值
步驟二:臨時(shí)鎖定用戶(hù)zhangsan的賬戶(hù),使其無(wú)法登錄,驗(yàn)證效果后解除鎖定
1)鎖定用戶(hù)賬號(hào)
使用passwd或usermod命令將用戶(hù)zhangsan的賬戶(hù)鎖定。
[root@proxy ~]# passwd -l zhangsan #鎖定用戶(hù)賬號(hào)(lock)
鎖定用戶(hù) zhangsan 的密碼。
passwd: 操作成功
[root@proxy ~]# passwd -S zhangsan #查看狀態(tài)(status)
zhangsan LK 2018-02-22 0 99999 7 -1 (密碼已被鎖定。)
2)驗(yàn)證用戶(hù)zhangsan已無(wú)法登錄,說(shuō)明鎖定生效
輸入正確的用戶(hù)名、密碼,始終提示“Login incorrect”,無(wú)法登錄。
3)解除對(duì)用戶(hù)zhangsan的鎖定
[root@proxy ~]# passwd -u zhangsan #解鎖用戶(hù)賬號(hào)(unlock)
解鎖用戶(hù) zhangsan 的密碼 。
passwd: 操作成功
[root@proxy ~]# passwd -S zhangsan #查看狀態(tài)
zhangsan PS 2018-08-14 0 99999 7 -1 (密碼已設(shè)置,使用 SHA512 加密。)
步驟三:修改tty登錄的提示信息,隱藏系統(tǒng)版本
1)賬戶(hù)在登錄Linux系統(tǒng)時(shí),默認(rèn)會(huì)顯示登陸信息(包括操作系統(tǒng)內(nèi)核信息)
/etc/issue這個(gè)配置文件里保存的就是這些登陸信息,修改該文件防止內(nèi)核信息泄露。
[root@proxy ~]# cat /etc/issue #確認(rèn)原始文件
Red Hat Enterprise Linux Server release 7.5
Kernel \r on an \m
[root@proxy ~]# cp /etc/issue /etc/issue.origin #備份文件
[root@proxy ~]# vim /etc/issue #修改文件內(nèi)容
Windows Server 2012 Enterprise R2
NT 6.2 Hybrid
2)測(cè)試版本偽裝效果
退出已登錄的tty終端,或者重啟Linux系統(tǒng),刷新后的終端提示信息會(huì)變成自定義的文本內(nèi)容,如圖-1所示。

圖-1
步驟四:鎖定文件/etc/resolv.conf、/etc/hosts
1)語(yǔ)法格式:
chattr +i 文件名 #鎖定文件(無(wú)法修改、刪除、追加等)
chattr -i 文件名 #解鎖文件
chattr +a 文件名 #鎖定后文件僅可追加
chattr -a 文件名 #解鎖文件
lsattr 文件名 #查看文件特殊屬性
2)使用+i鎖定文件,使用lsattr查看屬性
[root@proxy ~]# chattr +i /etc/resolv.conf
[root@proxy ~]# lsattr /etc/resolv.conf
----i---------- /etc/resolv.conf
3)使用+a鎖定文件(僅可追加),使用lsattr查看屬性
[root@proxy ~]# chattr +a /etc/hosts
[root@proxy ~]# lsattr /etc/hosts
-----a---------- /etc/hosts
4)測(cè)試文件鎖定效果
[root@proxy ~]# rm -rf /etc/resolv.conf
rm: 無(wú)法刪除"/etc/resolv.conf": 不允許的操作
[root@proxy ~]# echo xyz > /etc/resolv.conf
-bash: resolv.conf: 權(quán)限不夠
[root@proxy ~]# rm -rf /etc/hosts #失敗
[root@proxy ~]# echo "192.168.4.1 xyz" > /etc/hosts #失敗
[root@proxy ~]# echo "192.168.4.1 xyz" >> /etc/hosts #成功
5)恢復(fù)這兩個(gè)文件原有的屬性(避免對(duì)后續(xù)實(shí)驗(yàn)造成影響)
[root@proxy ~]# chattr -i /etc/resolv.conf
[root@proxy ~]# chattr -i /etc/hosts
[root@proxy ~]# lsattr /etc/resolv.conf /etc/hosts
--------------- /etc/resolv.conf
--------------- /etc/hosts
附加思維導(dǎo)圖,如圖-5所示:
