Linux基礎(chǔ) 個(gè)人VPS安全

前言

Linux基礎(chǔ) 裝飾你的Shell中,我們簡(jiǎn)單地復(fù)習(xí)了一下Vim的用法,還接觸了一些比較酷的Linux軟件,比如ohmyzshhtop。

雖然這些功能看似很強(qiáng)大,但你還不是真正的強(qiáng)大。因?yàn)樵谀撤N程度上,你的VPS還暴露在一個(gè)危險(xiǎn)的互聯(lián)網(wǎng)環(huán)境中,而你對(duì)此可能還沒(méi)有太多的認(rèn)識(shí)。所以,本回我將討論個(gè)人VPS安全的相關(guān)問(wèn)題。與個(gè)人對(duì)應(yīng)的自然是企業(yè)級(jí)的安全了,不過(guò)那在我的能力范疇之外了。

大家可能偶有耳聞網(wǎng)絡(luò)安全相關(guān)的新聞。比如,facebook的帳號(hào)信息被泄露啦,twitter上的名流被人冒名頂替啦。還有以前我讀書(shū)那會(huì)的爆炸性新聞——美國(guó)“棱鏡計(jì)劃”和斯諾登。這些好像離我們十分遙遠(yuǎn)。說(shuō)近的,平時(shí)互聯(lián)網(wǎng)中很多自動(dòng)化的攻擊,對(duì)付它們往往也需要耗費(fèi)大量的精力。

在日常生活中,會(huì)定期改改密碼的人估計(jì)都是鳳毛麟角。平時(shí)大家很少過(guò)分地考慮網(wǎng)絡(luò)安全,好像一直也沒(méi)啥事。這是為什么呢?對(duì)于這個(gè)問(wèn)題,我也沒(méi)有明確答案。不過(guò),我有幾個(gè)推測(cè),大家可以參詳一下:

  • **私人信息基本上已經(jīng)是被竊取了。**這點(diǎn)我就不想多說(shuō)了。我還記得以前有騷擾電話可以準(zhǔn)確地說(shuō)出我的電話、名字、身份證號(hào)和住址。我也不知道這些信息是怎么被泄露出去的,可能在發(fā)生在很久以前,具體原因也不可考了。
  • 你的密碼還是相對(duì)安全的。
    • 我們平時(shí)使用的服務(wù),比如銀行、淘寶、微信之類(lèi)的,賬戶和密碼的安全由服務(wù)商保證。它們基于httpsssl協(xié)議,在數(shù)學(xué)原理和現(xiàn)代密碼學(xué)原理的buff加持下使得直接破解是十分困難。我們平時(shí)說(shuō)的密碼泄露,多半是自己在不安全的地方(比如http開(kāi)頭的網(wǎng)站)輸入了自己的帳號(hào)信息,又或者你使用了弱密碼被別人暴力破解了。所以“定期更換復(fù)雜的密碼”是一種比較合理的建議(當(dāng)然,我認(rèn)為bitwarden才是最佳實(shí)踐)。
    • 隨著移動(dòng)智能設(shè)備的流行,二次驗(yàn)證也變得十分常見(jiàn)。比如你輸入正確的帳戶信息后,可能還要手機(jī)再確認(rèn)一下,這樣的帳戶基本上很難被竊取。如果攻擊者同時(shí)獲得了你的手機(jī)和你的帳戶信息,這基本上就意味著你可能遭遇了綁架之類(lèi)的人身攻擊了,這時(shí)候人身安全是優(yōu)先考慮的問(wèn)題了。

所以呀,在日常生活中,其實(shí)是服務(wù)提供商幫你考慮了安全問(wèn)題??墒牵?strong>如果你玩VPS的話,你就變成VPS的安全負(fù)責(zé)人了。這時(shí),你就需要了解一些基本的網(wǎng)絡(luò)安全的知識(shí)了。試想你通過(guò)http協(xié)議傳輸密碼,那么你的信息將以明文的方式在互聯(lián)網(wǎng)中傳播。這根本沒(méi)有任何安全性可言。

