先日よりお知らせしておりますとおり、グローバルネットワークに公開されたサーバ上で起動されるmemcachedのポートを対象とした攻撃が頻発しています。
強固な認証やアクセス制御などのセキュリティ機能を持たず、グローバルネットワーク側への開放を想定していないサーバソフトウェアが外部より無制限にアクセス可能な状態となると、今回のような攻撃に晒され、お客様サーバ内に保存されたデータの流出のみならず、ネットワークトラフィックの増大や外部ホストへの攻撃により他のお客様へのご迷惑となる場合があります。
つきましては、インターネットからユーザが直接アクセスするサービス(HTTPの80番ポートやSMTPの25番ポートなど)の他に、主にローカルネットワークでの通信を想定したサービス(MySQLの3306番ポートやNFSの2049番ポートなど)のポートが開放されていないかをご確認いただき、各サーバプログラムに備わる制限機構の設定やファイアウォールなどによるアクセス制御の実施、また、意図せず開放されていた場合はサービスを停止するなどのご対応をお願いいたします。
お客様の設定不備により急激なトラフィック増大や他ホストへの攻撃が確認された場合、事前のご連絡無しにお客様サーバの停止やネットワーク遮断を実施させていただく場合があります。弊社設備の安定的な運用のため、何卒ご協力をお願いいたします。
参考1: CentOS7系環境での開放ポート確認方法
CentOS7系では、標準でインストールされているssコマンドを使用して確認が可能です。オプションを付与しないとUNIXドメインなど全てのソケットが表示されるので、TCP/UDPでListenしているポートのみを表示させる”-tul state listening”オプションを付与して実行します。
※実際の表示とは一部異なります。
[root@test ~]# ss -tul state listening Netid Recv-Q Send-Q Local Address:Port Peer Address:Port tcp 0 50 *:mysql *:* tcp 0 128 *:ssh *:* tcp 0 100 127.0.0.1:smtp *:* tcp 0 128 :::http :::* tcp 0 128 :::ssh :::* tcp 0 100 ::1:smtp :::* tcp 0 128 :::https :::*
意図せずポートが開放されていた場合、追加で”-p”オプションを付与することでそのポートを占有しているプロセス名とプロセスIDが表示されます。
[root@test ~]# ss -tulp state listening Netid Recv-Q Send-Q Local Address:Port Peer Address:Port tcp 0 50 *:mysql *:* users:(("mysqld",934,14)) tcp 0 128 *:ssh *:* users:(("sshd",712,3)) tcp 0 100 127.0.0.1:smtp *:* users:(("master",993,13)) tcp 0 128 :::http :::* users:(("httpd",27054,4),("httpd",17112,4),("httpd",17110,4)) tcp 0 128 :::ssh :::* users:(("sshd",712,4)) tcp 0 100 ::1:smtp :::* users:(("master",993,14)) tcp 0 128 :::https :::* users:(("httpd",27054,6),("httpd",17112,6),("httpd",17110,6))
表示されたプロセスIDをもとに不要なポートをListenしているプロセスを特定し、プロセスの停止やアクセス制限設定の再確認・追加などにより不正なアクセスが行われないよう対応を行ってください。また、不必要なサービスはsystemctlコマンドなどを使用し、サーバ起動時に自動的に起動しないように設定を行ってください。
※起動中のHTTPサービス(Apache)を停止し、ブート時に同時起動しないようにする設定例
# systemctl stop httpd # systemctl disable httpd
参考2: 「パケットフィルタ」機能による接続制限
さくらのクラウドでは「パケットフィルタ」機能により、作成したサーバのNICごとにパケットフィルタを設定することが可能です。これにより、サーバ内でのファイアウォール設定などを行わずに不要なポートへの外部からのアクセスを遮断することが可能です。
パケットフィルタの新規ルール作成時は「プリセット」を使用することにより、あらかじめ設定済みのルールを基にお客様環境に合わせた制限設定を盛り込んだパケットフィルタを簡単に作成することが可能です。
以下はプリセット「不要ポートのフィルタ(Linux用)」を選択し、25番(SMTP)・80番(HTTP)・110番(POP3)・68番(DHCPクライアント, UDP)の代表的なサービスのポート開放、22番(SSH)ポートへの任意のネットワーク帯域からのみの接続制限、123番(NTP)ポートへの任意のNTPサーバからのみの接続制限を行い、それ以外の他のポートへの接続は全て拒否することで意図しないポート開放を防ぐ場合の設定例です。
作成したパケットフィルタは、制限設定したいNICにパケットフィルタを適用することで有効となります。詳しくはドキュメント「パケットフィルタ」のページを参照ください。
参考3: 意図せず開放されていることの多いポート
何らかのプログラムをインストールし、デフォルトの設定のままで起動した場合によく開放されるポートの一覧です。ssコマンドなどによる調査でこれらのポートが意図せず開放されていた場合はグローバルネットワーク側に対するポート閉塞対応を推奨します。
8080 | HTTPでアクセス可能なGUIインタフェース、80番ポートの代替など。 |
8081 | HTTPでアクセス可能なGUIインタフェース、80番ポートの代替など。 |
8888 | プログラムの管理インタフェースへの接続用、SSHの代替など。 |
111 | SunRPC(NFS関連)ポート。RPCリフレクション攻撃対象ポート。 |
5353 | 53番(DNS)ポートの代替。mDNSリフレクション攻撃対象ポート。 |
27017 | MongoDBデフォルトポート。MySQL、memcached同様グローバル非公開推奨。 |
137 | NetBIOS。Sambaをインストールしたサーバ、WindowsOSで要注意。グローバル非公開推奨。 |
445 | Microsoft SMB。WindowsOSで要注意。グローバル非公開推奨。 |
23 | Telnet。プログラムの管理インタフェースへの接続用、SSHの代替など。 |