ssh等

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

開始:

  1. 確保已安裝開發包組yum groupinstall “Development tools”
  2. 下載dropbear最新的安裝包
  3. tar
  4. 了解README等幫助文件
  5. 分配配置文件等文件的各個安裝路徑:./configure ?–prefix=/data/dropbear ?–sysconfdir=/etc/dropbear/
  6. 上一步缺什么依賴包就安裝什么包,以確保上一步正確完整安裝
  7. 開始編譯(若是能力允許,其實可以自選)make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp”
  8. make install 和ls ?/data/dropbear/ 等查看是否完成;/etc/dropbear/文件夾若是沒有,手動創建即可
  9. 在/etc/profile.d/dropbear.sh設置path變量,并且進行生效操作

281

  1. 根據幫助文檔中的提示,生成必要的key在/etc/dropbear/中:dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
  2. 然后即可登錄,第一次最好在前臺測試:dropbear -p :2222 -F –E #前臺運行
  3. 客戶端訪問: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模塊成功或失敗情況

兩種方式實現:

簡單復雜

簡單方式實現:一個關健詞實現

  1. required :一票否決,表示本模塊必須返回成功才能通過認證,但是如果該模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type中的所有模塊全部執行完畢再將失敗結果返回給應用程序。即為必要條件
  2. requisite :一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程序。是一個必要條件
  3. sufficient :一票通過,表明本模塊返回成功則通過身份認證的要求,不必再執行同一type內的其它模塊,但如果本模塊返回失敗可忽略,即為充分條件
  4. optional :表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,其返回值一般被忽略
  5. include: 調用其他的配置文件中定義的配置信息

復雜詳細實現:使用一個或多個“status=action”

[status1=action1 status2=action …]

Status:檢查結果的返回狀態

Action:采取行為 ok,done,die,bad,ignore,reset

  1. ok 模塊通過,繼續檢查
  2. done 模塊通過,返回最后結果給應用
  3. bad 結果失敗,繼續檢查
  4. die 結果失敗,返回失敗結果給應用
  5. ignore 結果忽略,不影響最后結果
  6. 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

(0)
晨嘉晨嘉
上一篇 2018-05-28
下一篇 2018-05-28

相關推薦

欧美性久久久久