關(guān)于個(gè)人VPS的安全,如果以后有更多觀點(diǎn)再補(bǔ)充。網(wǎng)絡(luò)安全是一個(gè)相對(duì)的概念,**你要做到的不是絕對(duì)安全,而是比大多數(shù)人安全。**這樣攻擊者就不會(huì)去啃你這個(gè)硬骨頭,而去找一些軟柿子(那些沒(méi)有安全防護(hù)的VPS)捏了(這么說(shuō)好像有點(diǎn)腹黑,哈哈)。不過(guò)也不用太擔(dān)心安全問(wèn)題。畢竟你的VPS才開(kāi)通沒(méi)久,也沒(méi)有布署多少網(wǎng)絡(luò)服務(wù),攻擊者暫時(shí)還沒(méi)發(fā)現(xiàn)你。況且,正規(guī)的云服務(wù)商本身也有一些安全措施,攻擊者要突破他們的防線也絕非易事。

總之,在進(jìn)一步學(xué)習(xí)Linux之前,我建議大家對(duì)自己的VPS做一些安全防護(hù)。這里會(huì)介紹一些通用的、簡(jiǎn)單的但卻十分有效的安全措施。

測(cè)試環(huán)境

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

安全措施

你應(yīng)該可以正常地順著下面的代碼一步步無(wú)障礙運(yùn)行。

更新軟件

舊版本的軟件可能會(huì)含有某些漏洞,從而成為攻擊者發(fā)起攻擊的基礎(chǔ)。這個(gè)怎么說(shuō)呢,其實(shí)作為個(gè)人用戶沒(méi)有太多可以做的。**請(qǐng)保持軟件的最新?tīng)顟B(tài)吧!**我使用OpenMediaVault這個(gè)NAS系統(tǒng)時(shí),安全相關(guān)的更新會(huì)強(qiáng)制自動(dòng)安裝的。

下面這個(gè)命令你也學(xué)過(guò)了:

sudo apt-get update && sudo apt-get upgrade

使用非root用戶

創(chuàng)建非root用戶

從今天開(kāi)始,希望你不要再直接使用root用戶了!我們先馬上來(lái)創(chuàng)建一個(gè)新的非root用戶吧!

首先,創(chuàng)建一個(gè)新用戶組:

# 創(chuàng)建新用戶組 sudo groupadd -g 344 test

344叫做gid,我是隨便取的。你只要取一個(gè)不為0的整數(shù)應(yīng)該都可以,因?yàn)?是root用戶組專(zhuān)用的gid。另外,1000、100也是很常見(jiàn)的內(nèi)置用戶組。如果你打算用這些用戶組,那你可以不需要運(yùn)行此命令。

這時(shí),有童鞋可能會(huì)問(wèn):**為什么用戶(組)會(huì)有idname這兩個(gè)屬性呢?**這個(gè)問(wèn)題以后再討論。

接著,我們?yōu)?code>test用戶組創(chuàng)建一個(gè)用戶,名字叫做test_user

# 創(chuàng)建一個(gè)新用戶 sudo useradd \ -m -d /home/test_user `#自動(dòng)創(chuàng)建用戶目錄`\ -s /bin/bash `#設(shè)置默認(rèn)shell`\ -g test `#主組`\ -G sudo `#副組`\ test_user

這個(gè)命令有點(diǎn)長(zhǎng),而且結(jié)構(gòu)有點(diǎn)奇怪,哈哈 ??

這其實(shí)是一種shell命令的可視化寫(xiě)法,通過(guò)\號(hào)將一行中的多個(gè)元素分至不同的行。在shell中,這會(huì)被認(rèn)為是一條命令。

這樣拆分寫(xiě)的好處是,可以比較清晰地看到代碼的功能結(jié)構(gòu)。你以后運(yùn)行或記錄很長(zhǎng)的shell命令時(shí),也可以使用這個(gè)技巧。在markdown的代碼框中,可以用TAB鏈來(lái)迅速生成前方空格,或者用Shift+TAB消除前方空格。以后有機(jī)會(huì),你可以自己試試看。它和下面的寫(xiě)法是等價(jià)的:

sudo useradd -m -d /home/test_user -s /bin/bash -g test -G sudo test_user

下面我們將這個(gè)用戶(組)刪除。

# 刪除用戶 sudo userdel test_user # 刪除用戶組 sudo groupdel test

注意,要將所有的用戶刪除后才可以刪除用戶組。

