Kali系統(tǒng) 、 掃描與抓包 、 SSH基本防護(hù)、服務(wù)安全

案例

鏈接

案例1:掃描與抓包分析

1.1 問(wèn)題

本案例要求熟悉Linux主機(jī)環(huán)境下的常用安全工具,完成以下任務(wù)操作:

  1. 使用nmap掃描來(lái)獲取指定主機(jī)/網(wǎng)段的相關(guān)信息
  2. 使用nmap執(zhí)行腳本掃描
  3. 使用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所示。

image

圖-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ù)操作:

  1. 優(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)求方法及含義

image

未修改服務(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ù):

  1. 修改用戶(hù)zhangsan的賬號(hào)屬性,設(shè)置為2019-12-31日失效(禁止登錄)
  2. 臨時(shí)鎖定用戶(hù)lisi的賬戶(hù),使其無(wú)法登錄,驗(yàn)證效果后解除鎖定
  3. 修改tty終端提示,使得登錄前看到的第一行文本為“Windows Server 2012 Enterprise R2”,第二行文本為“NT 6.2 Hybrid”
  4. 鎖定文件/etc/resolv.conf、/etc/hosts,以防止其內(nèi)容被無(wú)意中修改
  5. 關(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所示。

image

圖-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所示:

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容