SSH(ダイナミックIP)を介してファイアウォールで保護されたサーバーを使用する

SSH(ダイナミックIP)を介してファイアウォールで保護されたサーバーを使用する

SSHを介してDebian 6サーバーで作業する必要があります。サーバーはファイアウォールで保護され、SSH接続はユーザーIPに基づいてフィルタリングされます。

残念ながら、動的IPを使用するISPプロバイダーがあります。これは毎日変わります。

ファイルに保存されているIPを読み取り、ファイアウォールの例外リストに追加する簡単なスクリプトを作成しました。しかし、今ではサーバーに接続するたびに、次のものが必要です。

  • 私のIPをサーバーに送信する
  • Webコンソールにログイン
  • ファイアウォールの再起動

動的IPがある場合、ファイアウォールで保護されたSSH接続を管理するより簡単で自動化された方法はありますか?

ベストアンサー1

現在、私は3つの方法を考えることができます。

最初はknockd- 私のお気に入り - (http://www.zeroflux.org/projects/knock/)覚えているポートの順序のみを設定し、knockd参照したIPアドレスに対してSSHをオンにします。knockdDebian パッケージで使用できるサンプル構成 ( /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にリストされているアドレスを使用するようにルールを変更します。これは使用しているネットワークスタックの種類によって大きく異なりますので、ここでは例をリストしません。

おすすめ記事