私は初心者で、ボードやLinux全体に慣れていません。Debianの素晴らしいSSHパッケージ(OpenSSHだと思います)を使用して、Piに物理的に接続しなくても、もっと学び、学ぶことができます。シリアルケーブル
私はこのフォーラムのさまざまなサイトやスレッドに沿ってSSHをより安全にするために強化し調整しました。しかし、私のファイルに適用したいsshd_config
重要な変更の1つは私を悩ませることですListenAddress
。私が理解したように、ListenAddress
の値は、sshd_config
サーバーが要求を受信する必要があるIPアドレスの厳密なパラメータを定義します。
ListenAddress
inのデフォルトは注釈付きsshd_config
です0.0.0.0
。私は仕事を知っています「デフォルトをコメントアウトします。」ポリシーに応じて、アプリケーションはデフォルトでこの値を使用します。私が読んでマニュアルページこれは、デフォルト値が次のようになることを示します。
現在のルーティングドメインのすべてのローカルアドレスを受信します。
ネットワーキングについてあまり知っていると主張することはできませんが、0.0.0.0
サーバーがネットワークからの要求を受信するという内容を他の場所で読んだことがあります。どのインターネットのIPv4アドレス?これにより、私の(インターネット接続)Piがターゲットになる可能性があり、ListenAddress
内部ネットワークからの要求のみを受信するように制限することが慎重であるようです。家以外の場所を訪れる必要はありません。
私のルーター(Apple Airport)のDHCP範囲はで10.0.1.2
、10.0.1.200
ルーターはにあります10.0.1.1
。 (これがデフォルトのようです。もっと知っている場合はに変更する必要があります192.168.1.1
。)次の値を設定しようとしましたがListenAddress
、すべてSSHで私をロックしてデフォルトにListenAddress
戻すにはUSBシリアルケーブル接続が必要です。
10.0.1.0
0
- その範囲のすべてのIPを表すように最後のオクテットを設定しようとしました。10.0.1.
10.0.1.*
-*
ワイルドカードとして使用すると、上記の最初の例のように動作できるようです。
10.0.1.**
- 単一のワイルドカードが範囲*
のみを表す場合.1
.9
10.0.1.1
- 今は愚かなように見えますが、ルータのIPを設定することが効果があると思いました。なぜなら、それはIPアドレスを伝える魔法の「箱」だからです。
10.0.1.1/24
- 最初の3つのオクテットを定義するために使用され、/24
最後のオクテットは開いた「範囲」として残されます。しかし、このキャラクターをsshd_config
認識できないと思います。/
127.0.0.1
- 私学んだ ~についてまたはループバックアドレスオプションがありますが、localhost
それも機能しません
10.0.1.24
- 私のコンピュータのIP。最後のサイコロロールは効果がなく、ランタイムからをsystemctl status ssh.service
返しerror: Bind to port 22 on 10.0.1.24 failed: Cannot assign requested address
、メッセージが表示されますfatal: Cannot bind any address
。Failed to start OpenBSD Secure Shell server
これが私が考えているものとこれまでに試したことを説明するのに役立つことを願っています。すべての論理オプションを使い果たしているようで、おそらく0.0.0.0
これが私が達成しようとしているものに許可されている唯一のオプションです。私の質問がウェブフォーラムに適しているかどうか教えてください。
心配するには、次の値systemctl status ssh.service
もお勧めします。Deprecated option
sshd_config
Deprecated option KeyRegenerationInterval
Deprecated option RhostsRSAAuthentication
Deprecated option RSAAuthentication
Deprecated option KeyRegenerationInterval
Deprecated option RhostsRSAAuthentication
Deprecated option RSAAuthentication
ところが、これらに対するプログラムの好感度がどうなるべきかわかりません。
私はこれまでに私が持っていた(非常に限られた)知識の限界を超えていますが、この委員会への以前の問い合わせを通してあなたに親切で詳細な答えを与えてください。
私のものsshd_config
デフォルトは v1.103 です。 私が変更したものは次のとおりです。
AddressFamily inet
AllowUsers keith
Protocol 2
LoginGraceTime 30
KeyRegenerationInterval 3600
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 1
PubkeyAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
AuthenticationMethods publickey keyboard-interactive
UsePAM yes
X11Forwarding no
PrintMotd no
TCPKeepAlive no
ClientAliveInterval 360
ClientAliveCountMax 0
私は案内のためにさまざまなウェブサイトとリソースを使用してきたので、これらの値のいくつかは今古いものかもしれません。私はSSHセキュリティが絶えず進化しており、移動可能な祭りであることを知っています。
これが私の思考プロセスとアプローチを説明することを望み、簡潔さが欠けていることを謝罪します。これまで情熱的に助けてくれた皆さんに感謝します。学習を止めないでください!
答え1
これは実際にListenAddress
どのシステムインターフェイスを受信する必要があるかをSSHサーバーに通知します(0:0:0:0はすべてのインターフェイスで受信するようにします)。たとえば、システムに1つのWi-Fi(10.0.1.4)と1つのイーサネット(10.0.1.12)がある場合は、イーサネットインターフェイスでのみリッスンし、他のコンピュータは接続するためにListenAddress 10.0.1.12
SSHを使用する必要があります。10.0.1.12
外部ユーザーを特定のアドレス範囲に制限するには、iptables
ファイアウォールを直接使用するか(人には適していません)、より許容可能なフロントエンドを使用できます。ufw
。
ただし、外部アクセスをブロックした可能性があるルータの背後にあるため、ルータの反対側にあるシステムはあなたの10.0.1.*
アドレスを見ることができません。すべてが1つのアドレス、つまりルータから出て外部から始まり、次のいずれかのアドレスで始まります。ローカルコンピュータには、ポート転送を実行するようにルータが設定されている必要があります(ルータの一部の指定されたポートへの接続は、ローカルネットワークの特定のローカルアドレス:ポートに転送されます)。
答え2
iptables
方法(マニュアルページ)
iptables
次のようにローカルネットワークのみを許可してコンピュータに接続することをお勧めします。
そのような規則の例は、内から得られたものです。rules.v4
長いバージョン
--append INPUT --protocol tcp --match tcp --destination-port 22 --match iprange --src-range 192.168.0.2-192.168.0.254 --match comment --comment "ssh + sshfs" --jump ACCEPT
簡潔なバージョン
-A INPUT -p tcp -m tcp --dport 22 -m iprange --src-range 192.168.0.2-192.168.0.254 -m comment --comment "ssh + sshfs" -j ACCEPT
conntrack
+ で指定した修正例subnet
長いバージョン
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --protocol tcp --match tcp --destination-port 22 --source 192.168.0.0/24 --match comment --comment ssh --jump ACCEPT
簡潔なバージョン
-A INPUT -s 192.168.0.0/24 -p tcp -m conntrack --ctstate NEW,ESTABLISHED -m tcp --dport 22 -m comment --comment ssh -j ACCEPT
答え3
ssh
「マッチ」ディレクティブを使用してすべてを維持できます。sshd_config
# This will disallow everyone
AuthorizedKeysFile /dev/null
# Put the netmask you want to allow here
Match Address 10.0.1.1/24
# Connections from above IP can use normal authorized keys to authenticate
AuthorizedKeysFile %h/.ssh/authorized_keys
誤ってロックされないようにするには、コンソールでテストするのが最善です。