Python调用腾讯云轻量级服务器防火墙
如下段程序是一个网站维护程序,提供了以下功能选项:
允许本地IP访问远程服务器及网站:通过选择此功能,程序将允许指定的本地IP地址访问远程服务器及网站,并且可以指定开放的端口号。
仅允许本地IP访问远程服务器和网站:选择此功能后,程序将限制只有指定的本地IP地址可以访问远程服务器和网站,同时也可以指定开放的端口号。
禁止所有IP访问远程服务器和网站:通过选择此功能,程序将禁止所有IP地址访问远程服务器和网站,从而实现对外关闭访问的效果。
仅添加一个公网IP访问远程服务器:此功能可用于添加一个特定的公网IP地址访问远程服务器,同样也可以指定开放的端口号。
import json from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.lighthouse.v20200324 import lighthouse_client, models import requests def add_port(ip,open_port="22",status="ACCEPT"): try: # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 cred = credential.Credential("id","key") # 实例化一个http选项,可选的,没有特殊需求可以跳过 httpProfile = HttpProfile() httpProfile.endpoint = "lighthouse.tencentcloudapi.com" # 实例化一个client选项,可选的,没有特殊需求可以跳过 clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile # 实例化要请求产品的client对象,clientProfile是可选的 client = lighthouse_client.LighthouseClient(cred, "ap-guangzhou", clientProfile) # 实例化一个请求对象,每个接口都会对应一个request对象 req = models.ModifyFirewallRulesRequest() params = { "InstanceId": "lhins-od0galu1", "FirewallRules": [ { "Protocol": "TCP", "Port": open_port, "CidrBlock": ip, "Action": status, "FirewallRuleDescription": "服务器远程访问" } ] } req.from_json_string(json.dumps(params)) # 返回的resp是一个ModifyFirewallRulesResponse的实例,与请求对象对应 resp = client.ModifyFirewallRules(req) # 输出json格式的字符串回包 print(resp.to_json_string()) except TencentCloudSDKException as err: print(err) def add_https(ip="0.0.0.0/0",port ="443"): try: # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 cred = credential.Credential("id","key") # 实例化一个http选项,可选的,没有特殊需求可以跳过 httpProfile = HttpProfile() httpProfile.endpoint = "lighthouse.tencentcloudapi.com" # 实例化一个client选项,可选的,没有特殊需求可以跳过 clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile # 实例化要请求产品的client对象,clientProfile是可选的 client = lighthouse_client.LighthouseClient(cred, "ap-guangzhou", clientProfile) # 实例化一个请求对象,每个接口都会对应一个request对象 req = models.CreateFirewallRulesRequest() params = { "InstanceId": "lhins-od0galu1", "FirewallRules": [ { "Protocol": "TCP", "Port": port, "CidrBlock": ip, "Action": "ACCEPT", "FirewallRuleDescription": "网站访问" } ] } req.from_json_string(json.dumps(params)) # 返回的resp是一个CreateFirewallRulesResponse的实例,与请求对象对应 resp = client.CreateFirewallRules(req) # 输出json格式的字符串回包 print(resp.to_json_string()) except TencentCloudSDKException as err: print(err) def local_ip(): url = "https://www.ipuu.net/ipuu/user/getIP" response = requests.get(url) data = response.json() return data["data"] def caidan(): print("""欢迎进入网站维护程序 1 允许本地IP访问远程服务器及网站 2 仅允许本地IP访问远程服务器和网站 3 禁止所有IP访问远程服务器和网站 4 仅添加一个公网IP访问远程服务器 """) while True: caidan() try: num = int(input("请输入你选择的功能序号:")) if num == 1 : ip = input("请输入你要添加访问的IP地址,回车默认本地公网IP地址:") or local_ip() open_port = input("请输入要开放的TCP端口,默认22:") or "22" add_port(ip,open_port) add_https() elif num == 2 : ip = input("请输入你要添加访问的IP地址,回车默认本地公网IP地址:") or local_ip() open_port = input("请输入要开放的TCP端口,默认22:") or "22" add_port(ip,open_port) add_https(ip) elif num == 3 : add_port(local_ip(),open_port="22",status="DROP") elif num == 4: ip = input("请输入你要添加访问的IP地址,回车默认本地公网IP地址:") or local_ip() open_port = input("请输入要开放的TCP端口,默认22:") or "22" add_https(ip,open_port) else: print("功能选项不存在,退出程序,若需再次调式,请重新运行") exit() except ValueError: print("输入错误,请重新运行程序")