SSH、DHCP和Telnet服務
一、Linux下兩大服務
1.1 獨立服務
獨立的進程和獨立的啓動腳本
啓動方式
/etc/init.d/xxx start
或者/etc/rc.d/init.d/xxx start
或者service xxx start
1.2 依賴服務
注意:RHEL7/Centos7服務的管理方式不一樣.
沒有獨立的啓動腳本,依賴於xinetd服務(xinetd服務本身是一個獨立服務)
啓動方式
必須啓動xinetd服務
1.3 什麼是xinetd服務?
Extended internet daemon(擴展的網絡守護進程),又叫超級Internet服務,常用來管理多種輕量級Internet服務;
作用:喚醒在睡覺的服務,由xinetd管理的服務只有在用到的時候才被喚醒,平時不佔用系統資源;支持Tcp_Wrappers一種安全策略機制。
TCP_Wrappers簡介:
TCP_Wrappers是一個工作在應用層的安全工具,它只能針對某些具體的應用或者服務起到一定的防護作用。比如說ssh、FTP等服務的請求,都會先受到TCP_Wrappers的攔截。
TCP_Wrappers工作原理:
TCP_Wrappers有一個守護進程叫作tcpd。以ssh爲例,每當有ssh的連接請求時,tcpd即會截獲請求,先讀取系統管理員所設置的訪問控制文件/etc/hosts.allow和/etc/hosts.deny;合乎要求,則會把這次連接原封不動的轉給真正的sshd進程,sshd完成後續工作;如果這次連接發起的ip不符合訪問控制文件中的設置,則會中斷連接請求,拒絕提供ssh服務。
二、 SSH服務
2.1 介紹
- SSH是Linux下遠程管理的工具,相比Telnet安全,運維人員必備的神器!
- SSH的全稱Secure Shell,安全的shell,是Client/Server架構,默認端口號爲22,TCP/IP協議
- SSH其實用於商業,而OpenSSH即爲開源的,在Linux中默認安裝
- SSH有v1和v2版本
- ssh v1:有漏洞,容易受到攻擊
- ssh v2:通過公鑰加密(數字簽名和密鑰交換)的方式進行,確保服務器端的身份識別
2.2 SSH加密算法
des 對稱的公鑰加密算法,安全低,數據傳輸速度快;使用同一個祕鑰進行加密或解密
rsa 非對稱的公鑰加密算法,安全,數據傳輸速度慢 ,SSH默認的加密算法
補充瞭解:
DSA數字簽名,非對稱加密的另一種實現。
2.3 SSH服務的認證方式
- 基於用戶密碼的認證
[root@client ~]# ssh 192.168.10.171
The authenticity of host '192.168.10.171 (192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)?
提示信息:無法確認主機192.168.10.171的真實性,指紋是9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
,你確定想要繼續嗎?
說明: 理論上應該是對公鑰的確認,由於公鑰通過RSA算法加密,太長,不好直接比較,所以給公鑰生成一個hash的指紋,方便比較。
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.171' (RSA) to the list of known hosts.
root@192.168.10.171's password:
說明:
當客戶端輸入yes確認對方的公鑰指紋後,server端的公鑰就會被存放到客戶機的用戶家目錄裏~/.ssh/known_hosts
文件中,下次再訪問就直接通過密碼登錄,不需要再確認公鑰。
- SSH工具指定用戶名訪問
[stu1@client ~]$ ssh [email protected] //方式一 用@
root@192.168.10.171's password:
Last login: Mon Apr 16 15:12:45 2018 from 192.168.10.171
[root@client ~]# exit
logout
Connection to 192.168.10.171 closed.
[stu1@client ~]$ ssh -l root 192.168.10.171 //方式二 用-l
root@192.168.10.171's password:
Last login: Mon Apr 16 15:18:59 2018 from 192.168.10.171
[root@client ~]# exit
logout
Connection to 192.168.10.171 closed.
[stu1@client ~]$ ssh -lstu2 192.168.10.171 //方式三 -l用戶名
stu2@192.168.10.171's password:
- 基於祕鑰對的認證(免密碼登錄)
重點:公鑰和私鑰在客戶端,服務端得到客戶端的公鑰後生成隨機數給客戶端,客戶端驗證後建立連接。不用賬號、密碼驗證。
相關文件解讀:
- id_rsa:保存私鑰
- id_rsa.pub:保存公鑰
- authorized_keys:保存已授權的客戶端公鑰
- known_hosts:保存已認證的遠程主機公鑰
2.4 SSH的基本配置
- client端生成一對祕鑰
- 將生成的公鑰遠程拷貝到server端
步驟:
- client端的user01用戶生成一對祕鑰對
[root@client ~]# useradd user01
[root@client ~]# su - user01
[user01@client ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc .emacs .gnome2 .mozilla
[user01@client ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user01/.ssh/id_rsa):
Created directory '/home/user01/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user01/.ssh/id_rsa.
Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
The key fingerprint is:
df:5b:4f:f8:26:38:0f:5f:f0:df:4c:78:54:bd:94:9e user01@client
The key's randomart image is:
+--[ RSA 2048]----+
| |
| o|
| oo|
| o +|
| S .E.|
| . . * |
| . o.+ *|
| o=.O+|
| .ooo*|
+-----------------+
[user01@client ~]$
[user01@client ~]$ ls .ssh/
id_rsa(私鑰) id_rsa.pub(公鑰)
2 . 將剛剛生成的公鑰遠程拷貝到server端的root家目錄裏指定位置
[user01@client ~]$ scp .ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
或者
[user01@client ~]$ ssh-copy-id -i .ssh/id_rsa.pub [email protected] (推薦)//會自動幫助拷貝到目的地並且重命名,所以推薦
The authenticity of host '192.168.10.171(192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.171' (RSA) to the list of known hosts.
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
補充:如果拷貝出錯可以關閉selinux
[root@server ~]# getenforce
Enforcing //強制模式
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive //警告模式
server端查看:
[root@server .ssh]# ls
authorized_keys
[root@server .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAssRLeKnKiLRZ2NbGi/uIZD1IpTnvMqFdKXEUlLH+Eli2PkxamDAszQVf7dsn2FHxCptzL04tDEdqWJ1Nr3zTDyjha9gfHWu6AuXAzaX9gWVIt8qza+yJSxpuoam3OwC6y88HMxvTuYy3jkL/6aCk6b5wzhKUYXwvTKwRctb/dO/9GC22CsmPvLHyFH+CpzmdcG2BzlOkg05CVshDIJSJ2Xmaj7G6m+N2cN4m/NV61rXPHn93wwdFcdNQLlRjDvZ6s7UIgmD04497PKUxJ/hTgkm6p3kAGxESEc0JxYHTGnhVE5D6byfRd0Aa/ydBiSov1x5a6vniGQeUh2+NP6omUQ== user01@client
3.測試驗證
[user01@client ~]$ ssh root@192.168.10.171
Last login: Mon Apr 16 16:00:55 2018 from 192.168.10.171
[root@server ~]#
注意:是客戶端將祕鑰複製給服務端,然後客戶端登錄服務端。
2.5 用戶登錄控制
1. 禁止遠程登錄
- 瞭解軟件相關知識
[root@server ~]# rpm -ql openssh-server
/etc/rc.d/init.d/sshd //啓動腳本
/etc/ssh/sshd_config //配置文件
/usr/sbin/sshd //二進制命令
[root@server ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
[root@server ~]# rpm -qf /usr/bin/ssh-keygen
openssh-5.3p1-94.el6.x86_64
- 步驟:
[root@server ~]# vim /etc/ssh/sshd_config
。。。
PermitRootLogin no
重啓服務:
[root@server ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
測試驗證:
[root@client ~]# ssh 192.168.10.171
root@192.168.10.171's password:
Permission denied, please try again.
[email protected]'s password:
2. 修改默認端口號
[root@server ~]# vim /etc/ssh/sshd_config
。。。
Port 10022
測試驗證:
[root@client Desktop]# ssh -p10022 [email protected]
ssh: connect to host 192.168.10.171 port 10022: No route to host //路由無法到達
原因:
1、 網絡問題
2、 防火牆
解決:
關閉防火牆
注意: /etc/services
中也記錄了一些協議的端口信息,可能會與配置文件中信息衝突,但是以配置文件爲主,如果端口信息更改失效,可以嘗試修改此文件,或刪除此文件中衝突信息。
3. ssh
服務的遠程訪問控制
可以使用
tcp_wrappers
工具做網絡控制/etc/hosts.allow
和/etc/hosts.deny
如何判斷一個服務支持TCP_wrappers功能
rpm包安裝的服務:
[root@server ~]# ldd /usr/sbin/sshd |grep libwrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fbb65b57000) //有以上模塊說明支持
源碼包:
./configuer --enable-libxxxx
//配置的時候開啓功能需求:
不允許192.168.10.170服務器來遠程訪問
vim /etc/hosts.deny sshd:192.168.10.170 //該文件寫法如下:更多參考man文檔 sshd:192.168.10.0/255.255.255.0 EXCEPT 192.168.10.170 sshd,vsftpd:.yu.net EXCEPT review.yu.net 測試驗證: [root@client ~]# ssh [email protected] -p 10022 ssh_exchange_identification: Connection closed by remote host
三、DHCP
3.1 DHCP服務介紹
- DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個局域網的網絡協議,UDP協議,67號端口
- 主要用於動態管理分配IP地址
過程分析:
- dhcpdiscover(發現):該過程中客戶端開始建立請求,以0.0.0.0作爲自己的ip地址而以255.255.255.255(廣播地址)作爲服務器的地址,等待DHCP服務器響應。
- dhcpoffer(提供):當網絡中的dhcp服務器收到dhcpdiscover信息後,對自身進行檢查,併發送相應的地址。服務器發送給請求客戶機的信息中主要包含了ip地址、子網掩碼、租約和提供dhcp服務的服務器的ip。
- dhcprequset(請求):當dhcp客戶收到服務器的返回信息後,就以廣播的方式發送一個dhcp請求信息給本網絡中的存在或不存在的其他的dhcp服務器,該信息中包含了已選擇的dhcp服務器的ip地址。
- dhcpack(確認):一旦被選中的dhcp收到客戶端的請求信息後,就將以保留的這個ip標識爲以租用,然後廣播的方式發送一個dhcpack信息給dhcp客戶端,當客戶端收到了確認信息後就完成了整個的獲取ip的過程。
3.2 DHCP服務器配置
- 安裝軟件
[root@review1 ~]# yum -y install dhcp
[root@review1 ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf //主配置文件
/etc/rc.d/init.d/dhcpd //啓動腳本
/usr/sbin/dhcpd //二進制命令
- 修改配置文件
vim /etc/dhcp/dhcpd.conf
option domain-name "yu.net"; //域名
option domain-name-servers 192.168.10.11, 8.8.8.8; //DNS(可以寫多個)
default-lease-time 3600; //缺省租約
max-lease-time 7200; //客戶端最大租約
log-facility local7; //定義日誌設備載體 (/var/log/boot.log輸出)
subnet 192.168.10.0 netmask 255.255.255.0 { //子網<網段>
range 192.168.10.20 192.168.10.50; //地址範圍<地址池>
option routers 192.168.10.11; //網關
option broadcast-address 192.168.10.255 //廣播地址
}
//注意:地址池中的IP要與DHCP服務器的IP在同一個網段,不然客戶機在求取IP時找不到DHCP服務器
[root@review1 ~]# service dhcpd start
Starting dhcpd: [OK]
四、Telnet服務
4.1 Telnet服務介紹
- telnet遠程管理服務,TCP協議 23號端口
- telnet服務是依賴服務,由xinetd服務管理
- 通過明文的帳號與密碼傳輸,不安全,不適用於類unix系統
- Linux系統默認不使用telnet,使用ssh
4.2 Telnet服務搭建
[root@review1 xinetd.d]# yum -y install telnet-server xinetd //安裝telnet-server(注意這是服務端,客戶端安裝telnet) 和xinetd
# cat /etc/xinetd.conf //主配置文件,輕易不修改,改變後會影響所有託管於xinetd的服務。
defaults
{
log_type = SYSLOG daemon info //--日誌類型,表示使用syslog進行服務登記。
log_on_failure = HOST //--失敗日誌,失敗後記錄客戶機的IP地址。
log_on_success = PID HOST DURATION EXIT //--成功日誌,記錄客戶機的IP地址和進程ID
cps = 50 10 //表示每秒50個連接,如果超過限制,則等待10秒。主要用於對付拒絕服務攻擊。
instances = 50 //最大連接數
per_source = 10 //每個IP地址最大連接數
v6only = no //不使用ipv6
groups = yes //確定該服務的進程組ID,/etc/group
umask = 002 //文件生成碼反掩碼 666(664) 777(775)
}
includedir /etc/xinetd.d //外部調用的目錄
# cat /etc/xinetd.d/telnet //子配置文件
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no //默認開啓服務,=yes表示關閉
flags = REUSE //標記
socket_type = stream //tcp協議
wait = no //表示不需等待,即服務將以多線程的方式運行,併發連接;yes表示單線程
user = root //以root身份啓動該進程
server = /usr/sbin/in.telnetd //二進制命令
log_on_failure += USERID //表示設置失敗時,UID添加到系統登記表
}
注:不能用root登錄,telnet連接不加密,telnet服務自己拒絕root連接
[root@review2 ~]# telnet 192.168.10.11
Trying 192.168.10.11...
Connected to 192.168.10.11.
Escape character is '^]'.
CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64
login: root
Password:
Login incorrect
login: test1
Password:
[test1@review1 ~]$