Ubuntuサーバー第7章リモート管理

序文#

私のメモは元さんの第2章から直接書かれています:-D、一部の友人はターミナルをリンクする方法を理解していないかもしれません。現在、私のローカルはVmware仮想マシン+ XshellSSHリンクです。 SSHに関しては、リンクとしてだけでなく、それ以上にも使用されます。Metasploitを使用したCSに関する前の章では、SSHトンネルの知識も使用しました。リモート接続は、SSHによるリモート接続方法だけではありません。

実稼働環境のサーバーのほとんどは、レンタルか自作かにかかわらず、専用のコンピュータールームに配置されます。この環境では、ノイズ、電磁、酸素、湿度、および温度は、長期的な人間の活動には適していません。事故などで関係のない人がビジネスサーバーに連絡してサーバーがダウンするのを防ぐために、サーバーはコンピューター室に配置されています。

理想的には、オフィスの保守スタッフは、管理と構成のためにサーバーにリモートで接続します。主流のオペレーティングシステムはすべて、リモート管理テクノロジ(Windows、Linux、Mac OS :-D)をサポートしています。使用しているUbuntuサーバーにはグラフィカルインターフェイスがないため、Windowsのようにグラフィカルインターフェイスからリモートで管理することはできませんが、コマンドラインからのみリモートで管理できます。

Telnet

1つ目は古代のコマンドラインリモート管理ツールであるTelnetです。私はWikipediaをチェックし、1969年に開発されました。 Telnetのいくつかの機能:

Telntのプレーンテキスト送信機能のため、推奨されるツールはSSHです。非常に古いものですが、一部のシナリオではまだ使用しています。たとえば、ルーターやスイッチに触れるときにTelnetをよく使用します。 Telnetを使用して、単純なポート検出を実行します。例: telnet smtp.163.com25、リンクが成功した場合は、関連するサービスが開かれていることを意味します。

sudo apt install telnetd #telnetサービスをインストールし、インストール後に自動的に実行します
systemctl status inetd.service #ビューサービスはされています"active (running)"状態
sudo netstat -pantu |grep 23 #ポートを確認し、ポートも開いてリッスンしていることを確認します
vim /etc/issue.net #Telnetサービスのバナー情報を変更できます

クライアントは telnet IP(server IP)を使用し、アカウント名とパスワードを入力してから、リモートでサーバーに接続します。

SSH

SSHが推奨されることを先に述べました。ここで説明しているSSHはOpenSSHを指します。 OpenSSHは、SSH(SecureShell)プロトコルの無料のオープンソース実装です。OoenSSHは、SSHだけでなく、sftp、scpなど(ftp、rcpに似ていますが、より安全です)を備えたツールスイートです。現在、OpenBSDのサブプロジェクトです。 Ubuntuは、Openssh-serverとOpenssh-clientをデフォルトでインストールします。使用できない場合は、 apt installコマンドを使用してインストールします。デフォルトではポート22が使用されます(変更可能)。

sudo apt install openssh-server #インストール
systemctl status sshd.service #サービスステータスを確認する
vim /etc/ssh/sshd_config #サーバー構成ファイル
vim /etc/ssh/ssh_config #クライアントプロファイルのデフォルトプロファイル
vim ~/.ssh/config #ユーザープロファイル
ssh IP #別のマシン端末を開き、SSH接続を使用して、ユーザー名を入力する必要がないことを確認します。SSHはデフォルトでローカルユーザー名を使用します
ssh -l user IP

SSHプロトコルには、SSH1とSSH2の2つのメジャーバージョンがあります。最新のすべてのLinuディストリビューションでは、OpenSSHサーバーではSSH1がデフォルトで無効になっています。

vim /etc/ssh/sshd_config #サーバー側の構成ファイルを開き、以下のいくつかの重要なパラメーターについて説明します
# Banner none #デフォルトのコメント、変更可能"/etc/issue.net"、Telnetと同じ、再起動して有効にします
# Port 22 #デフォルトは22で、セキュリティを向上させるために不明なポートに変更されています
# PubkeyAuthentication yes #デフォルトのコメントではキーログインは有効になっておらず、特定の構成は記事の最後にある参照リンクを参照しています。一般的な原則は、公開鍵と秘密鍵のペアを生成することです。サーバーは公開鍵を使用してデータを暗号化し、クライアントは秘密鍵を使用してデータを復号化し、データを返してIDを確認します。
# ListenAddress 0.0.0.0 #すべてのネットワークカードのアドレスはデフォルトで監視されており、必要に応じて指定されたネットワークカードのアドレスに変更できます。
# PermitRootLogin prohibit-password #セキュリティ上の理由から、ルートアカウントのログインはデフォルトで無効になっています
# PasswordAuthentication yes #パスワード認証の使用、キー認証の必須使用を禁止できます

