Linux のヒントとテクニック: サーバー、オープンアップ

自分自身や自分の愛する人に、SSH/RDP/その他、小規模な RTFM/spur を介して世界中のどこからでも自分のサーバーにアクセスできるようにする必要がある人向け。

VPN やその他の追加機能を使用せずに、手元のどのデバイスからでも実行できるようにする必要があります。

そのため、サーバーをあまり操作する必要がなくなります。

これに必要なのは、 ノックされた、まっすぐな腕と5分の作業。

「すべてはインターネット上にあります」 もちろん(たとえインターネット上であっても) ハブレ) しかし、具体的な実装となると、ここから始まります...

例として Fedora/CentOS を使用して練習しますが、それは問題ではありません。

この拍車は初心者と専門家の両方に適しているため、コメントはありますが、短くなります。

1. サーバー

  • ノックサーバーをインストールします。
    yum/dnf install knock-server

  • 設定します (たとえば ssh 上) - /etc/knockd.conf:

    [options]
        UseSyslog
        interface = enp1s0f0
    [SSHopen]
        sequence        = 33333,22222,11111
        seq_timeout     = 5
        tcpflags        = syn
        start_command   = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout     = 3600
        stop_command    = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    [SSHclose]
        sequence        = 11111,22222,33333
        seq_timeout     = 5
        tcpflags        = syn
        command         = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

    「開口部」部分は1時間後に自動で閉まるように設定されています。 あなたは、決して知らない...

  • /etc/sysconfig/iptables:

    ...
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT
    ...

  • フォワード:

    service iptables restart
    service knockd start

  • 内部で回転している仮想 Windows Server に RDP を追加できます (/etc/knockd.conf; インターフェイス名は好みに合わせて置き換えてください)。

    [RDPopen]
        sequence        = 44444,33333,22222
        seq_timeout     = 5
        tcpflags        = syn
        start_command   = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
        cmd_timeout     = 3600
        stop_command    = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
    [RDPclose]
        sequence        = 22222,33333,44444
        seq_timeout     = 5
        tcpflags        = syn
        command         = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2

    次のコマンドを使用して、サーバー上のクライアントからのすべてのキックを追跡します。 iptables -S.

2. 熊手ガイド

ノックド.conf:

マナにもすべてが含まれていますが(これは不正確です)、ノックはメッセージにかなりケチな友達なので、十分に注意する必要があります。

  • バージョン
    Fedora/CentOS リポジトリでは、今日の最新のノックアウト値は 0.63 です。 UDP を必要とする人は、0.70 パケットを探してください。
  • インタフェース
    デフォルトの Fedora/CentOS 構成では、この行は ノー。 手で加えないとうまくいきません。
  • タイムアウト
    ここでは好みに応じて選択できます。 クライアントにはすべての作業に十分な時間が必要です。そうするとポート スキャナー ボットが故障します (146% がスキャンします)。
  • 開始/停止指令。
    コマンドが XNUMX つの場合は command、XNUMX つの場合は start_command+stop_command です。
    間違った場合、ノックは沈黙したままになりますが、機能しません。
  • プロト
    理論的には、UDP を使用できます。 実際に、tcp と udp を混合してみたところ、バリ島のビーチからのクライアントは XNUMX 回目だけゲートを開けることができました。 TCP は必要なときに登場しましたが、UDP は事実ではないからです。 しかし、これも好みの問題です。
  • シーケンス
    暗黙のレーキとは、シーケンスが交差してはならないということです...何と言うか...

たとえば、これ:

open: 11111,22222,33333
close: 22222,11111,33333

投稿者: キック 11111 開いた 22222 で次のキックを待ちます。ただし、この (22222) キックの後、動作し始めます。 閉じる そしてすべてが壊れてしまいます。 これはクライアントの遅延にも依存します。 そのようなもの ©.

iptables

/etc/sysconfig/iptables にある場合、これは次のようになります。

*nat
:PREROUTING ACCEPT [0:0]

特に気にする必要はありませんので、以下に示します。

*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited

それは干渉します。

kokd は INPUT チェーンの最後にルールを追加するため、reject が返されます。

そして、このリジェクトをオフにするということは、すべての風に対して車を開くことを意味します。

iptables で迷子にならないようにするには、何を前に挿入するか (次のように) 人々 提案)もっと簡単にしましょう:

  • デフォルト CentOS/Fedora 上 最初の ルール(「禁止されていないものは許可される」)は、その反対のルールに置き換えられます。
  • そして最後のルールを削除します。

結果は次のようになります。

*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited

もちろん、DROP の代わりに REJECT を実行することもできますが、DROP を使用すると、ボットの生活がより楽しくなります。

3. クライアント

この場所は、(私の観点からは)最も興味深い場所です。どのビーチからでも、どのデバイスからでも作業する必要があるからです。

原則として、多数のクライアントがリストされています。 オンライン プロジェクトですが、これは同じシリーズの「すべてがインターネット上にあります」です。 したがって、現時点で私の手元で機能しているものをここにリストします。

クライアントを選択するときは、パケット間の遅延オプションをサポートしていることを確認する必要があります。 はい、ビーチによって違いがあり、100 メガビットであっても、パケットが特定の場所から適切な順序で適切なタイミングで到着することは保証されません。

はい、クライアントをセットアップするときは、遅延を自分で選択する必要があります。 タイムアウトが長すぎるとボットが攻撃し、短すぎるとクライアントに時間がなくなります。 遅延が大きすぎると、クライアントが間に合わないか、愚か者同士の衝突(「レーキ」を参照)が発生し、遅延が少なすぎると、パケットがインターネット上で失われます。

タイムアウト = 5 秒、遅延 = 100..500 ミリ秒の場合、完全に機能するオプションです。

Windows

どんなに面白く聞こえるとしても、このプラットフォームにとって明らかなクライアントを Google で検索するのは非常に簡単ではありません。 CLI が遅延、TCP をサポートし、弓を使用しないようにします。

オプションとして試すことができます これはここです。 どうやら私のGoogleはケーキではないようです。

Linux

ここでは簡単です:

dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333

MacOSの

最も簡単な方法は、homebrew からポートをインストールすることです。
brew install knock
次のようなコマンドに必要なバッチ ファイルを描画します。

#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333

iOS

有効なオプションは KnockOnD (ストアから無料) です。

Android

「ポートをノック」 宣伝ではありませんが、それだけで効果があります。 そして開発者は非常に反応が良いです。

もちろん、ハブレに対する PS の値下げは、いつか彼に神のご加護がありますように...

UPD1:ありがとう 良い人に 見つかった 作業中のクライアント Windows の下で。
UPD2:もう一つ хорошийчеловек 新しいルールを iptables の最後に置くことが必ずしも有益であるとは限らないことを思い出しました。 しかし、それは状況によります。

出所: habr.com

コメントを追加します