Ssh
允許在單個乙太網埠上進行 ssh 訪問
我是那種問複雜問題卻看不到簡單答案的人。
為了快速解釋,我有一堆伺服器(在 debian 9 上),帶有 2 個物理網路介面、一個前端(用於其上的應用程序)和一個後端(用於管理目的)。因為我想鎖定所有東西,我決定拒絕從前端介面對伺服器的 ssh 訪問,並且出於“其他”原因,不能只阻塞埠 22。複雜的部分是我不能只把sshd 配置(ListenAddress)中伺服器後端網路的 ip,因為 ip 是故意動態的。
我沒有在網上找到任何可以對 ssh 說“僅使用該介面”的內容,所以現在我對 sshd 服務的 systemd 啟動做了一個骯髒的修復,看起來像這樣:
[Unit] Description=OpenBSD Secure Shell server After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStartPre=AdmNetIp=$(echo `ifconfig eth1 2>/dev/null|awk '/inet / {print $2}'`); sed -i "s/\(^#\)\{0,1\}ListenAddress .*/ListenAddress $AdmNetIp/" /etc/ssh/sshd_config ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartPreventExitStatus=255 Type=notify [Install] WantedBy=multi-user.target Alias=sshd.service
重要的部分是
ExecStartPre
。它基本上在 sshd 啟動之前將 sshd 配置中的 ip 替換為 eth1 介面的實際 ip。我真的不喜歡那樣,並且想知道是否有“更清潔”的方式。我真的一無所知,並且經常玩我夠不到的東西,所以如果這很愚蠢,我很抱歉浪費了時間。我更像是一個修補匠而不是管理員……也是法國人,很抱歉你流血的眼睛。
謝謝閱讀 !
為什麼不只是
-oListenAddress=<ipaddress>
在呼叫時sshd
使用?可用於以配置文件中使用的格式給出選項。這對於指定沒有單獨命令行標誌的選項很有用。有關選項及其值的完整詳細資訊,請參閱sshd_config(5)
我同意您可能應該只綁定到您想收聽的地址。但如果這不是解決方案,您可以嘗試 iptables:
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP
我不是 100% 確定語法,因為我通常不做原始 iptables,但我相信有人會指出我的錯誤。