SSHツール###

SCPは、LinxシステムでのSSHログインに基づく安全なリモートファイル転送コマンドです。

scp local_file remote_username@remote_ip:remote_folder #ローカルからリモートにコピー
scp a.txt IP: #デフォルトではローカルアカウントが使用され、デフォルトのディレクトリはメインディレクトリです
scp -rv local_folder remote_ip:remote_folder #ディレクトリ全体を再帰的にコピーし、出力を詳細に表示します
scp remote_username@remote_ip:remote_folder  local_file #パラメータ交換は、リモートからローカルへのダウンロードになります
scp [email protected]:/tmp/file.txt . #ファイルをローカルにコピーする

scpについては以上です。次に、別のファイル転送ツールであるsftpを紹介します。SFTPはSSHとFTPの組み合わせです。SFTPはFTPに基づいてデータを暗号化します。

sftp remote_username@remote_ip #SSHに基づいているため、リンクパラメータはSSHと同じです。
sftp>  #検証を成功させるためのパスワードを入力すると、sftpシェルが取得されます
sftp>get file #ファイルを取得して、ファイルをローカルにダウンロードします

暗号化と復号化

次のツールは暗号化と復号化に関するものです。暗号化と復号化の中核はアルゴリズムです。アルゴリズムは、対称と非対称の2つのカテゴリに分類されます。対称暗号化アルゴリズムはよく理解されており、暗号化と復号化の両端で同じキーが使用されます。対称とは異なり、非対称暗号化アルゴリズムには、公開キー(publickey)と秘密キー(privatekey)の2つのキーが必要です。

**公開鍵と秘密鍵はペアです。公開鍵を使用してデータを暗号化する場合、対応する秘密鍵のみを復号化に使用できます。秘密鍵を使用してデータを暗号化する場合、対応する公開鍵のみを使用できます。復号化します。暗号化と復号化は2つの異なるキーを使用するため、このアルゴリズムは非対称暗号化アルゴリズムと呼ばれます。 ****機密情報交換を実現するための非対称暗号化アルゴリズムの基本的なプロセスは次のとおりです。パーティAはキーのペアを生成し、そのうちの1つを他のパーティにパブリックキーとして公開します。パブリックキーを取得するパーティBはキーを使用します。機密情報は暗号化されてからパーティAに送信されます。次に、パーティAは、自身が保存した別の秘密鍵を使用して、暗号化された情報を復号化します。パーティAは、その秘密鍵を使用して、その公開鍵で暗号化された情報を復号化することしかできません。 ****

また、主な説明に対するZhihuの答えは非常に適切だと思います

開いたロックを渡して、それを使用して重要なものをロックし、私に送り返します。私は鍵を保管し、誰にも渡さない。
Lock = public key; key = private key——Irvine

ssh-keygen -t rsa -b 4069 #ssh-keygenは、OpenSSHのキー生成ツールです。ここでは、RSAアルゴリズムを使用して4069の長さのキーペアを生成することを指定しています。生成プロセス中に秘密キーのパスワードを設定して、2つのファイルIDを生成できます。_rsa(秘密鍵)、id_rsa.pub(公開鍵)。
ssh-keygen -p -f ~/.ssh/id_rsa #古いパスワードを入力してください。秘密鍵のパスワードを変更できます。権限に注意してください。

公開鍵をサーバーにコピーします

ssh-copy-id remote_username@remote_ip #公開鍵ファイルをSSHサーバーにコピーします
ssh-copy-id -i ~/.ssh/id_rsa.pub remote_username@remote_ip #ファイルコピーを指定する,上記と同じように、サーバーは.新しい公開鍵ファイルがsshの下に作成されます"authorized_keys"
chmod 400~/.ssh/id_rsa #SSHクライアントの公開キー権限を所有者のみが読み取り専用に設定することをお勧めします
chmod 600~/.ssh/authorized_keys #SSHサーバーを所有者に設定して読み取りと書き込みのみを行うことをお勧めします
ssh remote_username@remote_ip #通常のSSHリンクと同じですが、以下に秘密鍵のパスワードが必要です。秘密鍵のパスワードが設定されていない場合、リンクは成功します。
Enter passphrase for key '/home/xiaowu/.ssh/id_rsa': #リンクするために正常に確認するためのパスワードを入力してください

