運維人員如何搭建堡壘機(跳板機)?

現在一定規模互聯網企業,往往都擁有大量伺服器,如何安全並高效的管理這些伺服器是每個系統運維或安全運維人員必要工作。現在比較常見的方案是搭建堡壘機環境作為線上伺服器的入口,所有伺服器只能通過堡壘機進行登陸訪問,合格的堡壘機個人以為要滿足以下功能需求 1 線上機器要實現免密登陸 2 密碼對所有普通用戶不可見 3 不同用戶擁有不同機器登陸許可權 4 不同用戶可登陸機器的操作許可權可控制 5 操作記錄可審計 。假設伺服器全是linux系統,日常管理通過ssh,不知道有沒有比較好的開源方案或者技術思路來實現以上需求?像bat這些大企業中伺服器都是數萬級別的,他們又是怎麼進行管理的?


不要使用什麼堡壘機,那個完全是個偽安全的玩意兒。堡壘機本身就是個SPOF。

不要覺得BAT就一定做的很好,他們只是too big to fail而已

正確的方法是

零絕不允許用密碼登陸,必須用公鑰登陸
一要建立個人帳號的概念,必須做到一人一個帳號,絕不允許多個人共用一個個人帳號
二是公共帳號(用來部署服務)要和個人帳號分開,公共帳號絕不允許直接登陸
三打開SSH Agent Forwarding的功能,這樣無論怎麼跳都是沒問題的。
四配置sudo規則使得個人帳號的用戶能進入他有許可權的公共帳號用戶
五把SELinux規則配置起來,不允許的操作直接幹掉,允許但是有危險的操作全記錄下來
六把SSH登陸日誌,sudo的日誌,SELinux的warning什麼的通通都發給實時事件流處理平台去,該咋分析就咋分析
七有些不需要完全公共帳號許可權的操作,建議以unix domain socket的形式提供給個人帳號用戶使用(因為有black magic可以檢查許可權)。

等這些都建立起來了,再來考慮什麼安全加固。

同時,要趕緊把內部的PaaS搭起來,從源頭上就把需要直接登陸機器的需求給減下來。


堡壘機的落後和反動已經被樓上幾位答主批到狗血淋頭了,我就不多說了。

現在我來給一個方案,這個方案應用了開源跳板機Jumpserver。

——————————————————分割線————————————————

首先,jumpserver是什麼呢?

Jumpserver 是一款由Python編寫開源的跳板機(堡壘機)系統,實現了跳板機應有的功能。基於ssh協議來管理,客戶端無需安裝agent。

特點:

完全開源,GPL授權
Python編寫,容易再次開發
實現了跳板機基本功能,認證、授權、審計
集成了Ansible,批量命令等
支持WebTerminal
Bootstrap編寫,界面美觀
自動收集硬體信息
錄像回放
命令搜索
實時監控
批量上傳下載

jumpserver 3.0 安裝

相對於 jumpserver 2.0 版本,在新的版本 3.0 中取消了LDAP授權,取而代之的是ssh進行推送;界面也有所變化,功能更完善,安裝更簡單,不像 2.0 的版本,難住了好多人。下面通過兩台主機來搭建 jumpserver堡壘機!

環境:
Centos 6.5 x86_64
關閉 iptables,關閉 selinux
jumpserver:192.168.1.200
clients:192.168.1.210
ps:操作只針對 jumpserver,clients 不會進行操作,只是環境需求。

一、安裝依賴包
yum -y install epel-release
yum clean all yum makecache
yum -y update
yum -y install git python-pip MySQL-devel gcc automake autoconf python-devel vim sshpass lrzsz readline-devel

二、下載 jumpserver
cd /opt
Git clone https://github.com/jumpserver/jumpserver.git
註: 如果下載失敗,則去github上面下載zip包,unzip解壓縮即可

三、執行快速安裝腳本
cd /opt/jumpserver/install