然后,根據(jù)類(lèi)似的方法創(chuàng)建自己專(zhuān)屬的用戶和用戶組吧!我這里就用test_user:test來(lái)展示了。

下面,我給這個(gè)用戶設(shè)置一個(gè)密碼:

# 設(shè)置密碼 sudo passwd test_user # 假設(shè)我輸入了testtest

要輸入兩次密碼并完全一樣才會(huì)生效:

New password:
Retype new password:
passwd: password updated successfully

這個(gè)密碼,在我們調(diào)用sudo的權(quán)限會(huì)用到。

那么,要怎么切換到test_user用戶呢?可以這樣:

su test_user # su <用戶名>

如果你目前的用戶級(jí)別不比test_user高,它會(huì)要求你輸入密碼。這個(gè)密碼就是testtest。

如果你是root,直接就切換過(guò)去了。應(yīng)該可以理解這種層次的關(guān)系以及它的合理性吧?

在切換的一瞬間,你會(huì)發(fā)現(xiàn)漂亮的ohmyzsh不見(jiàn)了。這是因?yàn)槲覀冇昧四J(rèn)的/bin/bash的緣故?,F(xiàn)在先不要管外觀這些花里胡哨的東西先??

這里,我們可以觀察一下主機(jī)都有哪些用戶:

sudo less /etc/passwd

自己看一下就好了,最下面應(yīng)該是新的用戶。按q可以終止less命令的使用。

觀察home目錄

我們進(jìn)入一下新用戶的home目錄:

cd ~

看看目錄的內(nèi)容:

ls -hl

輸出total 0,表示什么都沒(méi)有。

這時(shí),觀察一下home目錄的絕對(duì)路徑:

pwd

輸出/home/test_user。

好吧,在Linux里創(chuàng)建新用戶就是這么簡(jiǎn)單?對(duì)呀,我也不知道為什么這么簡(jiǎn)單呀??

這里就是新家了,以后基本上就是在這里部署應(yīng)用啦!

探索sudo

這個(gè)時(shí)候,我們?cè)囈幌屡croot的交互。比如:

cd /root

輸出bash: cd: /root: Permission denied。因?yàn)槲覀兪瞧胀ㄓ脩袈铮瑳](méi)有辦法進(jìn)入root的目錄。在大多數(shù)情況下,你甚至沒(méi)有辦法進(jìn)入另外一個(gè)普通用戶的home目錄,除非你的權(quán)限比它高級(jí)。所以如果你想保護(hù)一些東西,可以用root權(quán)限保護(hù)它。

我們?cè)僭囋嚹懿荒苁褂?code>sudo:

sudo apt-get update

輸入密碼后就可以正常地運(yùn)行了。因?yàn)閯?chuàng)建用戶的時(shí)候,sudotest_user的副組。是不是很帥吶??

這時(shí),我們?cè)佥斎脒@個(gè)命令,觀察一下我們的用戶:

id

輸出如下:

uid=1002(test_user) gid=344(test) groups=344(test),27(sudo)

uid是用戶的id,gid是用戶組的id。這里看到test_user屬于testsudo兩個(gè)用戶組。如果test_user不屬于sudo用戶組,它將不可以使用sudo!

至于uidgid的具體用途,以后玩Docker的時(shí)候你會(huì)有所體會(huì)的。這里按下不表。

最后,我個(gè)人認(rèn)為你可以看一下/etc/sudoers文件:

ls -hl /etc/sudoers

輸出是:

-r--r----- 1 root root 825 Apr 17 14:01 /etc/sudoers

看!在默認(rèn)狀態(tài)下,這個(gè)文件就算是root用戶也只可以查看而不可以改動(dòng)。說(shuō)明它真的很重要喔!

實(shí)際上,它控制了用戶對(duì)于root權(quán)限調(diào)用的程度。我們可以嘗試來(lái)改動(dòng)一下它。

首先,讓它變成root可修改的文件

sudo chmod +600 /etc/sudoers # 600是啥我以后再介紹

然后用Vim編輯它:

sudo vim /etc/sudoers

它的內(nèi)容應(yīng)該會(huì)類(lèi)似于:

# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # timestamp_timeout=30即有效期改成30分鐘。 Defaults env_reset, timestamp_timeout=30 Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # User privilege specification root ALL=(ALL:ALL) ALL ...

