さくらのクラウドニュース

さくらのクラウドの最新情報や、開発に役立つ技術情報をお届けします。

おしらせ

起動サービスのポート使用状況調査についてのお願い

先日よりお知らせしておりますとおり、グローバルネットワークに公開されたサーバ上で起動される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の代替など。