使用 stunnel 保護 telnet 連線
Telnet 是一種客戶端-服務端協議,透過 TCP 的 23 埠連線到遠端伺服器。Telnet 並不加密資料,因此它被認為是不安全的,因為資料是以明文形式傳送的,所以密碼很容易被嗅探。但是,仍有老舊系統需要使用它。這就是用到 stunnel 的地方。
stunnel 旨在為使用不安全連線協議的程式增加 SSL 加密。本文將以 telnet 為例介紹如何使用它。
服務端安裝
使用 sudo 安裝 stunnel 以及 telnet 的服務端和客戶端:
sudo dnf -y install stunnel telnet-server telnet
新增防火牆規則,在提示時輸入你的密碼:
firewall-cmd --add-service=telnet --perm
firewall-cmd --reload
接下來,生成 RSA 私鑰和 SSL 證書:
openssl genrsa 2048 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 90 -out stunnel.crt
系統將一次提示你輸入以下資訊。當詢問 Common Name
時,你必須輸入正確的主機名或 IP 地址,但是你可以按Enter鍵跳過其他所有內容。
You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []
將 RSA 金鑰和 SSL 證書合併到單個 .pem
檔案中,並將其複製到 SSL 證書目錄:
cat stunnel.crt stunnel.key > stunnel.pem
sudo cp stunnel.pem /etc/pki/tls/certs/
現在可以定義服務和用於加密連線的埠了。選擇尚未使用的埠。此例使用 450 埠進行隧道傳輸 telnet。編輯或建立 /etc/stunnel/telnet.conf
:
cert = /etc/pki/tls/certs/stunnel.pem
sslVersion = TLSv1
chroot = /var/run/stunnel
setuid = nobody
setgid = nobody
pid = /stunnel.pid
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
[telnet]
accept = 450
connect = 23
accept
選項是伺服器將監聽傳入 telnet 請求的介面。connect
選項是 telnet 伺服器的內部監聽介面。
接下來,建立一個 systemd 單元檔案的副本來覆蓋原來的版本:
sudo cp /usr/lib/systemd/system/stunnel.service /etc/systemd/system
編輯 /etc/systemd/system/stunnel.service
來新增兩行。這些行在啟動時為服務建立 chroot 監獄。
[Unit]
Description=TLS tunnel for network daemons
After=syslog.target network.target
[Service]
ExecStart=/usr/bin/stunnel
Type=forking
PrivateTmp=true
ExecStartPre=-/usr/bin/mkdir /var/run/stunnel
ExecStartPre=/usr/bin/chown -R nobody:nobody /var/run/stunnel
[Install]
WantedBy=multi-user.target
接下來,配置 SELinux 以在你剛剛指定的新埠上監聽 telnet:
sudo semanage port -a -t telnetd_port_t -p tcp 450
最後,新增新的防火牆規則:
firewall-cmd --add-port=450/tcp --perm
firewall-cmd --reload
現在你可以啟用並啟動 telnet 和 stunnel。
systemctl enable telnet.socket stunnel@telnet.service --now
要注意 systemctl
命令是有順序的。systemd 和 stunnel 包預設提供額外的模板單元檔案。該模板允許你將 stunnel 的多個配置檔案放到 /etc/stunnel
中,並使用檔名啟動該服務。例如,如果你有一個 foobar.conf
檔案,那麼可以使用 systemctl start stunnel@foobar.service
啟動該 stunnel 例項,而無需自己編寫任何單元檔案。
如果需要,可以將此 stunnel 模板服務設定為在啟動時啟動:
systemctl enable stunnel@telnet.service
客戶端安裝
本文的這部分假設你在客戶端系統上以普通使用者(擁有 sudo 許可權)身份登入。安裝 stunnel 和 telnet 客戶端:
dnf -y install stunnel telnet
將 stunnel.pem
從遠端伺服器複製到客戶端的 /etc/pki/tls/certs
目錄。在此例中,遠端 telnet 伺服器的 IP 地址為 192.168.1.143
。
sudo scp myuser@192.168.1.143:/etc/pki/tls/certs/stunnel.pem
/etc/pki/tls/certs/
建立 /etc/stunnel/telnet.conf
:
cert = /etc/pki/tls/certs/stunnel.pem
client=yes
[telnet]
accept=450
connect=192.168.1.143:450
accept
選項是用於 telnet 會話的埠。connect
選項是你遠端伺服器的 IP 地址以及監聽的埠。
接下來,啟用並啟動 stunnel:
systemctl enable stunnel@telnet.service --now
測試你的連線。由於有一條已建立的連線,你會 telnet
到 localhost
而不是遠端 telnet 伺服器的主機名或者 IP 地址。
[user@client ~]$ telnet localhost 450
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Kernel 5.0.9-301.fc30.x86_64 on an x86_64 (0)
server login: myuser
Password: XXXXXXX
Last login: Sun May 5 14:28:22 from localhost
[myuser@server ~]$
via: https://fedoramagazine.org/securing-telnet-connections-with-stunnel/
作者:Curt Warfield 選題:lujun9972 譯者:geekpi 校對:wxy
相關文章
- 使用telnet連線redisRedis
- windwos 使用telnet 連線 redisRedis
- telnet連線socket serverServer
- 保護無線網路安全連線九個技巧
- java使用telnet連線交換機並管理交換機Java
- 借Stunnel工具保護E-mail伺服器AI伺服器
- Profibus DP主站轉Modbus模組連線馬達保護器案例
- 從架構到元件,深挖istio如何連線、管理和保護微服務2.0?架構元件微服務
- 使用telnet測試指定埠的連通性
- telnet23埠連線失敗怎麼處理win10_win10系統telnet在埠23連線失敗解決方法Win10
- Spring Boot安全保護使用教程Spring Boot
- 使用CRM保護資料隱私
- [原創] LINUX ES4.0 中限制TELNET連線數Linux
- 如何優雅的使用telnet測試埠連通性
- 保護好你的WIFI無線網路安全WiFi
- 保護模式模式
- 保護期限
- 2.9.4 事務保護和應用的連續性
- telnet、ftp連線速度慢的問題的解決(轉)FTP
- 如何使用代理保護企業網路?
- 使用Wrap加密,保護Oracle程式原始碼加密Oracle原始碼
- 長連線和短連線的使用
- 【等級保護】等級保護共分為幾級?保護物件是指什麼?物件
- Win7如何保護你的無線網路Win7
- 簡單介紹python連線telnet和ssh的兩種方式Python
- 破解EXCLE保護
- 軟體保護
- 使用這些 HTTP 頭保護 Web 應用HTTPWeb
- 使用jwt來保護你的介面服務JWT
- 6個使用KeePassX保護密碼的技巧密碼
- 使用 Let's Encrypt 保護你的網站網站
- 使用GnuPG保護你的備份資料
- proxool連線池如何使用SSL方式連線?
- 2.2連線和路由表的維護路由
- 學習連連看 連線線之謎+道具的使用
- 戴爾易安信:保護業務 從保護資料開始
- 使用 fail2ban 保護 frp 服務AIFRP
- 使用Jwt為.Net Core SignalR保駕護航JWTSignalR