如剛剛運(yùn)行sudo apt-get update時(shí),你要輸入密碼。默認(rèn)這個(gè)授權(quán)時(shí)間是5分鐘。

你可以改得稍微長(zhǎng)一些,比如30min。我們將Defaults env_reset來(lái)改為Defaults env_reset, timestamp_timeout=30即可。Vim退出:wq后生效。如果你不想改,就不要做任何事。直接:q!退出。

之后,我們將它的權(quán)限改回來(lái):

sudo chmod -w /etc/sudoers && ls -hl /etc/sudoers

輸出為:

-r--r----- 1 root root 847 Apr 19 13:38 /etc/sudoers

這里值得注意的一行是:root ALL=(ALL:ALL) ALL。這意味著root用戶在做事情時(shí)都不用輸入密碼(沒(méi)理解錯(cuò)吧?)。不要讓普通用戶輕易地?fù)碛羞@種能力!

另外,你還可以即時(shí)強(qiáng)行結(jié)束sudo對(duì)你的授權(quán):

sudo -K

此后你再調(diào)用sudo權(quán)限,就要再次輸入用戶密碼獲得授權(quán)。

其實(shí)sudo還有很多更高級(jí)的用法,不過(guò)我們作為新手了解這些就足夠了。

目前階段咱們還是穩(wěn)一波,乖乖地用普通的非root用戶和密碼來(lái)做事??

禁用root使用ssh登陸

我們用非root用戶的重要原因,就是因?yàn)?*我們要禁用root通過(guò)ssh登陸我們的VPS。**像騰訊云,在初始化系統(tǒng)的時(shí)候就是禁root的。這是為什么呢?

我用自己來(lái)舉例。比如,我可以通過(guò)ssh user@ip的方式嘗試我的另一臺(tái)VPS:

一般情況下,主機(jī)是允許root用戶遠(yuǎn)程登陸的。而root用戶的名字一般就是root。所以,如果攻擊者知道你VPS的ip地址(ping你的域名獲得)、用戶名(默認(rèn)有一個(gè)root可用)和ssh端口號(hào)(默認(rèn)22),那么保護(hù)你電腦的就只有你的用戶密碼了。如果你的root密碼被破解了(比如你用了一些123456的弱密碼),那你的VPS就任人魚(yú)肉了!如果你只是非root用戶密碼被破解,那么root用戶可以暫時(shí)保護(hù)一下你。不過(guò)這種時(shí)候基本上已經(jīng)非常危險(xiǎn)了。

所以呀,我們用非root用戶是有原因的,這樣我們可以在用戶名這個(gè)層面上增強(qiáng)VPS的安全防護(hù)。

當(dāng)然,**如果你能進(jìn)一步操作ssh端口號(hào)和ip,那么你的VPS的安全等級(jí)將呈指數(shù)級(jí)上升!**我下面還會(huì)介紹如何進(jìn)行設(shè)置ssh端口和ip的!

我不知道root用戶能不能改名,但我覺(jué)得沒(méi)必要。你用一個(gè)新的非root用戶,然后禁root遠(yuǎn)程登陸就行了。

這里我們開(kāi)始講講**怎么禁用root用戶遠(yuǎn)程ssh登陸。**首先,我們編輯ssh程序的設(shè)置文件:

sudo vim /etc/ssh/sshd_config

在界面中應(yīng)該在類(lèi)似的內(nèi)容:

#Port 22
#AddressFamily any
AddressFamily inet
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no  (就是這里??!)
# PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

找到PermitRootLogin參數(shù),它的值yes改成no。要注意去掉前面的#號(hào)。:wq退出保存。

重啟ssh服務(wù)后生效:

sudo service sshd restart

這里要切記,不要關(guān)閉舊的Shell。新開(kāi)一個(gè)Shell,用你剛剛的非root用戶登陸Shell。成功后再關(guān)閉舊的Shell窗口。切記切記!

隱藏公網(wǎng)ip

從前面的討論,我們知道VPS的安全也可以在公網(wǎng)ip的層面進(jìn)行操作。

我們可以通過(guò)這個(gè)命令獲取自己的公網(wǎng)ip:

curl ifconfig.me

