Ssh

允許在單個乙太網埠上進行 ssh 訪問

  • July 9, 2017

我是那種問複雜問題卻看不到簡單答案的人。

為了快速解釋,我有一堆伺服器(在 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,但我相信有人會指出我的錯誤。

引用自:https://serverfault.com/questions/861081