まれですが非常に便利なコマンドがいくつかあります

SSH ssh root @ 10.10.10.131を介してwuhash.comにpingを実行すると、このコマンドはSSHを介してサーバーsehllにbashコマンドを入力して実行し、出力結果をローカル端末に返します。以下のコマンドは柔軟に調整できます。

企業の帯域幅が非常に高く、大量のアップロード帯域幅が必要な企業では、このようなシナリオがよく発生します。現時点では、他の事業の運営に影響を与えないようにアップロード速度を制限しています。

tar -cj  local_folder | remote_username@remote_ip 'tar -xj' #パイプラインを使用してカタログの圧縮と転送を同時に行い、転送後に解凍します
sudo apt install cstream pv #2つのツールをインストールして、速度制限とリアルタイム更新を実現します
tar -cj  local_folder | pv | cstream -t 200k | remote_username@remote_ip 'tar -xj' #同上
du -hs dirname #以前に導入されたことがない、ディレクトリを表示するコマンド

ここでは2台の仮想マシンが必要です。私はKaliLinuxとUbuntuServerを使用しています。

# カリで実行
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host  #コマンドフォーマット,詳細な手順は、記事の最後にあるリンクを参照してください
ssh -fN -L 2000:localhost:23 [email protected] #10.10.10.130はUbuntuサーバーです,Telnetサービスを開始しました
netstat -pantu |grep 2000 #ポートが開いているかどうかを確認します
telnet 127.0.0.12000 #ユーザー名とパスワードを入力すると、Ubntuサーバーにログインしていることがわかります
kill -9 PID #終了プロセス

SSHトンネルは、リモートポート23をローカル2000ポートにマップするために使用されます。ローカル200ポートは、リモート23ポートに相当します。

ssh-fN-L listen_port:B_Host:B_Host user @ C_Host、SSHトンネルを使用してローカルポートにアクセスし、BホストのBポートから応答を取得します。Bホストの観点からは、それにアクセスするのはCホストです。セキュリティにはSSHトンネルのアプリケーションが他にもあるので、ここでは説明しません。

ここで言及するだけで、 curl wget telnet sshを使用して、ポートの開放を大まかに検出できます。

ローカルファイルマウントは以前に導入されましたが、SSHもそれを行うことができ、リモートマウントです。

sshfs user @ hostname:path mout_point:ここで、userはリモートホストのユーザー名、hostnameはリモートホストのIPアドレス、pathはローカルにマウントするリモートホスト上のディレクトリ、mount_pointはローカルにマウントするディレクトリです。

umount mout_point #ルートユーザーはマウントをキャンセルします。通常は追加する必要があります'sudo'
vim /etc/fstab #自動的にマウントできるfstabファイルに書き込む

SSHセキュリティ##

基本的なSSHセッションには、上記の手法で十分です。いくつかのSSHセッションはほとんど覚えられませんが、10または20のSSHセッションがある場合はどうでしょうか。 SSHは、SSHユーザー構成ファイルconfig(〜/ .ssh / config、存在しない場合は新しいファイルを作成)を使用してsshセッションを管理することにより、この問題を解決するための洗練された柔軟な方法を提供します。形式は次のとおりです( man ssh_configから構文を表示できます)

ホストエイリアス
 HostNameホスト名
 ポートポート
 ユーザーのユーザー名
 IdentityFileキーファイルへのパス
 IDはSSHキーログインのみを受け入れます
 PreferredAuthentications公開鍵認証の必須使用

sshエイリアスを使用してリンクします

SSH爆発保護

そのようなノートブックを見たことがあるかどうかはわかりません。デジタルダイヤル付きのノートブックは、ギアを正しい番号に回すと開くことができます。限られた数の番号でパスワードを解読しようとしたことがありますか?パスワードクラッキングについても同じことが言えます。すべてのパスワードスペースを試し続ける限り、パスワードは最終的にクラッキングされます。 SSHのユーザー名を取得したとすると、パスワードの複雑さに応じて、それを解読して許可を得ることができます。このため、セキュリティを確保するための構成が必要です。 Fail2banが推奨される方法です。Fail2banはSSHだけでなく、他のサービスにも適用できます。 fail2banの原理は非常に単純で、SSHリンクのログを読み取り、統計を実行し、システムのiptablesを呼び出してTCP / IPリンクを拒否します。