它通常長(zhǎng)成這樣:000.00.00.00,3個(gè)點(diǎn)分成4段數(shù)字。如果你用VPS,這個(gè)公網(wǎng)ip是固定的。如果你用的是家用寬帶,這個(gè)ip是動(dòng)態(tài)變化的,一般是48小時(shí)左右變化一次(視裝網(wǎng)地區(qū)而定)。某些公司的網(wǎng)絡(luò)是專(zhuān)線網(wǎng),公網(wǎng)ip也是固定的。

隱藏ip之前,你應(yīng)該要準(zhǔn)備一個(gè)域名并托管在cloudflare上(其它域名托管商沒(méi)有用過(guò),不知道有沒(méi)有類(lèi)似的功能。這里我只展示cloudflare怎么用)。

首先,我們要準(zhǔn)備一個(gè)前綴,比如abcd。登陸cloudflare的后臺(tái):https://dash.cloudflare.com/login

先在右上角先選擇簡(jiǎn)體中文。

點(diǎn)泛域名進(jìn)去,選擇DNS。為了安全起見(jiàn),我隱藏了自己的真實(shí)ip和地址名稱。

添加一條記錄,比如:

記得先關(guān)掉小黃云,先僅限D(zhuǎn)NS模式。最后保存。

回到shell中,你用以下命令ping下你的VPS:

ping abcd.<你的泛域名> # 我這個(gè)記錄就是abcd.hwb0307.com

如果可以返回準(zhǔn)確的ip,再回到clouldflare后臺(tái),將小黃云點(diǎn)開(kāi):

保存后生效。你也可以再試一下:

ping abcd.<你的泛域名> # 我這個(gè)記錄就是abcd.hwb0307.com

這時(shí)ip已經(jīng)發(fā)生變化了。你也可以用一些站長(zhǎng)工具ping一下:https://ping.chinaz.com/。

我這里用博客地址來(lái)舉例:

這時(shí)真實(shí)的IP已經(jīng)被隱藏起來(lái)。別人用abcd.<你的泛域名>無(wú)法正常地訪問(wèn)你的主機(jī),因?yàn)槟阏龂L試通過(guò)ssh訪問(wèn)cloudflare的某臺(tái)服務(wù)器。是不是很神奇?當(dāng)然,你也只能用真實(shí)ip去訪問(wèn)自己的VPS,而不是某個(gè)域名。

這是為什么呢?因?yàn)槟氵x擇Proxy模式后,每當(dāng)外部有一個(gè)請(qǐng)求要訪問(wèn)abcd.<你的泛域名>時(shí),cloudflare會(huì)首先接收這個(gè)請(qǐng)求,然后通過(guò)一些安全的協(xié)議(可能是https之類(lèi))與你真實(shí)的公網(wǎng)ip進(jìn)行通信,這時(shí)它的作用有點(diǎn)像Nginx反向代理服務(wù)器,但應(yīng)該使用了一些高級(jí)的技術(shù)。而ssh是沒(méi)有辦法通過(guò)這種方式訪問(wèn)的,因?yàn)槎丝谔?hào)和協(xié)議不對(duì),那個(gè)主機(jī)不一定會(huì)開(kāi)放22端口或者你所改的1234端口。原理圖如下:

DNS only: 外部-->你的域名-->VPS公網(wǎng)ip
Proxy: 外部-->你的域名-->Cloudflare反代服務(wù)器(這個(gè)服務(wù)器可能用了CDN之類(lèi)的技術(shù),ip也是不固定的)-->VPS公網(wǎng)ip

另外,如果你的VPS上有NPM之類(lèi)的反向代理服務(wù)正在反代你的個(gè)人網(wǎng)站(比如博客),此時(shí)訪問(wèn)它們可能會(huì)出現(xiàn)ERR_TOO_MANY_REDIRECTS的報(bào)錯(cuò)。官方是這樣解釋的:

Cloudflare SSL/TLS 應(yīng)用中的靈活 SSL 選項(xiàng)通過(guò) HTTPS 加密瀏覽器和 Cloudflare 網(wǎng)絡(luò)之間的流量。但是,當(dāng)啟用靈活SSL選項(xiàng)時(shí),Cloudflare 會(huì)通過(guò) HTTP 將請(qǐng)求發(fā)送到未加密的源 Web 服務(wù)器。如果您的源 Web 服務(wù)器配置為在使用靈活 SSL 選項(xiàng)時(shí)將所有 HTTP 請(qǐng)求重定向到 HTTPS,則會(huì)發(fā)生重定向循環(huán)。

