IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Pythonでネットワーク自動化をしよう

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第33回 ネットワーク自動化実践レシピ(5) (小澤昌樹) 2025年4月

はじめに

みなさん、こんにちは。

これまでのコラムでは、ネットワーク管理の効率化と自動化をテーマに、機器状態のモニタリング、構成変更の管理、ログ収集、セキュリティ設定の点検など、さまざまなレシピを紹介してきました。

今回はさらに一歩進めて、「セキュリティリスクの自動検出」と「脆弱性バージョンの自動判定」という視点から、自動化の手法を紹介します。ネットワークのセキュリティ対策は、ファイアウォールやアクセス制御の設定だけにとどまりません。日々進化する脅威に対応するためには、継続的な監視と迅速な対応が不可欠です。特に、複数のネットワーク機器を管理する環境では、手作業による点検や診断には限界があり、見落としや対応の遅れが大きなリスクを招く可能性があります。

こうした課題に対し、Pythonを活用することで、正確かつ継続的なセキュリティ監査を効率的に実現することが可能になります。

1.セキュリティリスクの自動検出

ネットワーク機器にSSHで接続し、複数のコマンドを自動実行することで、基本的なセキュリティリスクの有無をチェックできます。例えば、以下のようなチェック項目です。

  1. 不正なユーザーがログインしていないか(show users)
  2. Telnetが無効になっているか(show running-config)
  3. 未使用インターフェースが無効化されているか(show ip interface brief)
  4. ログに異常が記録されていないか(show logging)
  5. NTP設定が正しくされているか(show clock)

これらのチェック結果をExcelに記録することで、監査証跡として保存できたり、複数機器の横断的な管理ができたりします。


from netmiko import ConnectHandler
from openpyxl import Workbook
from datetime import datetime

# 対象となるネットワーク機器の設定 device = { ’device_type’: ’cisco_ios’, ’host’: ’192.168.1.1’, ’username’: ’admin’, ’password’: ’admin123’ }
# Excelファイルの作成とヘッダーの定義 wb = Workbook() ws = wb.active ws.title = "Security Audit" ws.append([’項目’, ’結果’, ’備考’])
try: # SSHで機器に接続 net_connect = ConnectHandler(**device)
# 1.不正なユーザーがログインしていないか(show users) users = net_connect.send_command("show users") ws.append([’show users’, ’完了’, ’内容を確認:’ + users.splitlines()[0]])
# 2.Telnetが無効になっているか(show running-config) config = net_connect.send_command("show running-config") telnet_enabled = "transport input telnet" in config ws.append([’Telnet無効確認’, ’NG’ if telnet_enabled else ’OK’, ’’])
# 3.未使用インターフェースが無効化されているか(show ip interface brief) intf = net_connect.send_command("show ip interface brief") ws.append([’show ip interface brief’, ’完了’, f’インターフェース数:{len(intf.splitlines())}’])
# 4.ログに異常が記録されていないか(show logging) logs = net_connect.send_command("show logging") suspicious = "Failed" in logs or "unauthorized" in logs ws.append([’show logging’, ’要注意’ if suspicious else ’OK’, ’’])
# 5.NTP設定が正しくされているか(show clock) clock = net_connect.send_command("show clock") ws.append([’show clock’, ’完了’, clock.strip()])
# 接続終了 net_connect.disconnect()
except Exception as e: # 接続エラーなどがあった場合はExcelに記録 ws.append([’接続失敗’, ’エラー’, str(e)])
# 結果をExcelファイルに保存(日時付きファイル名) timestamp = datetime.now().strftime("%Y%m%d_%H%M") wb.save(f"セキュリティ監査_{timestamp}.xlsx")
2.脆弱性バージョンの自動判定

セキュリティ対策の一環として、OSやファームウェアのバージョンが既知の脆弱性を含むかどうかをチェックすることも重要です。以下のように、「脆弱なバージョンのリスト」と照合することで、対象機器が安全な状態か判断できます。

  1. show versionコマンドでバージョン情報を取得
  2. あらかじめ用意した「脆弱なバージョンのリスト」と照合
  3. 該当する場合は「脆弱」と判断、そうでなければ「安全」

from netmiko import ConnectHandler

# 定義した脆弱なバージョンのリスト例 vulnerable_versions = { ’Cisco IOS’: [’15.2(1)T’, ’15.4(3)M2’], ’Yamaha RTX’: [’Rev.10.01.33’, ’Rev.11.00.00’] }
# 対象機器(Ciscoの場合) device = { ’device_type’: ’cisco_ios’, ’host’: ’192.168.1.1’, ’username’: ’admin’, ’password’: ’admin123’ }
try: # SSH接続 net_connect = ConnectHandler(**device) version_output = net_connect.send_command("show version") net_connect.disconnect()
# バージョン情報を抽出 for line in version_output.splitlines(): if "Version" in line: device_version = line.strip() break
# 脆弱バージョンと照合 is_vulnerable = any(v in device_version for v in vulnerable_versions[’Cisco IOS’])
if is_vulnerable: print("脆弱なバージョンが検出されました:", device_version) else: print("バージョンは安全です:", device_version)
except Exception as e: print("接続エラー:", str(e))
まとめ

今回は、ネットワーク機器に対するセキュリティ監査の自動化と、OSバージョンに関する脆弱性チェックの自動判定という2つの視点から、Pythonを活用した実践的な方法を紹介しました。このような仕組みを導入することで、手動による確認作業の負荷を軽減できるだけでなく、確認漏れや対応の遅れといったリスクを大幅に減らすことができます。特に、複数台のネットワーク機器を管理する現場においては、定期的に監査することをスクリプト化することで、継続的かつ一貫性のあるセキュリティ対策が実現できます。

次回は、これらの監査結果や状態情報をもとにしたダッシュボードの構築や、リアルタイムの可視化について紹介していきます。どうぞお楽しみに。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes