标签 ip 下的文章

routeros的默认nat尽量不要用masquerade

最近配置服务器安全策略遇到问题,一些内网主机ip被routeros nat了,服务端看到的都是routeros的IP地址。
仔细检查nat规则时,发现默认srcnat是所有接口masquerade,这在简单的共享上网路由器里没什么问题,因为只有一个公网出口,但是当路由器有多个出口时,比如有pptp接口,gre隧道接口等,连接两个子网的桥,由于配置了masquerade,会将两侧子网客户端ip 转换为桥接口的地址。
如192.168.1.1/24<-->10.0.0.1桥10.0.0.2<-->172.16.1.0/24中,192.168.1.100这个客户端要和172.16.1.100通信,由于所有接口的masquerade的存在,172.16.1.100看到的是10.0.0.2这个ip和自己通信,而192.168.1.100却不知道,另一192.168.1.200也要和172.16.1.100通信,172.16.1.100看到的同样是10.0.0.2。
由于nat优先级要高于路由转发,所以即使指定的静态路由没问题,ip也是被nat过的。而且nat性能消耗要高于路由转发。
解决这个问题其实很简单,就是换掉所有接口masquerade,具体到接口的srcnat或者只在公网接口上使用masquerade。所以不要偷懒,要不然迟早要还的。

阿里云负载均衡访问控制(黑名单)添加IP的脚本

python写的阿里云负载均衡访问控制添加IP的脚本,配合日志或报警执行自动添加ip。
需要先安装阿里云sdk

pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-slb

addaclentry.py

#!/usr/bin/env python
#coding=utf-8

import sys
import json
from aliyunsdkcore import client
from aliyunsdkslb.request.v20140515 import AddAccessControlListEntryRequest
from aliyunsdkslb.request.v20140515 import DescribeAccessControlListAttributeRequest

clt = client.AcsClient('AccessKeyId','secret','cn-beijing')


AclEntryIP = [{u'entry': u'', u'comment': u''}]

AclEntryIP[0]["entry"] = sys.argv[1]+'/32'

AclEntryIP = json.dumps(AclEntryIP)

request = AddAccessControlListEntryRequest.AddAccessControlListEntryRequest()
request.set_accept_format('json')

request.add_query_param('RegionId', 'cn-beijing')
request.add_query_param('AclEntrys', AclEntryIP)
request.add_query_param('AclId', 'acl-fdsafdsafdsafdsaf')


## 发起请求
response = clt.do_action_with_exception(request)


# 查询
## 设置参数
request = DescribeAccessControlListAttributeRequest.DescribeAccessControlListAttributeRequest()
request.set_accept_format('json')

request.add_query_param('RegionId', 'cn-beijing')
request.add_query_param('AclId', 'acl-fdsafdsafdsafdsaf')

## 发起请求
response = clt.do_action_with_exception(request)

## 输出结果
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print "黑名单列表:", response, '\n'

使用方法

python addaclentry.py 8.8.8.8