2017年7月26日 星期三

TCP Wrappers 簡易設定

適用範圍:
1.由 super daemon (xinetd) 所管理的服務
2.僅適用 TCP daemon(有少數例外的狀況)
3.有支援libwrap.so模組的服務,可以用ldd指令來確認
ldd 判斷某個可執行的 binary 檔案含有什麼動態函式庫
-v :列出所有內容資訊;
-d :重新將資料有遺失的 link 點秀出來!
-r :將 ELF 有關的錯誤內容秀出來!

使用ldd查詢運行的服務是否有包含libwrap 函式庫,有包含的服務才能使用TCP Wrappers做控管,以下以sshd與postfix來做查詢:
$ ldd /usr/sbin/sshd |grep libwrap
        libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f46028e5000)
sshd有查詢到使用libwrap 函式庫!
$ldd /usr/sbin/postfix |grep libwrap/etc/hosts.allow
postfix沒有查詢到使用libwrap 函式庫
因此TCP Wrappers只可以控管sshd,而無法控管postfix!

TCP Wrappers透過/etc/hosts.allow與/etc/hosts.deny兩個檔案來管理服務,順序如下:
1.先比對/etc/hosts.allow,若符合檔案內的設定規則就放行
2.若/etc/hosts.allow比對完後沒有符合的規則設定,再比對/etc/hosts.deny,若符合規則就阻擋
3.若依序比對完兩個檔案後都沒有符合的規則,最後還是放行!

/etc/hosts.allow與/etc/hosts.deny的檔案格式
<服務   (程式名稱)> : <來源IP 或領域 或主機名稱> : 允許 (allow) 或拒絕 (deny)

內容分成三個小區段來看,分別是「服務   (程式名稱)、來源IP 或領域 或主機名稱、連線回應為允許 (allow) 或拒絕 (deny)」。區段間使用冒號(:)分隔。第三區段若省略,在hosts.allow內則為allow,在hosts.deny檔案內則為deny!另外在IP的遮罩部分,在ipv4的部分只支援255.255.255.0這樣的格式,不支援/24這類CIDR的表示方法!在ipv6則不在此限!
前二個區段中支援相關參數,但若使用 KNOWN、UNKNOWN、PARANOID 時,此三個參數是靠DNS名稱解析服務,因此須要注意主機的DNS名稱解析是否運作正常?
參數如下:
ALL: 表示 「全部 」,用於第一區段表示全部服務,用於第二區段(連線來源)表示全部來源。
LOCAL: 表示「本機」,也就是不含點 (.) 的主機名稱如localhost。
KNOWN: 表示「可解析主機」。
UNKNOWN: 表示「無法解析主機」。
PARANOID: 表示「正反解析必須一致」。
EXCEPT:「排除」的意思,例如允許 192.168.11.0 這個網段的所有主機,但排除 192.168.11.11 這個 IP 位址。

例如,在hosts.allow內設定允許192.168.11.0/255.255.255.0的網段但除了192.168.11.254這組ip連接sshd服務,其他的來源全部拒絕!這樣的設定可以只設定hosts.allow一個檔案,不需要再設定hosts.deny!
sshd: 192.168.11.0/255.255.255.0 EXCEPT 192.168.11.254 : allow
sshd: ALL : deny



2017年7月25日 星期二

製作不用密碼即可登入的ssh用戶端

1.在ssh server上的欲接受遠端登入的帳號家目錄下製Private Key與Public Key 

ssh-keygen -t rsa -b 2048   #-t 指定使用rsa加密,-b 指定key的大小,單位bit,key越大越安全,但會影響建立連線的初始時間
$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa): <---詢問key存放位置
Enter passphrase (empty for no passphrase):  <---輸入用來加密的密碼,不建議空白
Enter same passphrase again: 
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
3b:db:27:1e:d4:a8:7a:d5:3c:05:cb:09:3a:76:1c:a1 user1@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|          ..     |
|         .o .    |
|        Eo + +   |
|        + oo+ .  |
|       .Sooo..   |
|         +. +    |
|        +..  .   |
|       ..+...    |
|      ....oo     |
+-----------------+

2.指令會在使用者使用者家目錄下的.ssh內產生兩個檔案:id_rsa與id_rsa.pub,另外需注意,.ssh目錄權限必須為700,id_rsa檔案為600

3.檢視ssh 伺服器上的sshd_config內AuthorizedKeysFile的設定值,這是設定公鑰要放置的位置與檔案名稱,一般應為%h/.ssh/authorized_keys,將公鑰放至指定的位置
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

必須確定.ssh目錄與authorized_keys檔案的擁有者與群組都必須與登入帳號吻合!

4.將id_rsa.pub檔案傳送到工作端上想登入ssh server的帳號家目錄.ssh資料夾下,可以使用scp來達成
cd ~
mkdir .ssh
chmod 700 .ssh

scp user@server:~/.ssh/id_rsa ~/.ssh/

5.測試可採用金鑰登入後,可取消ssh的密碼驗證,增加安全性
sudo vim /etc/ssh/sshd_config
PasswordAuthentication no