pip install -r requirement.txt

查看安裝的包
pip freeze

python install.py
輸入jumpserver的地址,默認為:」192.168.1.200」,回車即可。
是否安裝MySQL:選擇」y」進行安裝

MySQL 啟動後會要求用戶輸入 郵件伺服器及賬戶(後期用來發送用戶名、ssh pass、web pass、ssh key)

163郵箱用授權密碼,而不是登入密碼 ,切記 。

輸入smtp信息之後發現報錯了,是python的pycrypto模塊問題,需要卸載重裝:
pip uninstall pycrypto
easy_install pycrypto

安裝之後繼續 python install.py 進行安裝,並且輸入 web管理員用戶名和管理員密碼,ok

運行 crontab,定期處理失效連接,定期更新資產信息
cd /opt/jumpserver
python manage.py crontab add

註:
1)根據提示輸入相關信息,完成安裝,安裝完成後,請訪問web,繼續查看後續文檔
2)如果啟動失敗,請返回上層目錄,手動運行 ./service.sh start 啟動
3)如果 ./service.sh start 啟動失敗
cd /opt/jumpserver
python manage.py runserver 0.0.0.0:80
python run_websocket.py
4)如果啟動失敗,可能是由於80埠和3000埠已經被佔用,或者資料庫賬號密碼不對,請檢查

五、Web登錄 http://192.168.1.200

注意:
在使用jumpserver過程中,有一步是系統用戶推送,要推送成功,client(後端伺服器)要滿足以下條件:
1)後端伺服器需要有python、sudo環境才能使用推送用戶,批量命令等功能
2)後端伺服器如果開啟了selinux,請安裝libselinux-python

六、更新代碼
cd /opt/jumpserver
git pull

環境搭建到這一步就結束啦~

下面開始要仔細看咯

一、用戶管理

1)添加用戶

點擊用戶管理 —&> 查看用戶 —&> 添加用戶

輸入要添加的用戶名,姓名,許可權,Mail,並且發送郵件 —&> 保存

查看添加的用戶

查看用戶郵件
郵件中包含了用戶名,許可權,web密碼,ssh 密鑰密碼,以及密鑰下載地址。

2)添加用戶組

點擊用戶管理 —&> 查看用戶組 —&> 添加用戶組

添加新的小組 —&> 運維小組

查看剛才添加的組

二、資產管理

1)添加資產組

點擊資產管理 —&> 查看資產組 —&> 添加主機組

輸入組名稱,並且輸入描述組用途

2)添加資產

點擊資產管理 —&> 查看資產 —&> 添加資產

輸入主機名,主機IP,管理用戶名(管理員用戶,主機中必須存在的哦~ 可以是root),埠,資產組 —&> 提交保存

3)添加機房

點擊資產管理 —&> 查看機房 —&> 添加機房

輸入機房名稱,其他的可以選填 —&> 保存

三、許可權管理

1)sudo

點擊許可權管理 —&> sudo —&> 添加別名

輸入別名,系統命令,備註 —&> 點擊保存

2)添加系統用戶

點擊授權管理 —&> 系統用戶 —&> 添加系統用戶

輸入用戶名,密碼,管理的sudo及備註 —&> 單擊保存

創建好系統之後,單擊推送,將用戶名、密碼、sudo的信息推送到伺服器。

選擇系統用戶,資產組 —&> 單擊保存

推送成功

3)授權規則

點擊授權管理 —&> 授權規則 —&> 添加規則

輸入授權名稱,用戶/用戶組,資產/資產組,系統用戶,備註 —&> 單擊保存

四、登錄

這時候創建已經完成,下一步用戶」hongxue」通過web和密鑰登錄堡壘機 192.168.1.200,並實現跳轉到伺服器 192.168.1.210

1)通過web登錄
可以看到用戶ID,用戶名,許可權,key,最後登錄,用戶組,授權主機數,以及主機信息。

