OpenVPN&セキュリティ情報
2013-02-27
[OpenVPN TIPS] OpenVPNの死活監視を行うには
VPNサーバーに障害が発生したらすぐに知りたい、というニーズはありますよね。また、ファイアウォールなどを使用している場合に、疎通チェックが必要な場合もあります。もちろん、OpenVPNクライアントを実際にセットアップし、それを使ってチェックするのが確実ではありますが、チェック用の証明書などを発行したりというのもなかなか面倒です。
今回はOpenVPNサーバーが落ちているかどうか、つまり、稼働しているはずのOpenVPNのポートにアクセスできるかどうかをチェックする方法について取り上げましょう。
プロトコルとしてTCPを使用している場合
OpenVPNをTCP上で運用している場合は単純で、稼働しているはずのポートにTCPで接続(telnetなどでもOKです)してみて、接続できればOpenVPNサーバーは稼働中、接続できなければ停止中、と判断できます。これはシンプルで簡単ですね。
プロトコルとしてUDPを使用している場合
一方、UDPの場合はちょっと悩みどころです。残念ながらTCPのように簡単にはいきません。具体的な方法については serverfault.com の「How to check that an OpenVPN server is listening on a remote port without using OpenVPN client?」で取り上げられていますが、稼働しているはずのポートにUDPで接続し、「
0x38 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
」という9バイトのデータを送り込むと、もしOpenVPNが稼働していれば何らかのレスポンスがある、ということです。Pythonのコードで記述するとこんな感じになります。
#!/usr/bin/python import socket import sys from time import time senddata= "\x38\x01\x00\x00\x00\x00\x00\x00\x00" def checkserver(ip,port): print('Checking %s:%s' %(ip,port)) # <------ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) # in seconds time_start = time() sock.connect((ip, int(port))) print("Sending request...") # <------ sock.send(senddata) try: dta=sock.recv(100) time_end = time() ret = 0 print("OpenVPN Connection OK : %f sec response time." %(time_end - time_start)) except: ret = 2 print("OpenVPN Connection failed.") sock.close() sys.exit(ret) def main(): argvs = sys.argv argc = len(argvs) if(argc != 3): print 'Invalid args!' sys.exit(3) checkserver(argvs[1], argvs[2]) if __name__ == "__main__": main()
なお、上記のコードをちょっといじる(「
# <------
」というコメントのある行を削除するかコメントアウトする)と、Nagiosのプラグインとしても動作します。あくまでも無保証ですが、よろしければお使いください。もう一つ補足で。OpenVPNサーバーで管理コンソール(Management Console)を有効にしている場合は、そのポートにTCPで接続できるかどうかをチェックすることで、OpenVPNが稼働しているかを判断するという方法もあります。管理コンソールを使用すれば、単に稼働しているかのチェックだけではなく、現在接続しているクライアントのリストなどを取得することもできます。ただし、ファイアウォールなどで管理コンソールに接続できる接続元を制限したり、アクセス制限をきちんと設定しておかないととても危険ですので、その点はどうぞご注意を。
Image courtesy of digitalart / FreeDigitalPhotos.net
Profile
- 山崎 太郎 (Taro Yamazaki)
- プラムシステムズ株式会社所属。 主にVPN(OpenVPN)やセキュリティ関連技術、Webアプリケーションを手がけています。
Page Views
Popular Posts
-
「VPNっていろいろあるけど、OpenVPNのメリットって何?」 という疑問は多くの方が持たれますよね。この点は公式サイトなどにもいろいろ書かれているのですが、実際に使ってきたユーザー側としてメリットと思う部分をまとめてみました。
-
現在ダウンロードできるOpenVPNでは、今まで認証局の構築で使用していたeasy-rsaが含まれなくなっています。 OpenVPN.netのダウンロードページ にも Note that easy-rsa is no longer bundled with OpenVPN...
-
Jan Just Keijser氏の記事「 Optimizing performance on gigabit networks 」については こちら でも概要を取り上げましたが、記事全体にいろいろなヒントが含まれていますので、全文の日本語訳を掲載しています。意訳している部分も...
-
OpenVPNでは、接続してきたクライアントのVPNアドレスは動的に割り振られます(その際に割り振られる際のアドレス範囲はOpenVPNサーバー側設定ファイルに基づきます)。特定のVPNクライアントに特定のVPNアドレスを割り振りたい場合、OpenVPNでは以下の2つの方法で設定...
-
では、いよいよiPhone構成ユーティリティでVoDの設定をしてみましょう。あ、 前の記事 での準備はきちんとやっておいてくださいね!
-
前回 は2つのワンタイムパスワードの生成方法について取り上げました。今回はいよいよ実際の生成アルゴリズムを取り上げましょう。TOTPをベースに説明します(ただ、前回も解説したように、基本的なロジックはTOTPとHOTPで同じです)。 参考としてpythonのコードも併記してみま...
-
現時点においてはマニュアルやHowToにも記載されていない(ChangeLogにちょっとだけ出てきます)あまり知られていない機能なのですが、「設定ファイルで鍵ファイルや証明書ファイルのパスを記載する」という通常の方法とは別に、「鍵ファイルや証明書ファイル内のデータをそのまま設定フ...
-
OpenVPNはLinuxをはじめとした幅広いプラットフォームで動作実績があるのが特徴の一つです。 今回は、最近の電子工作ブームでも話題のシングルボードPC 3機種をOpenVPNサーバーとしてセットアップし、OpenVPNのVPNパフォーマンスを測定してみましょう。 ...
-
前回 はワンタイムパスワードの基本的な仕組みについて説明しました。サーバー側とクライアント側で、それぞれ共通のルールに基づいてパスワードを生成させる必要があることを取り上げましたが、今回は OATH が規定しているその生成ルールについて具体的に説明します。 ワンタ...
-
OpenVPNを使用している方ならよくご存知だと思いますが、通常OpenVPNでは証明書認証を使用します。証明書認証はID/パスワード認証に比較すると安全性が高いとされます(もちろん、秘密鍵の管理方法に大きく依存します)が、証明書認証の概念を理解しにくいユーザーが秘密鍵や証明...
© yamata::memo 2013 . Powered by Bootstrap , WebLyb