- ?? 博客主頁(yè) 單片機(jī)菜鳥哥,一個(gè)野生非專業(yè)硬件IOT愛好者 ??
- ?? 本篇?jiǎng)?chuàng)建記錄 2022-11-06 ??
- ?? 本篇更新記錄 2022-11-06 ??
- ?? 歡迎關(guān)注 ??點(diǎn)贊 ??收藏 ??留言 ??
- ?? 此博客均由博主單獨(dú)編寫,不存在任何商業(yè)團(tuán)隊(duì)運(yùn)營(yíng),如發(fā)現(xiàn)錯(cuò)誤,請(qǐng)留言轟炸哦!及時(shí)修正!感謝支持!
- ?? Arduino ESP8266教程累計(jì)幫助過超過1W+同學(xué)入門學(xué)習(xí)硬件網(wǎng)絡(luò)編程,入選過選修課程,刊登過無(wú)線電雜志??
1. 前言
在前面學(xué)習(xí) 【樹莓派不吃灰】使用frp內(nèi)網(wǎng)穿透,實(shí)現(xiàn)遠(yuǎn)程訪問樹莓派 的時(shí)候,我們涉及到一個(gè)SSH安全訪問問題。
把內(nèi)網(wǎng)的服務(wù)暴露給外網(wǎng),意味著如果不加限制,那么在外網(wǎng)的任意一個(gè)角落都能訪問到我們的內(nèi)網(wǎng)服務(wù),這就會(huì)涉及到安全問題。
- 一些不法分子通過SSH登錄你的內(nèi)網(wǎng)服務(wù)器植入病毒,暴力破解,消費(fèi)你的服務(wù)器資源
- …
所以這篇我們講一些SSH常規(guī)安全策略。
2. SSH安全策略
對(duì)于外網(wǎng)的訪問,我們按照TCPIP協(xié)議分層從下往上來(lái)分析:
- 信任特定IP地址訪問
- 給SSH加上特定復(fù)雜賬號(hào)密碼
建議安全策略流程:
-
優(yōu)先使用sshKey的方式
—— 對(duì)應(yīng) 2.3方式 其次如果發(fā)現(xiàn)還是有人嘗試破解,再限制IP以及防火墻
2.1 設(shè)置 /etc/hosts.allow 和 /etc/hosts.deny
在Linux系統(tǒng)/etc目錄下,有兩個(gè)配置文件:hosts.allow & hosts.deny。
- hosts.allow(白名單)
允許
某些ip地址/地址段訪問某些資源或服務(wù) - hosts.deny(黑名單)
禁止
某些ip地址/地址段訪問某些資源或服務(wù)
這兩個(gè)文件配置選項(xiàng)一樣,主要是功能剛好相反。
記?。?/p>
當(dāng)兩個(gè)文件有同樣的配置(比如針對(duì)同一個(gè)IP)時(shí),hosts.allow的優(yōu)先級(jí)更高,也就是說(shuō)以hosts.allow配置為準(zhǔn)
。allow設(shè)定可越過deny限制。
2.1.1 配置格式
兩個(gè)文件配置格式一樣,如下:
服務(wù):地址:允許/禁止
其中,各個(gè)參數(shù)如下:
- 服務(wù)
服務(wù)可以是sshd
、vsftpd
、smbd
、telnetd
、httpd
,也可以是all
(所有服務(wù))??疵志椭缹?duì)應(yīng)哪些服務(wù)。 - 地址
地址可以是某個(gè)具體的ip地址
,也可以是地址段
,比如192.168.1.1,192.168.1.0/24,192.168.1.,192.168.3.* 等等 - 允許/禁止
第三項(xiàng)是allow
或者deny
,其中,:deny
和:allow
可以省略不寫。
2.1.2 配置案例
- 允許192.168.1.1主機(jī)sshd遠(yuǎn)程登陸
編輯
hosts.allow
文件,
- 寫入
sshd:192.168.1.1:allow
- 或者
sshd:192.168.1.1
- 允許192.168.1.0/24網(wǎng)段的所有主機(jī)遠(yuǎn)程訪問所有資源
編輯
hosts.allow
文件,
- 寫入
all:192.168.1.0/24:allow
- 或者
all:192.168.1
.
- 禁止192.168.1.0/24主機(jī)telnet遠(yuǎn)程登陸
編輯
hosts.deny
文件,
- 寫入
telnetd:192.168.1.*:deny
- 或者
telnetd:192.168.1.0/24
- 限制所有的ssh,除非從192.168.1.0——127上來(lái)
編輯
hosts.allow
文件,
- 寫入
sshd:192.168.1.0/255.255.255.128:allow
編輯
hosts.deny
文件,
- 寫入
sshd:all:deny
- 限制所有人的TCP連接,除非從192.168.1.0——127上來(lái)
編輯
hosts.allow
文件,
- 寫入
all:192.168.1.0/255.255.255.128:allow
編輯
hosts.deny
文件,
- 寫入
all:all:deny
- 限制192.168.1.0——127對(duì)所有服務(wù)的訪問
編輯
hosts.deny
文件,
- 寫入
all:192.168.1.0/255.255.255.128:deny
知識(shí)點(diǎn):
IP地址范圍的寫法有若干種,主要的三種是:
- 網(wǎng)絡(luò)地址——子網(wǎng)掩碼方式:192.168.1.0/255.255.255.0
- 網(wǎng)絡(luò)地址方式:218.64.(即以218.64打頭的IP地址)
- 縮略子網(wǎng)掩碼方式,既數(shù)一數(shù)二進(jìn)制子網(wǎng)掩碼前面有多少個(gè)“1”比如:218.64.87.0/255.255.255.0《====》218.64.87.0/24
2.1.3 注意要點(diǎn)
-
一般情況下,hosts.allow和hosts.deny
結(jié)合
起來(lái)一起使用,才能保證更好的安全性。即在hosts.deny文件中寫入“all:all:deny
”,禁止一切ip地址遠(yuǎn)程訪問所有資源,然后在hosts.allow文件中添加特定的ip地址允許遠(yuǎn)程訪問資源即可。 -
設(shè)置拒絕所有之前,務(wù)必先配置好allow中的規(guī)則
。 -
ip地址可以是
私網(wǎng)地址
,也可以是主機(jī)所在的公網(wǎng)地址
。 -
當(dāng)hosts.allow和hosts.deny有ip地址沖突時(shí),以hosts.allow的設(shè)置為準(zhǔn)。
2.1.4 配置SSH某一個(gè)IP地址訪問樹莓派
假如我們經(jīng)常在公司家里兩邊跑,并且公司有一個(gè)固定IP地址段。那么我們就可以設(shè)置。
- /etc/hosts.deny 是黑名單列表,先在其中加上下面一行,阻止所有的 ssh 登錄
sshd:all
- /etc/hosts.allow 是白名單,在其中加上允許訪問的 IP 列表
sshd:111.222.333.444
結(jié)果就是只允許 IP 111.222.333.444 的主機(jī)登錄(如果IP地址經(jīng)常變,這個(gè)是有點(diǎn)麻煩!建議可以設(shè)置固定IP
)。但是記住,這里ssh是應(yīng)用層協(xié)議
,外面訪問的流量還是會(huì)流入樹莓派。
流量 -> 物理網(wǎng)卡 -> 網(wǎng)絡(luò)層 -> 傳輸層 -> 應(yīng)用層
所以如何只是配置了sshd,只是說(shuō)明被ssh應(yīng)用層攔截而已。要想狠一點(diǎn),sshd可以換成all。
那有沒有辦法在更底層攔截呢?
2.2 ufw 防火墻設(shè)置黑白名單
從
網(wǎng)絡(luò)層
和傳輸層
阻止了進(jìn)來(lái)的流量
UFW,或稱 Uncomplicated Firewall
,是 iptables
的一個(gè)接口,為不熟悉防火墻概念的初學(xué)者提供了易于使用的界面,同時(shí)支持 IPv4 和 IPv6,廣受歡迎。
UFW本質(zhì)上就是配置黑名單
、白名單規(guī)則
。
2.2.1 安裝ufw
輸入命令:
sudo apt-get install ufw -y
2.2.2 常用命令(先了解莫?jiǎng)邮郑?/h5>
直接輸入 ufw --help 查看命令:
ufw --help
包括了配置命令以及app命令。
2.2.2.1 列出所有應(yīng)用程序配置策略
sudo ufw app list
2.2.2.2 查找有關(guān)配置文件和包含規(guī)則的更多信息
sudo ufw app info 應(yīng)用名字
2.2.2.3 允許SSH連接
備注:在服務(wù)器上正式啟用 UFW 防火墻之前,需要事先添加允許 SSH 連接的傳入規(guī)則;否則,即使UFW開啟SSH連接命令,也無(wú)效
。
- sudo ufw allow ssh
- sudo ufw allow http
2.2.2.4 允許指定端口連接
以下命令主要是針對(duì)tcp連接:
- sudo ufw allow 3306/tcp
- sudo ufw allow 80/tcp
- sudo ufw allow 8080/tcp
- sudo ufw allow 22/tcp
2.2.2.5 允許指定端口范圍內(nèi)連接
除允許單個(gè)端口連接之外,UFW 還允許直接配置端口范圍。在使用 UFW 的端口范圍時(shí),必需指定 tcp 或 udp 協(xié)議。
- sudo ufw allow 7100:7200/tcp
- sudo ufw allow 7100:7200/udp
2.2.2.6 允許指定特定IP地址入站
- sudo ufw allow from XX.YY.ZZ.MM
XX.YY.ZZ.MM 表示對(duì)應(yīng)的ip地址。
2.2.2.7 拒絕指定特定IP地址入站
- sudo ufw deny from XX.YY.ZZ.MM
XX.YY.ZZ.MM 表示對(duì)應(yīng)的ip地址。
2.2.2.8 啟用UFW配置
sudo ufw enable
2.2.2.9 查看所有策略
sudo ufw status numbered
上面就是我們剛剛配置的全部規(guī)則。
- 最左邊一列是
編號(hào)
,如果要?jiǎng)h掉某一條規(guī)則可以用到它 - 通過英文意思,
ALLOW IN
(允許流量進(jìn)入)From
(從哪里來(lái))To
(到哪里去,也就是我們本機(jī)樹莓派)
2.2.2.10 刪除UFW策略
方式1:指定刪除編號(hào)為XX的防火墻策略
sudo ufw delete XX
方式2:直接刪除配置的規(guī)則,只需在原始規(guī)則前加上 delete 即可
sudo ufw delete allow http
sudo ufw delete allow 7100:7200/tcp
sudo ufw delete allow 80/tcp
2.2.2.11 禁用UFW配置
sudo ufw disable
2.2.2.12 重置UFW配置
sudo ufw rest
重置 UFW配置項(xiàng)時(shí),系統(tǒng)會(huì)禁用 UFW 并刪除所有活動(dòng)規(guī)則。
2.2.2.13 設(shè)置默認(rèn)策略
出去的流量全部放行,進(jìn)來(lái)的流量全部阻止。
sudo ufw default allow outgoing
sudo ufw default deny incoming
2.2.2.14 設(shè)置完規(guī)則后,重啟或執(zhí)行命令
sudo ufw reload
即可完成 UFW 配置。
2.3 配置只使用密鑰登錄SSH
我們一般使用 PuTTY 等 SSH 客戶端來(lái)遠(yuǎn)程管理 Linux 服務(wù)器。但是,一般的密碼方式登錄,容易有密碼被暴力破解的問題。所以,一般我們會(huì)將 SSH 的端口設(shè)置為默認(rèn)的 22 以外的端口
,或者禁用 root 賬戶登錄
。其實(shí),有一個(gè)更好的辦法來(lái)保證安全,而且讓你可以放心地用 root 賬戶從遠(yuǎn)程登錄——那就是通過密鑰方式登錄
。所以我們這里就嘗試制作公鑰登錄。
了解內(nèi)容:如果是經(jīng)常玩github、gitee、gitlab這些的同學(xué),就一定知道ssh-key的重要性,當(dāng)我們把我們本地生成的ssh公鑰上傳到服務(wù)器后臺(tái)的時(shí)候,后面所有的提交內(nèi)容都不需要輸入賬號(hào)密碼了。
- Git設(shè)置SSH
還記得
- 【樹莓派不吃灰】SSH 連接報(bào)錯(cuò)“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”的解決
講到一個(gè)ssh連接失敗問題,它本質(zhì)上也是依賴于本地SSH緩存去校驗(yàn)一些認(rèn)證信息。
這里我們會(huì)用到一個(gè)好用的ssh工具——FinalShell
(FinalShell - 一個(gè)免費(fèi)且好用的ssh工具) 。
Windows版下載地址:
- http://www.hostbuf.com/downloads/finalshell_install.exe
macOS版下載地址:
- http://www.hostbuf.com/downloads/finalshell_install.pkg
操作步驟:
- 建立兩個(gè)ssh連接配置(pi & root用戶)
- 測(cè)試連接效果
- 直接查看資源使用率
2.3.1 登錄樹莓派制作密鑰
創(chuàng)建公鑰我們要使用到 ssh-keygen
#命令格式
ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/filename
其中參數(shù)說(shuō)明:
-m 參數(shù)指定密鑰的格式,PEM(也就是RSA格式)是以前使用的舊格式,很多ssh客戶端都用這個(gè)格式。
-t:指定要建立的密鑰類型
-b:指定密鑰長(zhǎng)度
-f:指定用來(lái)保存密鑰的文件名 (~/.ssh/filename,這里我定義為Rpi3B.pem)
配置過程(最好輸入一個(gè)密碼,比如123456):
密鑰對(duì)成功創(chuàng)建,文件所在位置:/home/pi/.ssh/
。其中 :
Rpi3B.pem 私鑰
Rpi3B.pem.pub 公鑰
2.3.2 安裝公鑰到樹莓派
完成公鑰的安裝后,為確保連接成功,文件權(quán)限
也要確保配置正確。
pi@raspberrypi:~ $ cd .ssh/
pi@raspberrypi:~/.ssh $ cat Rpi3B.pem.pub >> authorized_keys
pi@raspberrypi:~/.ssh $ ls -al
pi@raspberrypi:~/.ssh $ chmod 600 authorized_keys
pi@raspberrypi:~/.ssh $ chmod 700 ~/.ssh
2.3.3 下載私鑰到本地電腦
這個(gè)文件非常重要,好好保存。
2.3.4 finalShell 配置密鑰登陸
登錄成功。
2.3.5 修改SSH配置,只允許密鑰登錄
sudo nano /etc/ssh/sshd_config
找到幾個(gè)關(guān)鍵的配置點(diǎn):
- 允許使用密鑰登錄
- 禁止密碼登錄
- 最終配置
注意:
我們可以結(jié)合ufw配置,密碼登錄只有內(nèi)網(wǎng)生效即可。
如果設(shè)備暴露在公網(wǎng)上,當(dāng)你完成全部設(shè)置,并以密鑰方式登錄成功后,同時(shí)禁用密碼登錄功能,就可以加強(qiáng)其安全性防止ssh暴力破解。
2.3.6 重啟sshd服務(wù)
配置改完之后重啟ssh服務(wù):
sudo service sshd restart文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-784271.html
2.3.7 再次測(cè)試三種登錄方式
- 密碼登錄
- 本地密鑰登錄
- 遠(yuǎn)程密鑰登錄
3. 總結(jié)
本篇圍繞著如何在外網(wǎng)上面更安全訪問我們的樹莓派服務(wù),并且接受了多種方式進(jìn)行限制,但是博主還是比較建議方式3。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-784271.html
參考文獻(xiàn)
- Linux之防火墻管理篇[Ubuntu:ufw]
- 樹莓派ssh連接使用公鑰免密登錄
到了這里,關(guān)于【樹莓派不吃灰】基礎(chǔ)篇? SSH遠(yuǎn)程訪問安全,涉及/etc/hosts.allow白名單 和 /etc/hosts.deny黑名單、ufw防火墻、密鑰登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!