SSH端口轉發
SSH會自動的加密和解密所有SSH客戶端與服務器之間的網絡數據;同時也可以將其他TCP端口的數據加密轉發,這一過程叫“隧道”,這樣也可以減少防火墻開啟的端口。
實現過程是數據首先通過連接本機的某一個端口,被當做ssh協議數據發送給ssh服務器,ssh服務器解密再發給遠程主機的端口
本地轉發:
-L localport:remotehost:remotehostport sshserver
locaolport本機端口號、遠程主機地址和端口、ssh協議的端口–23端口或25端口
選項:
-f 后臺啟用
-N 不打開遠程shell,處于等待狀態(一般搭配f,實現在當前窗口就可傳輸數據,不需要開新窗口)
-g 啟用網關功能
示例
ssh –L 9527:telnetsrv:23 ?sshsrv
telnet 127.0.0.1 (也可接端口,即指定連接端口)
遠程轉發:
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
讓sshsrv偵聽9527端口的訪問,如有訪問,就加密后通過ssh服務轉發請求到本機ssh客戶端,再由本機解密后轉發到telnetsrv:23(Data←→sshsrv:9527←→sshsrv:22←→localhost:XXXXX←→localhost:YYYYY←→telnetsrv:23)
還有一種是動態端口轉發。
ssh服務器
服務器端:sshd, 配置文件: /etc/ssh/sshd_config
常用參數:
?Port 端口
?ListenAddress ip
?LoginGraceTime 2m 登錄等待時間
?PermitRootLogin yes是否允許root登錄
?StrictModes yes 檢查.ssh/文件的所有者,權限等
?MaxAuthTries 6最多的驗證密碼的次數(生效一半)
?MaxSessions 10 同一個連接最大會話(同一個會話→克?。?/p>
?PubkeyAuthentication yes 是否支持基于key驗證登錄
?PermitEmptyPasswords no
?PasswordAuthentication yes 是否基于密碼驗證登錄
ClientAliveInterval 60 用戶沒有操作是最多等待n秒
ClientAliveCountMax 等待結束提醒次數最多為多少后,就退出ssh服務連接
UseDNS yes 改為no可提升訪問速度
GSSAPIAuthentication yes 提高速度可改為no
MaxStartups 未認證連接最大值,默認值10(10:30:100 10個以上的連接后開始70%的成功率連接)
Banner /path/file 可以設置提示界面的提示語
限制可登錄用戶的辦法:(直接在配置文件中添加即可生效)
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
ssh服務的最佳實踐
u建議使用非默認端口
u禁止使用protocol version 1
u限制可登錄用戶
u設定空閑會話超時時長
u利用防火墻設置ssh訪問策略
u僅監聽特定的IP地址
u基于口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
u使用基于密鑰的認證
u禁止使用空密碼
u禁止root用戶直接登錄
u限制ssh的訪問頻度和并發在線數
u經常分析日志(last查看日志信息或lastb查看失敗登錄的信息;在/var/log/下,btmp是失敗登錄的日志)
編譯安裝dropbear示例
ssh協議的另一種實現方式:dropbear
開始:
- 確保已安裝開發包組yum groupinstall “Development tools”
- 下載dropbear最新的安裝包
- tar
- 了解README等幫助文件
- 分配配置文件等文件的各個安裝路徑:./configure ?–prefix=/data/dropbear ?–sysconfdir=/etc/dropbear/
- 上一步缺什么依賴包就安裝什么包,以確保上一步正確完整安裝
- 開始編譯(若是能力允許,其實可以自選)make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp”
- make install 和ls ?/data/dropbear/ 等查看是否完成;/etc/dropbear/文件夾若是沒有,手動創建即可
- 在/etc/profile.d/dropbear.sh設置path變量,并且進行生效操作
- 根據幫助文檔中的提示,生成必要的key在/etc/dropbear/中:dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
- 然后即可登錄,第一次最好在前臺測試:dropbear -p :2222 -F –E #前臺運行
- 客戶端訪問:dbclient -p 2222 root@127.0.0.1
AIDE
是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被更改過了
操作:
初始化默認的AIDE的庫:
/usr/local/bin/aide –init
生成檢查數據庫(建議初始數據庫存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
檢測: /usr/local/bin/aide –check
更新數據庫
aide –update
sudo
sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使用 sudo,會提示聯系管理員
sudo也可以記錄日志;使用時間戳文件默認每隔五分鐘檢測一次權限
添加權限要寫入文件:/etc/sudoers
最好寫一個單獨的文件放入:/etc/sudoers.d/
visudo可直接添加附加權限,雖然有檢查語法功能,但不是彩色的,需修改配置文件:(記得生效)
echo export EDITOR=vim >> /etc/profile.d/env.sh
時間戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:任意單一字符
* :匹配任意長度字符
[wxc]:匹配其中一個字符
[!wxc]:除了這三個字符的其它字符
\x : 轉義
[[alpha]] :字母 示例: /bin/ls [[alpha]]*
授權規則格式:
用戶 登入主機=(代表用戶) 命令
示例:
root ALL=(ALL) ALL
格式說明:
user: 運行命令者的身份
host: 通過哪些主機
(runas):以哪個用戶的身份
command: 運行哪些命令
sudo -u wang ….指定具備誰的權限來進行操作
支持別名識別:
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
別名有四種類型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
別名格式:[A-Z]([A-Z][0-9]_)*
別名定義:
Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
示例1:
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL (后面是表示不需要輸入密碼即可操作)
示例2:
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
示例3:(設置默認sudo所要代表的用戶)
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
sudo命令的其他選項:
-V 顯示版本信息等配置信息
-u user 默認為root
-l,ll 列出用戶在主機上可用的和被禁止的命令
-v 再延長密碼有效期限5分鐘,更新時間戳
-k 清除時間戳(1970-01-01),下次需要重新輸密碼
-K 與-k類似,還要刪除時間戳文件
-b 在后臺執行指令
-p 改變詢問密碼的提示符號
示例:-p ”password on %h for user %p:”
TCP_Wrappers
主要解決對TCP的安全控制
某進程是否接受libwrap的控制取決于發起此進程的程序在編譯時是否調用該庫
判斷服務程序是否能夠由tcp_wrapper進行訪問控制的方法:
ldd /PATH/TO/PROGRAM|grep libwrap.so
strings PATH/TO/PROGRAM|grep libwrap.so
配置文件:/etc/hosts.allow, /etc/hosts.deny
幫助參考:man 5 hosts_access,man 5 hosts_options
檢查順序:hosts.allow,hosts.deny(默認允許)
注意:一旦前面規則匹配,直接生效,將不再繼續
基本語法:
? daemon_list@hostip: client_list [ :options :option… ]
Daemon_list@host格式
- 單個應用程序的二進制文件名,而非服務名,例如vsftpd
- 以逗號或空格分隔的應用程序文件名列表,如:sshd,vsftpd
- ALL表示所有接受tcp_wrapper控制的服務程序
- 主機有多個IP,可用@hostIP來實現控制
如:in.telnetd@192.168.0.254
客戶端Client_list格式
- 以逗號或空格分隔的客戶端列表
- 基于IP地址:168.10.1 192.168.1.
- 基于主機名:magedu.com .magedu.com 較少用
- 基于網絡/掩碼:168.0.0/255.255.255.0
- 基于net/prefixlen: 192.168.1.0/24(CentOS7)
- 基于網絡組(NIS 域):@mynetwork
- 內置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
[:options]選項:
幫助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定義“拒絕”規則
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定義“允許”規則
如:vsftpd:172.16. :allow
spawn 啟動一個外部程序完成執行的操作
twist 實際動作是拒絕訪問,使用指定的操作替換當前服務,標準I/O和ERROR發送到客戶端,默認至/dev/null
測試工具:
tcpdmatch [-d] daemon[@host] client
-d 測試當前目錄下的hosts.allow和hosts.deny
示例:
- sshd: ALL :spawn echo “$(date +%%F) login attempt from %c to %s,%d” >>/var/log/sshd.log
說明:
?在/etc/hosts.allow中添加,允許登錄,并記錄日志
?在/etc/hosts.deny中添加,拒絕登錄,并記錄日志
?%c 客戶端信息
?%s 服務器端信息
?%d 服務名
?%p 守護進程的PID
?%% 表示%
- vsftpd: 172.16. :twist /bin/echo “connection prohibited”
PAM認證機制
PAM相關文件
?模塊文件目錄:/lib64/security/*.so
?環境相關的設置:/etc/security/
?主配置文件:/etc/pam.conf,默認不存在
?為每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME
? 注意:如/etc/pam.d存在,/etc/pam.conf將失效
pam認證原理
uPAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文件)→pam_*.so
uPAM認證首先要確定那一項服務,然后加載相應的PAM的配置文件(位于/etc/pam.d下),最后調用認證文件(位于/lib/security下)進行安全認證
?
通用配置文件/etc/pam.conf格式
application type control module-path arguments
專用配置文件/etc/pam.d/* 格式
type control module-path arguments
說明:
模塊類型(module-type)
control PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗情況
module-path 用來指明本模塊對應的程序文件的路徑名
Arguments 用來傳遞給該模塊的參數
模塊類型(module-type)
- Auth 賬號的認證和授權
- Account 與賬號管理相關的非認證類的功能,如:用來限制/允許用戶對某個服務的訪問時間,當前有效的系統資源(最多可以有多少個用戶),限制用戶的位置(例如:root用戶只能從控制臺登錄)
- Password 用戶修改密碼時密碼復雜度檢查機制等功能
- Session 用戶獲取到服務之前或使用服務完成之后需要進行一些附加的操作,如:記錄打開/關閉數據的信息,監視目錄等
- -type 表示因為缺失而不能加載的模塊將不記錄到系統日志,對于那些不總是安裝在系統上的模塊有用
Control控制:
PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況
兩種方式實現:
簡單和復雜
簡單方式實現:一個關健詞實現
- required :一票否決,表示本模塊必須返回成功才能通過認證,但是如果該模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type中的所有模塊全部執行完畢再將失敗結果返回給應用程序。即為必要條件
- requisite :一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程序。是一個必要條件
- sufficient :一票通過,表明本模塊返回成功則通過身份認證的要求,不必再執行同一type內的其它模塊,但如果本模塊返回失敗可忽略,即為充分條件
- optional :表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,其返回值一般被忽略
- include: 調用其他的配置文件中定義的配置信息
復雜詳細實現:使用一個或多個“status=action”
[status1=action1 status2=action …]
Status:檢查結果的返回狀態
Action:采取行為 ok,done,die,bad,ignore,reset
- ok 模塊通過,繼續檢查
- done 模塊通過,返回最后結果給應用
- bad 結果失敗,繼續檢查
- die 結果失敗,返回失敗結果給應用
- ignore 結果忽略,不影響最后結果
- reset 忽略已經得到的結果
module-path: 模塊路徑
- 相對路徑:
/lib64/security目錄下的模塊可使用相對路徑
如:pam_shells.so、pam_limits.so
- 絕對路徑:
模塊通過讀取配置文件完成用戶對系統資源的使用控制
/etc/security/*.conf
注意:修改PAM配置文件將馬上生效
建議:編輯pam規則時,保持至少打開一個root會話,以防止root身份驗證錯誤
ss -ntl 可查到現已開啟的端口號
ss -nt 可查現在登錄的客戶端
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/99641