對於那些需要為自己和親人提供透過 SSH/RDP/其他方式從世界任何地方存取伺服器的人,一個小型 RTFM/spur。
我們需要在手邊的任何設備上擺脫 VPN 和其他花哨的東西。
這樣您就不必對伺服器進行過多的練習。
你所需要的只是
當然,「一切都在網路上」(甚至在
我們將使用 Fedora/CentOS 作為範例進行練習,但這並不重要。
在這方面,支線適合初學者和專家,因此會有評論,但會更短。
1. 伺服器
-
安裝敲門伺服器:
yum/dnf install knock-server
-
配置它(例如在 ssh 上)- /etc/knockd.conf:
[options] UseSyslog interface = enp1s0f0 [SSHopen] sequence = 33333,22222,11111 seq_timeout = 5 tcpflags = syn start_command = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 3600 stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [SSHclose] sequence = 11111,22222,33333 seq_timeout = 5 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
“開放”部分設定為1小時後自動關閉。 你永遠不會知道...
-
/etc/sysconfig/iptables:
... -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT ...
-
向前:
service iptables restart service knockd start
-
您可以將 RDP 新增至內部旋轉的虛擬 Windows Server(/etc/knockd.conf;根據您的喜好替換介面名稱):
[RDPopen] sequence = 44444,33333,22222 seq_timeout = 5 tcpflags = syn start_command = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 cmd_timeout = 3600 stop_command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 [RDPclose] sequence = 22222,33333,44444 seq_timeout = 5 tcpflags = syn command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
我們使用以下命令在伺服器上追蹤來自客戶端的所有踢球
iptables -S
.
2. 耙子指南
敲擊.conf:
法力也包含一切(但這是不準確的),但knockd是一個對消息相當吝嗇的朋友,所以你需要非常小心。
- 版本
在 Fedora/CentOS 儲存庫中,今天的最新版本是 0.63。 誰想要 UDP - 尋找 0.70 的資料包。 - 接口
在預設的 Fedora/CentOS 設定中這一行 沒有。 用手加,不然不行。 - 超時
在這裡你可以根據自己的口味進行選擇。 客戶端必須有足夠的時間來執行所有操作 - 連接埠掃描機器人將會崩潰(146% 將進行掃描)。 - 啟動/停止/命令。
如果有一個指令,則為command,如果有兩個,則為start_command+stop_command。
如果你犯了一個錯誤,knockd將保持沉默,但不會有效。 - 原
理論上可以使用UDP。 在實踐中,我混合了tcp和udp,來自巴厘島海灘的客戶端只能第五次打開門。 因為TCP在需要的時候就到達了,而UDP卻不是事實。 但這又是一個品味問題。 - 序列
隱式的耙子是序列不應該相交...怎麼說呢...
例如,這個:
open: 11111,22222,33333
close: 22222,11111,33333
通過踢11111 打開 將等待 22222 處的下一次啟動。但是,在此 (22222) 啟動之後,它將開始工作 完成交易 一切都會破裂。 這也取決於客戶的延遲。 這樣的事情©。
iptables的
如果在 /etc/sysconfig/iptables 中是:
*nat
:PREROUTING ACCEPT [0:0]
它並沒有真正困擾我們,所以這裡是:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
它確實會幹擾。
由於knockd將規則添加到INPUT鏈的末尾,因此我們將被拒絕。
關閉這個拒絕意味著打開汽車的所有風。
為了不迷失在 iptables 中,在什麼之前插入什麼(就像這樣
- 預設 在 CentOS/Fedora 上 第一個 規則(「不禁止的就是允許的」)將被相反的內容取代,
- 我們刪除最後一條規則。
結果應該是:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
當然,您可以使用 REJECT 而不是 DROP,但有了 DROP,機器人的生活將會更加有趣。
3. 客戶
這個地方是最有趣的(從我的角度來看),因為您不僅需要在任何海灘上工作,還需要從任何設備上工作。
原則上,一定數量的客戶被列在
選擇客戶端時,您需要確保它支援資料包之間的延遲選項。 是的,海灘之間存在差異,100 兆位元永遠無法保證資料包會在正確的時間從給定的位置以正確的順序到達。
是的,在設定客戶端時,您需要自行選擇延遲。 超時太多 - 機器人會攻擊,太短 - 客戶端沒有時間。 延遲太多-客戶端無法及時到達,或會出現白痴衝突(請參閱「rake」),延遲太少-封包會在網路上遺失。
逾時 = 5 秒,延遲 = 100..500 毫秒是一個完全有效的選項
Windows
不管聽起來多有趣,對Google來說,這對這個平台的明確敲門客戶來說是相當重要的。 這樣 CLI 支援延遲、TCP - 並且無需弓箭。
或者,您可以嘗試
Linux
這裡很簡單:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS的
最簡單的方法是從自製程式安裝連接埠:
brew install knock
並為以下命令繪製必要的批次檔:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
iOS
一個可行的選項是 KnockOnD(免費,可從商店購買)。
Android
“敲開港口” 不是廣告,但它確實有效。 而且開發商的反應非常正面。
PS 哈布雷的降價,當然,上帝有一天會保佑他...
更新1: 謝謝
更新2: 另一個
來源: www.habr.com