特定のIPだけ許可したい時の判定方法
プライベートクラウドを運用していると、当然 DNS as a Serviceなんかも提供することになるのですが、OpenStackでは、Designateが第一選択肢として上がると思います。
そして、プライベートクラウドで外部IPを登録されてしまっては困るので、そういった部分は制限したいという要望がでてきます。
また、社内システムなんかでも特定のIPレンジだけ許可したいということもあるでしょう。そういったときにどうすべきか考えなくてはいけなかったので、考えてみました。
pythonのipaddressというモジュールを使います。
ipaddress.ip_networkで、networkを出します。 WHITE_LISTに登録された、IPレンジ、IPアドレスを一つずつチェックしていきます。 20.20.20.20みたいIP アドレスを直に指定すると、 20.20.20.20/32とされます。
そして、そのレンジに対象のIPがマッチするかどうかチェックしていくと簡単にマッチするかどうか判定できます。
deny list等を作るとレンジが大きすぎるため、IPをどうにか制限したいと言う場合はallow listとした方が 管理も簡単になります。
スクリプト
#/usr/bin/env python # coding: utf-8 import ipaddress ALLOW_LIST = ['10.0.0.0/8', '192.168.0.0/16', '20.20.20.20'] def checker(ip): for wl in ALLOW_LIST: ip_nw = ipaddress.ip_network(wl) if ip in ip_nw: result = True break else: result = False return result if __name__ == "__main__": ip = ipaddress.ip_address('10.10.10.10') print('result: ', checker(ip)) ip = ipaddress.ip_address('1.10.10.10') print('result: ', checker(ip)) ip = ipaddress.ip_address('192.168.0.5') print('result: ', checker(ip)) ip = ipaddress.ip_address('20.20.20.20') print('result: ', checker(ip))
実行結果
$ python ip_checket.py result: True result: False result: True result: True
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者:コーリー・アルソフ
- 発売日: 2018/02/24
- メディア: 単行本