外部mysqlログイン試行をブロックする

外部mysqlログイン試行をブロックする

Mysqlデータベースへの外部ログインをどのように防ぐのですか?

つまり、自分のデータベースを操作できることを確認する唯一の方法は、SSHを使用して自分のコンピュータにログインし、root / sudoerで作業することです。

私のマシンはUbuntuサーバーアクション、HTTPSを使用するときに人々がポート80または443でログインしようとしないようにPHPmyadminを削除しました。しかし、人々はまだ似たようなソフトウェアを使ってログインしようとするかもしれません。MySQLワークベンチあるいは、同様のソフトウェアを使用している場合は、これが発生しないようにして、自分のOSのrootユーザー/sudoerだけを通過できるようにデータベースを実際にロックしたいと思いますmysql -u root -p

明確にするために、他のデータベースユーザーが自分のシステムまたは外部から自分のパスワードを使用してログインできないようにしたいと思います。このコンピュータを使用している人は私だけですが、root / sudoer以外に他のコンピュータユーザーがいますが、まだそれらを望んでいます。はMysqlにログインする方法ではなく、マシンの外部から誰もログインできないようにしたいと思います。言い換えれば、私以外の人がデータベースを運営したくありません。


3306以外に追加のポートをロックする必要があるようです。これは正しいですか?

次のリストからそのポートを削除できます/etc/csf/csf.conf

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,9000"

# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,9000"

注:PHP-FPM用にフィルタリングされていないポート9000があります。

答え1

mysqldリスナーだけがループバックを許可する

たとえば、/etc/mysql/my.cnf次の設定を追加または変更します。

bind-address 127.0.0.1

これにより、ローカルで実行されているプログラムだけがmysqlデータベースに接続できます。

答え2

MySQLへの外部アクセスをロックする正しい方法は、次のようにbind-addressディレクティブを使用することです。/etc/mysql.cnfデイジーで説明。有効なMySQLアカウントを持つ人がローカルにログインするのを効果的に防ぐことはできません(ただし、UNIXアカウントはMySQLアカウントを意味せず、異なります)。

あなたの質問の他の部分に答えます。

3306以外に追加のポートをロックする必要があるようです。これは正しいですか?

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,9000"

現在、ファイルcsf.confには使用する価値がほとんどないほど多くのサービスを許可するようにファイアウォールが設定されています。

  • 20 - FTPデータ(インターネットを介してFTPが許可されるのはなぜですか?)
  • 21 - FTPコマンド(上記と同じ)
  • 22 - SSH(大丈夫ですが、アカウントがしっかりとロックされていることを確認してください。無効にすることを検討してください。みんな非認証認証ログイン)
  • 25 - SMTPインバウンド(受信メールサーバーを実際に実行していますか?)
  • 53 - DNS(本当にパブリックDNSを運営していますか?)
  • 80 - HTTP(Webサーバーを実行していますか?)
  • 110 - POP3(古いプロトコル、メールサーバーを実行している場合は993でIMAPSを使用することを検討)
  • 143 - IMAP(セキュリティなし、993ではIMAPSを使用)
  • 443 - HTTPS(Webサーバーを実行していますか?)
  • 465 - SMTPS(実際にパブリックメールサーバーを実行していますか?)
  • 587 - SMTP-MSA(上記と同じ)
  • 993 - IMAPS(このサーバーから読み取るためにメールメッセージを受信した場合のみ)
  • 995 POP3S(安全ですがまだ使用されていません)
  • 9000 – 誰がわかりますか?

サービスを提供していない場合は許可しないでください。 IMAPSの場合は、POP3、IMAP、およびPOP3Sをすべてオフにする必要があります(利用可能な場合)。 SMTP*を要求するメールサーバーを実際に実行していない限り、SMTP*を提供しないでください。受け取るインターネットから送信された電子メール。 FTPを実行しないでください。代わりにファイル転送にSSHを使用してください。

他のシステムでMySQL Workbenchを使用したい場合でも、.netでフォワーダを実行してローカル接続のみを許可するようにMySQLを設定できますssh。私は複数のサーバーに対してこれを行います。

ssh -nf -L localhost:3306:localhost:3306 ADDRESS_OF_REMOTE_SYSTEM sleep 60
# Using Workbench, now connect to MySQL seemingly on the local machine

答え3

roaimaはこれまで間違いなく信頼できる答えを持っているので、sshを介してコマンドラインからMySQLを実行することについてあなたが知らないかもしれない非常に簡単な一連のことを追加します。

  1. 可能であれば、ルートログインを無効にし、パスワードログインを無効にし、キーが必要ですが、これはそれほど重要ではなく、常に便利ではないかもしれません。ただし、システムが設定されたら、可能であればSSHのルート機能を有効にしないでください。必ず必要な理由はないのでしないでください。ヒント:複雑なランダムなユーザー名を使用すると、推測するのがより困難になります。

  2. 私はほとんどの人がこれを認識していないと思います:sshシェルに何かを入力すると、その内容はシェル履歴に保存され、履歴を実行して検索できます。したがって、コマンド実行の一部としてmysqlパスワード行を使用すると、コマンドを実行したりmysqlに接続したりすると、履歴に書き込まれます。この問題を回避する非常に簡単な方法があります。コマンドラインに入力されたすべてのmysqlコマンドの前にスペースを入れます。それはすべてです。空白のため、シェルはコマンドを履歴に追加するときにコマンドを無視します。

  3. 次に、次を実行します。歴史 -c シェル履歴を消去します。これは少なくともBashではうまくいきますが、他のすべてについてはわかりません。

これは非常に単純で労力を必要とせず、シェル履歴と非常に推測しやすいSSHユーザー名という2つの一般的な弱点を排除します。

関連情報