sudo vim /etc/fail2ban/jail.conf #構成ファイル、fail2ban更新はこのファイルを上書きします
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local #fail2banの刑務所.ローカル優先度は刑務所よりも大きい.conf
sudo vim /etc/fail2ban/jail.local #構成ファイルの変更
ignoreip =127.0.0.1/8::1 #fail2ban戦略の影響を受けない信頼できるIPを定義します
bantime  = 10m #試行回数を超えて試行を禁止する時間を設定できます"-1"恒久的な禁止
findtime =1 #ログ間隔を確認する
marretry =5 #許可された試行回数
# 上記のパラメータをJAILSで記述して、単一のサービスを定義できます。
ACTIONS #次のパラメータは、ルールがトリガーされた後のいくつかの動作を定義します
destemail = root@localhost #最大試行回数をトリガーした後の電子メール通知
banaction = iptables-multiport #iptablesを呼び出して無効にします

JAILS #単一サービスの構成動作を定義します。JAILS構成はグローバルよりも優先されます
SSH Servers #設定はたくさんあるので、ここでは投稿しません。以下は特定のSSH保護対策です
enabled =true #オープン状態
filter = sshd #ログでキーワードを定義する
sudo systemctl restart fail2ban.service #最後に、変更の構成が完了しました。サービスを再起動して有効にします
sudo fail2ban-client status #刑務所の数とステータスを確認する
sudo fail2ban-client status sshd #あなたはより詳細な情報を見ることができます

sudo iptables -S #ファイアウォールルールを表示する
sudo iptables -L -n #ファイアウォールルールを表示する

sudo 

tail -f /var/log/auth.log #ログイン認証ログを表示する

sudo fail2ban-client set sshd unbanip {IP} #IPの禁止を手動で解除します。その背後にある原則は、iptablesのルールを削除することです。
sudo iptables -D f2b-sshd -s 10.10.10.1-j REJECT #コマンド機能は、iptablesのルールを削除することです
# 場合によっては、IP禁止が解除された後、サービスが再起動し、再起動時に読み取ります'var/log/auth.log'、禁止時間中(bantime)IPは再び禁止されます

VNC

Linuxの黎明期には、キャラクターインターフェースによってもたらされる学習コストが多くの人々を説得し、グラフィックスへの要求はますます高まっていました。グラフィカルインターフェイスによってもたらされる使いやすさと人間化は非常に便利です。 Linuxには、文字インターフェイスを備えたリモート管理ツールに加えて、グラフィカルインターフェイスを備えたリモート管理ツールもあります。たとえば、最も広いアプリケーション範囲(接触しているCisco ASA、既知のRaspberry Pi、Win10もVNCサーバーで構成できます)VNC(仮想ネットワークコンピューティング)。グラフィカルリモート管理の前提は、サーバーにグラフィカル環境があり、UbuntuServerがデフォルトでグラフィカル環境をインストールしないことです。

sudo apt install gnome-core xfce4 xfce4-goodies #グラフィカル環境をインストールすると、再起動後にグラフィカル環境が表示されます
sudo apt install tightvncserver #VNCサーバーをインストールします
vncserver #パスワードの入力を求められます。このパスワードは接続パスワードです。表示のみが可能なパスワードを設定すると同時に、xstartupファイルを生成することもできます。
netstat -pantu | grep 590 #入力が完了すると、5901を起点とするポートが見つかります。
vncserver kill :1 #ポートの後の番号はインスタンス番号と同じです

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

vim ~/.vnc/xstartup 
#! /bin/bash
xrdp $HOME/.Sresources
startxfce4 &

chmod +x ~/.vnc/xstartup
vncserver #実行は戻りの例を見ることができます
netstat -pantu | grep 590 #ポートを確認してください

# VNCビューアーを使用して正常にテストし、VNCクライアントを使用して、IPアドレスを入力します+ポート、パスワード認証を入力すると、正常に接続できます。
# 複数のユーザーが必要な場合は、複数のユーザーを作成することをお勧めします。"su user"新しく作成したユーザーホームディレクトリに切り替えて、構成ファイルを編集し、インスタンスを起動します
# VNC自体には暗号化メカニズムがありますが、長時間開くことはお勧めしません。以前のSSHトンネルを使用してセキュリティを向上させることができます。

PUPPET

Puppetは、システム管理者がインフラストラクチャのライフサイクル全体(プロビジョニング、構成、オーケストレーション、レポート)を管理するのに役立つIPインフラストラクチャ自動化管理ツールです。 puppetに基づいて、反復タスクを自動化し、重要なアプリケーションを迅速に展開し、ローカルまたはクラウドで変更をアクティブに管理し、アーキテクチャの規模を迅速に拡張できます。 「ruby」言語の開発に基づいて、GPL契約(2.7.0-)に従います。 -キールアクリジン

