MySQL データベースを保持するシンプルな Linux サーバーを保護しますか?

MySQL データベースを保持するシンプルな Linux サーバーを保護しますか?

初心者の質問ですが、このサイトの多くの質問に目を通しましたが、単純でわかりやすい答えは見つかりませんでした。

MySQL データベースを保存するために、Ubuntu を実行する Linux サーバーをセットアップしています。

このサーバーは可能な限り安全であることが重要です。私の知る限り、主な懸念事項は DoS/DDoS 攻撃の受信とサーバー自体への不正アクセスです。

データベース サーバーは、ポート 3000 で、特定の IP (101.432.XX.XX) からの受信データのみを受信します。このサーバーがこの IP からの受信要求のみを受信できるようにし、サーバーが送信要求を行わないようにします。

知りたいこと:

  1. データベース サーバーが 101.432.XX.XX からのみ送信要求を行い、受信要求を受信するのを防ぐ最善の方法は何ですか? すべてのポート (例: 3000) を閉じると、これを実現するのに役立ちますか?

  2. セキュリティを強化できる Linux 環境への追加機能は他にありますか?

私は、phpmyadmin ポータル (MySQL データベースにリンク) を保護するために、アクセスを自分の個人 IP アドレスのみに制限するなど、非常に基本的な手順を実行しました。

データベース サーバーにアクセスするには、SSH キー (それ自体はパスワードで保護されています) が必要です。

答え1

101.432.xx IP への接続を制限するには、 から始めますiptables。ポート 3306 (デフォルトの mysql ポート) の基本的なファイアウォール設定は次のようになります。

# allow any localhost interface traffic
iptables -A INPUT -i lo -j ACCEPT
# allow any related traffic to existing connections
iptables -A INPUT -m state --state related,established -j ACCEPT
# only allow certain host to mysql
iptables -A INPUT -p tcp --dport 3306 -s 101.232.155.155 -j ACCEPT
# drop all traffic by default
iptables -P INPUT DROP
# oh, add your ssh source address to allow remote connections
iptables -I INPUT 3 -p tcp --dport 22 -s 203.203.203.203 -j ACCEPT

アウトバウンド (出力) トラフィックを制限することに関心がある場合は、OUTPUT チェーンでルールを使用しますが、これは複雑になります。出力フィルタリングには、サーバーが外部と通信するために使用する必要があるすべてのサービスに対するルールが含まれます。、、DNS(更新用)、管理者の電子メール、syslog トラフィックなど。出力フィルタリングの利点は、いったん「通常の」出力トラフィックを確立すると、異常に対するアラートが簡単に実現できることです。開始するための簡単な例:NTPHTTP/HTTPSSMTP

iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state related,established -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p tcp -d 111.222.33.44 --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -P OUTPUT DROP

実際にサーバーで更新を実行するまでは、無効にしておくことをお勧めします80,443。そうしないと、悪意のあるソフトウェアがこれらのポートの 1 つから出力され、気付かれません。出力に「許可された」宛先 IP アドレスを使用するのが、実際には最善の方法です (--dport 25上記の行のように)。

一般的に、サーバーの強化ははるかに複雑なプロセスです。接続を必要なものだけに制限する方法を考えることは、良いスタートです。

次の点も考慮してください。

  • サーバーの操作に必要のない余分なソフトウェアをすべて削除します
  • 実行中のサービスを制限する(netstat -topnavelu調査のため)
  • 最新のパッチをすべて適用する
  • 異常を監視する(iptables -A INPUT -j LOG、fail2banなど)
  • ipv6必要ない場合は削除する(ipv6.disable=1カーネルブート引数内)
  • sshd_configでとPubKeyAuthentication yesを使用するPasswordAuthentication no
  • pam経由のログインを制限する/etc/security/access.conf
  • 何らかの方法ですべてのネットトラフィックを暗号化する**
  • システムログをリモート syslog サーバーに保存する**
  • 定期的にシステムをスキャンして、マルウェア/不正な権限/SUIDファイルなどを検出する(/var/wwwなど)

世の中には優れたガイドがたくさんありますが、初心者にとっては圧倒されるかもしれません。次の 2 つは、基礎をうまくカバーしているようです。

https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps

https://www.rootusers.com/23-hardening-tips-to-secure-your-linux-server/

** 注意: MySQLトラフィックをスタンネル

答え2

NAT の背後にいると仮定すると、Mysql 設定でバインド アドレスを変更できます。

#Replace X's with actual IP address
bind-address=<internal-ip>
port=3000

これにより、MySql は単一のアドレスとポートのみをリッスンするようにバインドされます。

次に、101.432.XX.XX:3000 から internal-ip に変換する宛先 NAT ルールを追加します。

最後に、ファイアウォールにソース ポリシーを追加して、internal-ip からのすべてのパケットをドロップします。私が監視しているサーバーでも同様の設定を行っています。

Ubuntuサーバーを強化するための他のリソースへのリンクをいくつか紹介します。

http://bodhizazen.net/Tutorials/SSH_security- SSHの強化 https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps- MySQLの強化 これらがお役に立てば幸いです

関連情報