解決**重定向循環(huán)的方法就是:SSL/TLS的靈活模式改為完全模式**:

這時(shí)候,我們會(huì)使用NPM(或者Nginx)自己的證書(shū)(通常是來(lái)自Let’s Encrypt的免費(fèi)個(gè)人證書(shū))來(lái)保證https請(qǐng)求的安全性。這個(gè)你可以在我另一篇博文Docker系列 兩大神器Nginx proxy manager (NPM)和ddns-go的安裝中更加詳細(xì)地了解。

基于前面的原理,我們還可以推測(cè),要安全地遠(yuǎn)程訪問(wèn)一臺(tái)具有動(dòng)態(tài)ip的主機(jī)(比如家用NAS)則不能使用Proxy的方式。你應(yīng)該只能設(shè)置DNS only的模式,讓域名直接解析你的域名;你也沒(méi)有辦法一直通過(guò)ip訪問(wèn)ip,因?yàn)槟愕膇p在動(dòng)態(tài)變化中。所以在這種情況下,你應(yīng)該小心地保護(hù)這個(gè)域名,不要被別人知道。

不過(guò),Proxy模式可能會(huì)造成某些地方無(wú)法訪問(wèn)你的網(wǎng)絡(luò)。如果這個(gè)操作對(duì)你的需求造成造成了明顯影響,你還是選擇DNS-only模式吧?;蛘哌x擇國(guó)內(nèi)的域名托管商(搭建互聯(lián)網(wǎng)服務(wù)要記得備案喔?。?/p>

這部分內(nèi)容是我的推測(cè),未經(jīng)求證。也許我的理解有誤,歡迎專(zhuān)業(yè)人士留言指正了!

安裝UFW防火墻

官方的幫助文檔:https://help.ubuntu.com/community/UFW

前面,我們通過(guò)更改ssh端口的方式增強(qiáng)安全性。其實(shí)呢,你還可以通過(guò)管理VPS所有的端口來(lái)進(jìn)一步增加安全性喔!這里我們介紹ufw

首先,給大家可以看一段wiki上的介紹:

大致來(lái)說(shuō),ufw是一個(gè)簡(jiǎn)單好用的防火墻工具,使用iptables進(jìn)行設(shè)置。這里我不準(zhǔn)備展開(kāi)介紹iptables。自己想了解百度Google即可。

這里多說(shuō)一句,iptables其實(shí)是一個(gè)很強(qiáng)大的防火墻工具,不過(guò)它確實(shí)很難用。如果你學(xué)會(huì)熟練地使用iptables的話,我覺(jué)得ufw應(yīng)該也可以不用。像我們這種新手用ufw就足夠了。

首先,觀察一下自己的機(jī)器有沒(méi)有ufw

which ufw # /usr/sbin/ufw

沒(méi)有的話,直接安裝一個(gè):

sudo apt-get install ufw

如果有的話,就可以開(kāi)始了!

sudo ufw status查看防火墻狀態(tài)。如果你之前沒(méi)有設(shè)置過(guò)ufw,一般是顯示Status: inactive

下面我們逐步來(lái)設(shè)置ufw。

  • 設(shè)置ufw的默認(rèn)值
sudo ufw default deny incoming # 禁止所有進(jìn)站的流量 sudo ufw default allow outgoing # 允許所有出站的流量
  • 允許https/http連接
sudo ufw allow 80 # 默認(rèn)http sudo ufw allow 443 # 默認(rèn)https
  • 允許新ssh端口(下文會(huì)用到)
sudo ufw allow 1234/tcp comment 'SSH_2' # 1234記得換成你自定義的端口喔

如果你遵循我的docker教程,80端口和443端口一般是由Nginx proxy manager進(jìn)行管理。一般情況下,都是Nginx軟件管理80和443端口(比如寶塔面板)。

你也可以根據(jù)自己的需要開(kāi)放端口:

sudo ufw allow <你的端口號(hào)>/tcp comment '你想要的備注'

如果你用docker,通常要添加某個(gè)應(yīng)用的端口號(hào),這樣才可以正常地通過(guò)NPM反代。

值得一提的是,iptable可以提供更加精細(xì)的調(diào)控,但ufw我還不知道怎么精細(xì)地控制端口不同類(lèi)型的流量。

  • 啟動(dòng)ufw:
sudo ufw enable # 啟動(dòng)ufw。重啟主機(jī)后正式生效。

其它常用的命令有:

# 查看幫助 ufw -h # 如果你改動(dòng)了ufw規(guī)則,記得reload一下生效 sudo ufw reload # 顯示規(guī)則的數(shù)字 sudo ufw status numbered # 刪除某個(gè)規(guī)則?;趕udo ufw status numbered命令。 sudo ufw delete <數(shù)字>

更改默認(rèn)的ssh端口

默認(rèn)的ssh端口號(hào)是22。SSH 的端口一般建議把它改成一個(gè)大于1024小于65535的整數(shù)。比如,我想改成1234。

在你的VPS后臺(tái)防火墻里先打開(kāi)1234端口。有些VPS后臺(tái)可能沒(méi)有防火墻,就可以不用管。

下面,簡(jiǎn)單地用ufw將新的ssh端口1234打開(kāi):

sudo ufw allow 1234/tcp comment 'SSH' # 1234記得換上你自己的端口啦

然后像修改root訪問(wèn)ssh的權(quán)限一樣打開(kāi)ssh的設(shè)置文件:

sudo vim /etc/ssh/sshd_config

在開(kāi)頭不遠(yuǎn)處就一個(gè)#Port 22的字樣。#號(hào)在多數(shù)情況下是注釋號(hào),表明后面的內(nèi)容不生效。

#號(hào)去除,然后22改為1234:

Port 1234

重啟ssh服務(wù)生效

sudo service sshd restart

此時(shí)不要關(guān)閉終端,新開(kāi)一個(gè)窗口進(jìn)行用新端口號(hào)、非root用戶進(jìn)行ssh登陸測(cè)試。如果成功,就可以關(guān)閉舊的Shell了。OK,安全指數(shù)+1,哈哈??

新端口成功后,舊的22端口已經(jīng)沒(méi)有用??梢躁P(guān)掉了。

禁ping

終于到最后一步了??

就算你隱藏了公網(wǎng)ip,別人通過(guò)窮舉法還是有可能發(fā)現(xiàn)你的ip。

所以還是設(shè)置自己的主機(jī)禁ping,偽裝成是一臺(tái)不能使用的機(jī)器吧。

很簡(jiǎn)單,只要

sudo vim /etc/ufw/before.rules

外面到本地的訪問(wèn)是由INPUT控制的,其中echo-request就是ping所采用的類(lèi)型。因此,只要找到ok icmp codes for INPUT下面的記錄:

# ok icmp codes for INPUT -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT # -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT -A ufw-before-input -p icmp --icmp-type echo-request -j DROP

如上面的代碼框所示,找到含有echo-request,把ACCEPT改成DROP。這樣外面的機(jī)器就無(wú)法ping通你的VPS了!

可重新加載一下ufw以使改動(dòng)生效(不知道是否是必需):

sudo ufw reload

你可以用windows個(gè)人電腦或者Linux的主機(jī)ping一下你的VPS(~ ̄▽?zhuān)?~

小結(jié)

這一節(jié),我們基本對(duì)個(gè)人的VPS進(jìn)行了基本的防護(hù),包括對(duì)ip、端口、用戶的操作。這樣可以讓VPS更安全,但也不是絕對(duì)的。我也并沒(méi)有太多經(jīng)驗(yàn)。

總之,你可以在此基礎(chǔ)上進(jìn)行深入的Linux學(xué)習(xí)了,比如布署Docker應(yīng)用和Wordpress之類(lèi)的!

如果你以后網(wǎng)站做大做強(qiáng)了,訪問(wèn)量很大的時(shí)候,還是需要請(qǐng)專(zhuān)業(yè)的團(tuán)隊(duì)來(lái)幫忙維護(hù)的!

參考資料

轉(zhuǎn)至個(gè)人博客:https://blognas.hwb0307.com。 歡迎關(guān)注!

本文使用 文章同步助手 同步

?著作權(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)容