男がドアのノックシーケンスを使用して侵入するこれらの古いギャング映画をご存知ですか?サーバーの場合、ポートノッキングはまさにそれです。デフォルトのsshポートを変更しても、ハッキングされないことは保証されません。ハッカーは、サーバーを攻撃する前に、ツールを使用して開いているポートの自動スキャンを実行することがよくあります。ポートノッキングは、ポートスキャナーから身を守るための方法です。クライアントが他の一連のポートに正しい順序で事前にアクセスするまで、保護されたポートへのアクセスを拒否します。
Ubuntuにポートノッキングをインストールするのは簡単です。この記事では、ポートノッキングのインストールと設定の方法を紹介します。このチュートリアルの手順は、Debian8でも機能するはずです。
ステップ1:必要なすべてのパッケージがインストールされていることを確認します
以下のすべてのコマンドは、rootユーザーとして実行されていません。すべてのコマンドにsudoをプリペントしたくないので、次を使用します:
sudo su
rootユーザーになります。最初のステップは、Ubuntuパッケージリストを更新することです。
apt-get update
次に、SSHサーバーをインストールします(まだインストールしていない場合)。
apt-get install openssh-server
次に、ポートノッキングを制御するデーモンであるノックソフトウェアをインストールします。
apt-get install knockd
Get:1 http://security.debian.org wheezy/updates Release.gpg [1,554 B]
Get:2 http://security.debian.org wheezy/updates Release [102 kB]
Get:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]
Hit http://mirrors.digitalocean.com wheezy Release.gpg
Hit http://mirrors.digitalocean.com wheezy Release
Get:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]
Hit http://mirrors.digitalocean.com wheezy/main amd64 Packages
Hit http://mirrors.digitalocean.com wheezy/main Translation-en
Fetched 635 kB in 1s (358 kB/s)
Reading package lists... Done
[email protected]:~#
[email protected]:~# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
openssh-client
Suggested packages:
ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw
The following packages will be upgraded:
openssh-client openssh-server
2 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
Need to get 1,364 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]?
Yを押してからEnterキーを押して続行します。
パッケージをインストールした後、iptablesカーネルファイアウォールをインストールする必要があります。実行:
apt-get install iptables
ステップ2:iptablesにルールを追加する
まず、既存のファイアウォールルールをフラッシュし、発信接続が切断されないようにします。
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptables --policy OUTPUT ACCEPT
確立されたすべての接続と進行中のセッションがファイアウォールを通過できるようにする必要があります。そうしないと、ファイアウォールが現在のSSHセッションをブロックします。
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
注 : 上記のルールでは、STABLISHED、RELATEDのコンマの両側にスペースはありません。
次に、次のルールを使用して着信ポート22(SSH)をブロックします。
iptables -A INPUT -p tcp --destination-port 22 -j DROP
iptablesルールを確立したら、iptables-persistentを使用して、再起動時に復元プロセスを自動化できます。これはUbuntuのデフォルトリポジトリからダウンロードできます:
apt-get install iptables-persistent
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v4. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of iptables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv4 rules?
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v6. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of ip6tables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv6 rules?
インストール中に、プログラムは現在のiptablesルール(ipV4とipV6)を保存するように要求します。両方に対して[はい]を選択するだけです。
iptables-saveコマンドを使用して、現在のルールセットをファイルに保存します。このファイルはiptablesで使用できます-後で復元して、同じiptablesセットアップを復元します:
iptables-save
# Generated by iptables-save v1.4.14 on Tue Feb 23 04:59:28 2016
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1976]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
COMMIT
# Completed on Tue Feb 23 04:59:28 2016
これで、SSHポート上の他の接続をブロックしながら、既存の接続に接続したままになります。
次に、knockdを構成する必要があります。
サービスを構成するには、構成ファイル/etc/knockd.confを編集する必要があります。 nanoでファイルを開きます:
nano /etc/knockd.conf
このようなセクションが表示されます。
[options]
UseSyslog
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
- [オプション]セクションに、ディレクティブ名
UseSyslog
が表示されます。 。 ログファイル かなり明白です–すべてのノック試行をログに記録します - その下には、openSSHとcloseSSHの2つのセクションがあります。 1つ目は、ノッカーがポート22(SSH)にアクセスできるようにし、2つ目は、ノッカーが完了するとポートを閉じます。
- knockdは、%IP%をノックを送信したクライアントのIPアドレスに自動的に置き換えるため、許可されたクライアントに対してのみポートを開くことができます。
sequence = 9000,8000,7000
これは、同じIPがポート7000、直接ポート8000、最後にポート9000で接続を要求した場合に、この一連のルールが一致することを意味します。デフォルトの順序が適切であるため、デフォルトのポートとその順序を変更することを強くお勧めします。攻撃者にも知られています。
seq_timeout = 5
「seq_timeout」オプションは、ノックのすべての数値を提供する時間の長さを秒単位で定義します。このデフォルト値は問題ないはずであり、ノックを自動的に生成する場合は問題になりません。
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
クライアントが正しいポートノックを行ったときに実行するコマンドを指定します。 %IP%のすべてのインスタンスは、ノッカーのIPアドレスに置き換えられます。
tcpflags = syn
このフラグを設定するために使用する必要のあるパケット(この場合はsynパケット)に注意してください。 TCPフラグを使用する場合、knockdはフラグと一致しないtcpパケットを無視します。
次に、ノックを有効にします。ファイル/etc/ default / knockdをnanoで編集します:
nano /etc/default/knockd
変更:
START_KNOCKD=0
に
START_KNOCKD=1
この後、保存して終了します。複数のネットワークアダプターがある場合、またはシステムの起動時にノックが自動的に起動しない問題が発生した場合は、2行目のKNOCKD_OPTSのコメントを解除して修正することで、リッスンするネットワークインターフェースを手動で指定できます。
次に、手動でノックを開始します:
service knockd start
これによりデーモンが起動し、ポートのシーケンスをノックしてiptablesルールセットを変更できるようになります。
サーバーから切断されている場合、必要なパッケージをインストールしました。再接続するには、正しい順序で定義したポートをノックして、SSH接続を確立する必要があります。
ステップ3:ノックが実行されているときにサーバーにアクセスする
上記の手順を実行すると、ポートをノックせずにSSHサーバーに直接接続できなくなります。
サーバーからの応答はなく、SSHクライアントはタイムアウトするはずです。これは、SSHデーモンが現在iptablesによってブロックされているためです。自動的にタイムアウトしない場合は、ctrl-Cと入力してSSHの試行を終了します。
telnetクライアントでノッキングをテストします
Linuxユーザーの場合:aptを使用してtelnetパッケージをインストールします。
Windowsユーザーの場合:[プログラム]セクションにアクセスしてTelnetクライアントをインストールし、[Windowsの機能をオンまたはオフにする]を検索して、そこからTelnetクライアントを有効にします。
コマンドプロンプトに次のコマンドを入力します(ポートシーケンスをカスタムシーケンスに置き換えます):
telnet youripaddress 7000
telnet youripaddress 8000
telnet youripaddress 9000
これは構成に課せられた時間制限であるため、これらすべてを5秒で実行する必要があります。次に、SSH経由でサーバーに接続してみます。接続にアクセスできるようになります。
上記のコマンドを逆の順序で実行して、SSHサーバーを閉じます。
telnet youripaddress 9000
telnet youripaddress 8000
telnet youripaddress 7000
ポートノッキングの最良の部分は、秘密鍵認証と一緒に構成できることです。両方を構成した場合、ポートと秘密鍵の両方を知っていない限り、誰かがアクセスしたり接続したりする可能性はほとんどありません。