自宅に Raspberry Pi があり、ホーム ネットワークに接続しています。これを使用して VPN サーバーや SSH トンネルを実行し、時々 SSH で接続してメンテナンスを実行します。
外出中にリモートで Pi に接続できるように、ルーターでポート (TCP) を開いているのは悪い考えでしょうか? 通常のポート 22 は使用せず、ランダムに選択したポートです。ただし、 を使用して IP アドレスをスキャンすると、nmap
SSHpentest-tools.com
に使用するために選択した開いているポートが表示されます。私の Pi はパスワードで保護されており、私が知る限り、機密データやクレジットカード番号は保存されていません。ただし、VPN または SSH トンネリングに使用することを考えると、機密データが通過する可能性があります。では、この SSH ポートをルーターで開いているのは悪いことでしょうか? Pi は常にオンになっていてそのポートをリッスンしていることを考えると、このポートを開いていることで誰かが私のホーム ネットワークに悪意のある操作を行うことはできますか?
答え1
セキュリティの面では、さらに 3 つの方法が思い浮かびます。
A: 公開鍵認証を使用する
セキュリティを強化するために、公開鍵認証を使用するように SSH サーバーを設定できます。つまり、強力なパスワードに加えて、または強力なパスワードの代わりに、SSH クライアントがサーバーの公開鍵と一致する秘密鍵を提供する場合にのみ接続が開かれます。攻撃者が何らかの方法で公開鍵を入手できたとしても、そこから秘密鍵を復元することはできません。ただし、これによってポート スキャナーからポートが隠されるわけではありません。
B: 別のポートを使用する
さらに、SSHサーバーを22番以外のポートでリッスンするように設定することで、ポートスキャンが少なくなるという良い経験を得ました。対応するデフォルトの設定オプションは/etc/ssh/sshd_config
、
Port 22
これを、たとえば 54322 に変更できます。
Port 54322
その後SSHサーバーを再起動することを忘れないでください。RaspberryのLinuxによっては、次のいずれかになります。
# service sshd restart
# systemctl restart sshd
(この#
記号がファイル内にない場合は、私の例ではルート プロンプトを示します。)
心配しないでください。現在のSSHセッションはアクティブなままです。ポート54322に2番目のSSHセッションを開いて、ログインがまだ機能するかどうか試してみる価値があるかもしれません。
- SSHクライアントを新しいポートに設定する
- 該当する場合は、インターネットルーターの新しいポートをRaspberry Piに転送します。
C: ポートを閉じて、要求があった場合にのみ開きます
このポートが開いていることを「インターネット」に見せたくない場合は、ポート ノッキング デーモン (例: ) を調べてくださいknockd
。これらのプログラムは、ユーザーが定義した (閉じた) ポートをリッスンし、ユーザーが定義したノッキング シーケンスで、別のポート (例: SSH ポート) を開きます。携帯電話またはラップトップからノッキング シーケンスを開始すると、Raspberry Pi 上のノック デーモンが、まったく表示されなかった SSH ポートを開きます。
詳しく言うと、ポート ノッキングはiptables
設定に 1 行追加します。この行は Raspberry のポートを開きます。これはまた、SSH ポートをiptables
事前に閉じておく必要があることを意味します。つまり、SSH 経由でログインすることはできません。
例はknockd.conf
次のようになります。
[openclosessh]
sequence = 1000,2020,3015,65432
seq_timeout = 15
tcpflags = syn
start_command = /usr/local/bin/knockd-open.sh %IP%
cmd_timeout = 30
stop_command = /usr/local/bin/knockd-close.sh %IP%
また、ノックするポートをインターネット ルーターから Raspberry に転送することを忘れないでください。
対応するオープン/クローズ スクリプトは次のようになります。
#!/bin/bash
# /usr/local/bin/knockd-open.sh
# adds two lines at the top of iptables which allow all incoming and outgoing traffic on tcp port 54322
iptables -I INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT
そして
#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT
両方のスクリプトを で実行可能にすることを忘れないでくださいchmod +x /usr/local/bin/knockd*
。また、次のいずれかでknockdサービスを開始して有効にする必要があります。
# service knockd start && update-rc.d knockd enable
# systemctl start knockd && systemctl enable knockd
atd
特に、コンソールにアクセスできないリモート コンピューターをノックする場合、構成ミスがあった場合に自動的に変更を取り消したり、Raspberry を再起動したりするために、 を使用することをお勧めします。
iptablesは再起動後も自動的に保存されないため、例えば、root(経由su
)で
# at now + 5 minutes
> reboot
> (hit ctrl-d)
# ./script-which-closes-iptables.sh
例は./script-which-closes-iptables.sh
次のようになります( で実行可能にすることを忘れないでくださいchmod +x
)
#!/bin/bash
# allow everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# allow only related or established incoming ssh sessions
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --dport 54322 -j ACCEPT
# allow outgoing related or established ssh sessions
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 54322 -j ACCEPT
# allow everything on the loopback interface
iptables -A OUTPUT -o lo -j ACCEPT
# drop everything else in and out
iptables -P INPUT DROP
iptables -P OUTPUT DROP
SSHセッションが終了しそうなら、Raspberryは5分後に再起動します。SSHセッションがまだアクティブな場合は、保留中の再起動を取り消します。
# atq
15 reboot
# atrm 15
SSH セッションがまだアクティブな場合は、2 番目の SSH セッション経由でログインしてみてください。これは機能しないはずです。次に、携帯電話を使用して、で設定したポートをノックします/etc/knockd.conf
。その後、2 番目の SSH セッション経由で再度ログインしてみてください。今回は機能するはずです。
その後、iptablesを再起動しても維持することができます。システム上で、パッケージをインストールする必要があるかもしれません。
# apt-get install iptables-persistent
iptablesを保存するには
# iptables-save > /etc/iptables/iptables-rules
iptablesサービスを有効にするには
# systemctl enable iptables
答え2
Raspberry Pi に強力なパスワードと強力な SSH セキュリティが設定されていれば、攻撃者は SSH にログインしたり悪用したりできない限り、SSH で何もできません。ただし、ポートは確実に見つかります。
歴史的注記: 過去には、問題が発生しましたSSH 構成では、自動生成されたキーが予測可能でした。これは修正されました。
攻撃者がするSSHアクセスに成功すれば、事実上デバイスを所有することになり、それを使って次のような悪事を働くことができる。ARP ポイズニングこれにより、ネットワークを通過する暗号化されていないデータをキャプチャして変更することができます。また、Pi を他のホストへの攻撃の起点として利用することもできます。Pi は他のコンピューターと同様に、セキュリティ保護に注意する必要があります。