0%

python脚本操作f5

F5图形化的web页面使操作门槛变得更低,但作为核心设备的F5显然无法在任何地点随意登录,本文将介绍使用bigsudspython模块实现自动化配置F5,以实现随时随地响应。

bigsuds是一款python第三方模块,可以到python官网获取
同类型的模块还有pycontrol,是比较老牌的python F5模块了,可以去f5官网获取
这里附赠另一个有趣的模块,使用ansible操作F5,我没有详细研究过。

安装

参照上面bigsuds的下载地址,下载后解压安装即可,建议无法轻松完成这一步骤的小伙伴就不要尝试操作f5这种核心设备了[苦笑]。

控制Data Group List

导入模块,初始化

1
2
import bigsuds
bigip = bigsuds.BIGIP(bigip_addr, user_name, user_pass)

bigip.LocalLB.Class来处理Class类型,主要方法:

  • 获取所有的address类型的Data Group List

  • 返回列表类型*

    1
    bigip.LocalLB.Class.get_address_class_list()
  • 获取所有的string类型的Data Group List

  • 返回列表类型*

    1
    bigip.LocalLB.Class.get_string_class_list()
  • 获取名称为deny_someone的Data Group List的元素列表
    Data Group List的名称必须包含在列表中

  • 返回列表类型*

    1
    2
    bigip.LocalLB.Class.get_address_class(['deny_someone'])
    bigip.LocalLB.Class.get_string_class(['deny_someone'])
  • 判断元素是否存在于某Data Group List列表中
    传递的参数同样需要是列表类型,格式类似这样[{'name': 'deny_someone', 'members': [{'netmask': '255.255.255.255', 'address': '101.200.144.197'}]}]

  • 返回列表类型*
    类似方法还有bigip.LocalLB.Class.find_string_class_member(...)

    1
    bigip.LocalLB.Class.find_address_class_member([{'name': 'deny_someone', 'members': [{'netmask': '255.255.255.255', 'address': '101.200.144.197'}]}])
  • 为名称为deny_someone的Data Group List增加元素,元素格式同上
    类似方法还有bigip.LocalLB.Class.add_string_class_member(...)

    1
    bigip.LocalLB.Class.add_address_class_member(...)
  • 删除名称为deny_someone的Data Group List的元素,元素格式同上
    类似方法还有bigip.LocalLB.Class.delete_string_class_member(...)

    1
    bigip.LocalLB.Class.delete_address_class_member(...)

控制snat

Data Group List类似,可以使用bigip.LocalLB.SNAT.get_list()来获取所有SNAT列表,使用bigip.LocalLB.SNAT.get_original_address([snat_name])获取ip列表。

添加元素到snat:

1
bigip.LocalLB.SNAT.add_original_address([snat_name], [[{'original_address': ip_address, 'wildmask': '255.255.255.255'}]])

从snat中移除ip:

1
bigip.LocalLB.SNAT.remove_original_address([snat], [[{'original_address': ip, 'wildmask': '255.255.255.255'}]])

总结

本篇主要针对IRules: Data Group List进行操作,可以将封IP、解封IP自动化。在实际使用过程中请务必增加访问白名单,防止误封了内网的地址。

附录:

官方文档看起来比较吃力,这里给出简单提要:

如官方文档连接https://devcentral.f5.com/wiki/iControl.LocalLB__SNAT__remove_original_address.ashx中提到LocalLB::SNAT::remove_original_address方法需要提供的参数有:

Parameter Type Description
snats String [] The list of SNAT objects.
addresses SNATOriginalAddress [] [] The list of original addresses to remove from the filters.

意思是说该方法需要提供两个参数,猜测表格中Type列给出的[]即标识外面嵌套一层列表,嗯,两个[]标识套两层,目前没有证据说明此猜测不正确。

remove_original_address方法应该为remove_original_address([snat], [[SNATOriginalAddress]])

snatString类型,我们通过get类的方法已经证明;SNATOriginalAddress是一个字典,在C语言里也就是struct

官方文档在描述SNATOriginalAddress的时候提到:

A struct that describes a SNAT original address filter.

Member Type Description
original_address String The original client address.
wildmask String The wildcard mask associated with the original address.

所以最后我们得到了bigip.LocalLB.SNAT.remove_original_address([snat], [[{'original_address': ip, 'wildmask': '255.255.255.255'}]])

官方文档:https://devcentral.f5.com/wiki/iControl.APIReference.ashx