SSHを介してDebian 6サーバーで作業する必要があります。サーバーはファイアウォールで保護され、SSH接続はユーザーIPに基づいてフィルタリングされます。
残念ながら、動的IPを使用するISPプロバイダーがあります。これは毎日変わります。
ファイルに保存されているIPを読み取り、ファイアウォールの例外リストに追加する簡単なスクリプトを作成しました。しかし、今ではサーバーに接続するたびに、次のものが必要です。
- 私のIPをサーバーに送信する
- Webコンソールにログイン
- ファイアウォールの再起動
動的IPがある場合、ファイアウォールで保護されたSSH接続を管理するより簡単で自動化された方法はありますか?
答え1
現在、私は3つの方法を考えることができます。
最初はknockd
- 私のお気に入り - (http://www.zeroflux.org/projects/knock/)覚えているポートの順序のみを設定し、knockd
参照したIPアドレスに対してSSHをオンにします。knockd
Debian パッケージで使用できるサンプル構成 ( /etc/knockd.conf
) は次のとおりです。
[options]
logfile = /var/log/knockd.log
[opencloseSSH]
sequence = 2221,2222,2223
seq_timeout = 5
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 15
stop_command = /usr/sbin/iptables -D INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
この方法は、knockd
指定されたポートでシーケンスを受信し(同じ場合もあります)、シーケンスが5秒以内にヒットするとポートが開きます。 15秒後にルールが再び削除されるため、成功したログインは15秒以内に開始する必要があります。
2番目は、iptablesチェーンを定期的に更新することと組み合わせた動的DNSに基づいています。
iptables -N SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -j SSH
たとえば、1分ごとに次のスクリプトを実行するようにcronjobをスケジュールします。
#!/bin/bash
iptables -F SSH
iptables -A SSH -s ddns-entry.com -j ACCEPT
これにより、選択した時間間隔ごとにSSHチェーンが更新され、再入力されます。
あるいは、Debian 6ホストに保存されているIPアドレスを入力できる(パスワードで保護された)Webページを作成することもできます/tmp/currip
。 1分ごとに実行するようにcronジョブをスケジュールするか、inotify / incronを使用することをお勧めします。次に、ファイルを確認し、/tmp/currip
ファイルiptables
にリストされているアドレスを使用するようにルールを変更します。これは使用しているネットワークスタックの種類によって大きく異なりますので、ここでは例をリストしません。
答え2
最も簡単な答え:使用動的ドメイン名の解決
以下のいくつかの無料(個人用)オプションがあります。noip.comまたはdyndns.org
編集する:
ルールを継続的に更新するスクリプトを作成する必要があります(たとえば)iptables
。前にこれを言及するのを忘れていました。 (@lambertに感謝)
編集2: 私はそのような美しいソリューションを使用していませんが、試してみることができますこれ単純なPythonスクリプト。