
初心者の質問ですが、このサイトの多くの質問に目を通しましたが、単純でわかりやすい答えは見つかりませんでした。
MySQL データベースを保存するために、Ubuntu を実行する Linux サーバーをセットアップしています。
このサーバーは可能な限り安全であることが重要です。私の知る限り、主な懸念事項は DoS/DDoS 攻撃の受信とサーバー自体への不正アクセスです。
データベース サーバーは、ポート 3000 で、特定の IP (101.432.XX.XX) からの受信データのみを受信します。このサーバーがこの IP からの受信要求のみを受信できるようにし、サーバーが送信要求を行わないようにします。
知りたいこと:
データベース サーバーが 101.432.XX.XX からのみ送信要求を行い、受信要求を受信するのを防ぐ最善の方法は何ですか? すべてのポート (例: 3000) を閉じると、これを実現するのに役立ちますか?
セキュリティを強化できる 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 トラフィックなど。出力フィルタリングの利点は、いったん「通常の」出力トラフィックを確立すると、異常に対するアラートが簡単に実現できることです。開始するための簡単な例:NTP
HTTP/HTTPS
SMTP
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の強化 これらがお役に立てば幸いです