セットアップするには、同じサービスを展開する必要がある100台のサーバーがあります。これまでのところ、スクリプトは導入されていません。スクリプトがあっても、手動で実行することはできません。 PUPPETはここでは深くは入りません、ただそれを理解してください。 2台のUbuntuサーバー仮想マシンを準備します(VMのリンクされたクローンは非常に便利です)。

sudo hostnamectl set-hostname puppet #再起動して有効にします
sudo hostnamectl set-hostname client

sudo apt install puppetmaster
sudo apt install puppet

sudo vim /etc/hosts #クライアントとサーバーのIPを手動でポイントし、次の章でDNSレコードを紹介します
10.10.10.131 puppet.lab.com puppet
10.10.10.130 client.lab.com client

sudo mkdir -p  /modules/apache2/manifests/ #サーバ
sudo vim /etc/apache2/manifests/init.pp
classapache2{package{'apache2':
  ensure => installed,}
 service {'apache2':
  ensure =>true,
  enable =>true,
  require => Package['apache2'],}} 
sudo vim /etc/puppet/manifests/site.pp #サーバ
 node 'clent.lab.com'{
  include apache2
    }
sudo vim /etc/default/puppet #クライアント
 START=yes
systemctl start puppet.service

PUPPTのクライアントとサーバーは、証明書を使用して通信を暗号化します。

sudo puppet agent--fingerprint #クライアント証明書署名要求テスト
sudo puppet agent--test 

sudo puppet cert list #サーバーは署名の表示を要求します
sudo puppet cert sign clent.lab.com

sudo systemctrl statys puppet.service #サービスステータスを確認する
cat /var/log/syslog #ログステータス情報を表示する

PUTTENについてはまだまだあります。元さんの時間とエネルギーのおかげで、あまり紹介しません。PUTTENには高度な使い方がたくさんあり、コースとして学ぶのに十分です。自動化された操作および保守ツールは、将来の開発のトレンドでなければならないと考えられます。

ゆうさんは車に乗れません

参照リンク

Linuxscpコマンド

Xshell構成sshパスワードなしログイン-公開キー(公開キー)

Linuxはすべての質問をします:LinuxでSSHのバージョンを確認する方法

詳細なsshd_config構成

グラフィカルSSHの原則

対称暗号化と非対称暗号化の概要と違い

非対称暗号化をわかりやすい言葉で説明するにはどうすればよいですか?

SSHトンネルとポート転送およびイントラネットの浸透

sshトンネルの魔法の効果

sshユーザー構成ファイルconfigを使用してsshセッションを管理します

自動化された操作および保守ツール-人形の詳細(1)

Recommended Posts

Ubuntuサーバー第7章リモート管理
Ubuntuサーバー第3章パッケージ管理
Ubuntuサーバー第8章DNSサービス
リモートUbuntuサーバーに接続されたMySQL
Ubuntuサーバー第2章コマンドラインの基本
Ubuntuパッケージ管理
Ubuntussh-keygenリモートログイン
ubuntuリモート接続22ポート
Ubuntu19.1へのリモート接続
ubuntuインストールnginxサーバー
[Linux] Sambaサーバーのビルド(ubuntu16.04)
Ubuntu Server14.04にOpenSSL1.0.2をインストールします
ubuntu16.04ビルドpptpdV **サーバー
ubuntuサーバーでtomcatを構成する
サーバーアップグレードUbuntu20.04LTSレコード
ubuntu16.10はsshリモートアクセスをサポートします
Ubuntu12.04クロスコンパイルサーバーを構築する
サーバーアップグレードUbuntu20.04LTSレコード
UbuntuサーバーはJavaWebサーバーを構築します
Ubuntuはsquidプロキシサーバーを展開します
Ubuntu16.04サーバーの初期設定
Ubuntu16.04ビルドGitLabサーバーチュートリアル
ubuntuでNginx-RTMPライブサーバーを構築する
ChefサーバーワークステーションをUbuntu18.04にインストールします
Ubuntu16.04ビルドphp5.6Webサーバー環境
kvm仮想化を使用してUbuntu18.04サーバーをインストールします
ubuntuでファイルサーバーを構築する
サーバーの初期設定にはUbuntu16.04を使用します
Ubuntu16.4デスクトップへのWindowsリモート接続
Ubuntu Server12.4.0にOracle11gR2をインストールします