單擊查看主機 —&> 連接

連接成功,可以對該主機進行操作。

2)通過ssh登錄

通過郵件中收到的地址,下載key

點擊工具 —&> 用戶密鑰管理者

單擊導入 —&> 輸入用戶名,密碼

連接 jumpserver 堡壘機 192.168.1.200,輸入密鑰密碼進行登錄

登錄成功!! 從授權的列表中連接到伺服器 192.168.1.210

!!為了安全,建議配置nginx 反向代理 jumpserver

log_format jumpserver "$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$request_time" $request_body "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $scheme $http_host";

server {
listen 8080 ssl;
listen 80;
deny all;
server_name jumpserver.xxxx.com;
index index.html index.htm index.PHP;

ssl_certificate ssl/xxxx.com.crt;
ssl_certificate_key ssl/xxxx.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

if ( $scheme = http ) {
rewrite ^(.*)$ https://$host:8090$request_uri? permanent;
}

location / {
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://10.43.12.31:8090;
}

location ^~ /ws/ {
proxy_pass http://10.43.12.31:8090/ws/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

access_log /data0/logs/jumpserver.log jumpserver;
error_log /data0/logs/jumpserver_error.log debug;
}


你想更深入了解學習Linux知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Linux雲計算從入門到精通》系列實戰筆記全放送


跳板機是對落後生產力妥協的產物。一方面,需要安全,從伺服器許可權這個角度來說,越少的人可以登錄乃至於不遠程登錄是最好的,但是另一方面,絕大多數情況下我們也比需要登錄到伺服器上,好一點只是在排查故障時需要登錄,差一點的可能發布、統計、故障等情況下都要登錄伺服器,甚至不只是SA/運維需要登錄,連開發、QA們都需要。

僅從給運維同學開放許可權的角度說一下,結合在新浪、網易以及「道聽途說」阿里的方案:
1. 第一條原則是,從本機到伺服器上每一道防線的安全等級應該是等同的。即不要出現登錄跳板機費死了力氣,到了伺服器上就是root這樣類似的情況。
2. 比需要有操作日誌,目前這個最多是用來時候反查,這個可以是記錄每一條操作,或者記錄登錄到跳板機後所有的輸出。
3. 跳板機自身的安全隔離,比如只能從內網連接。
4. 身份驗證,可以使用個人token+動態密碼+keypair的方式,目前也沒有見到更好的方案。
5. 用戶授權,如果沒有職位細分,運維應該是默認有所有機器登錄許可權的;如果職位細分,SA應該有所有許可權,其他的運維同學應該有對應業務的許可權——這個要結合公司內部的CMDB來做——這樣也可以方便的臨時給一些開發同學分配許可權。
6. 還有一點是關於在「跳板機」上的許可權,新浪是在跳板機上只能輸入要登錄機器的IP(這個跳板機程序要寫好,別留下安全問題)。其他的似乎跳板機都是給了一個完整可用的shell。這個我覺得是需要按照公司/團隊的情況選擇的,比較好的方案是理出一個常用的命令,在跳板機上只給這些命令的許可權。
7. 如果有要更安全一些,做好網路隔離。生產環境和測試環境隔離,甚至不同業務之間跳板機也是隔離的。
8. 跳板機要需要高可用,我見過所有伺服器的sshd埠只給跳板機開放了白名單,然後跳板機掛了的情況。
9. 其實如果業務只限於一個web server這種,完全可以上Pass啦。擔心數據安全的,做一個內部的Pass平台也可以解決大部分運維問題。比如常常碰到的在nginx里新配置一個域名的問題,完全可以不需要運維操心的。
10. Pass也有不能解決的問題,用Iass/物理機是個解決辦法,但是如果可以將Pass和Iass結合起來跑,各取所需,才是真正好的方案。這一塊,比較看好docker和現有的Pass平台結合在一起能裝出什麼樣的火花。


我呆過的公司,一般是建議老闆買商業產品,不要省這點錢。現在的開源堡壘機方案有很多,但是坑也多,為了埋這些坑,運維要付出下面的代價:

1、堡壘機出問題後,同事不能登錄,影響很多團隊幹活,尤其在處理業務故障的時候,突然發現某伺服器進不去,別提多尷尬了,嚴重影響周圍團隊對運維團隊的滿意度

2、開源堡壘機一般要搞個專門的人維護,這個人還得非常熟悉linux,甚至還要熟悉python,這本身就是一個運維成本。

運維本身是個服務性質的工作,盡量不要搞得周圍部門不滿意才好,為公司省這點錢,老闆高興幾分鐘而已,很快就會忘記的。


我之前寫過一篇博客,小團隊可以參考下:巧用青雲vpn服務搭建安全內網
優點就是非常簡單,費用低廉。


1.小企業,openldap
2.中型企業,Citrix-XenApp服務
3.大型企業,Citrix-XenApp服務+專職團隊開發帳號和許可權管理系統(騰訊中相當於一個小公司在做這一塊)


很多答主給了一些高大上的策略,我給個接地氣的吧,適合小規模的對安全性還沒有那麼高要求的簡單易實現的。詳細過程請參考:
http://opjasee.com/2014/03/01/openldap-install.html

Kerberos加openldap加ssh實現單點登錄,sudo做許可權控制,nslcd上加filter只允許指定用戶組的人認證,rsyslog做操作記錄並解析入庫和一定程度上的審計。


騰訊開源的藍鯨平台沒人用嗎


WINSERVER和LINUX以及設備冗餘的一起解決~~~~~


1.多重登錄驗證,如ssh key,google authenticator,kerberos,自研發pam模塊,多重組合的方式驗證登錄,2.業務機的許可權問題,不同角色不同的許可權限制,3.日誌審計問題,近實時採集到日誌中心,分析,留存,報警等機制。


看了下答案全是針對linux環境下的,對於我們這裡全是windows server這類的該如何選擇?

我們目前是堡壘機里給每個運維組負責的伺服器設置了相應的賬號,伺服器的登錄都是用遠程桌面這種的


樓主說的這些功能,早已有完美實現方案,既要讓大家爽,又要有足夠的安全,一個免密可信認證入口機器,從入口機器每個人獨立帳號同樣可信認證登錄自己有許可權的機器

如果還要進一步安全? 那就讓員工定期去「土地廟」更替自己本地私鑰對吧,我們知道沒有絕對的安全,而當前的設計理念,我們認為每個人要自己對自己負責,無論是自己有意還是無意或者大意疏忽泄露了自己的本地私鑰,那麼這個問題就是員工自己負責,這最壞的情況,也就是非法用戶可以登錄到這個用戶所有有許可權的機器,不過只是普通帳號而已,影響也是可控的,如果加上一定的監控,安全問題不是問題

什麼vpn,二次驗證的機制,我們認為都是做無用工,而且影響作業效率,不完美不簡潔,一概不要

適用於各大互聯網公司,安全問題嘛? 我們給予每小時更替一次全線生產機器秘鑰對
下圖是我們審計截獲的同事登錄入口跳板機看到的實時數據流:
圖中左邊為許可權過期日期,中間為快捷登錄方式,而展示的機器是該用戶目前所擁有登錄許可權的機器,當然都是公鑰認證免密登錄且只能可信認證登錄


推薦閱讀:

如何用開源飛控PIXHAWK進行二次開發?
魅族開放了M9,MX,MX2的內核源代碼,這意味著什麼?
Alljoyn 是什麼樣的技術,有哪些優缺點?
如果魔獸世界的代碼開源了會有什麼有趣的影響?
大家目前都在參與哪些開源項目?

TAG:網路安全 | 運維 | 開源 | Linux運維 |