python iptables库

python是很强大,其中很大一部分的原因是python具有丰富的库支撑,比如我们想实现一个自己控制防火墙的功能来完成某些特定的功能需要,我们就可以使用python的iptables库来很轻松的实现对iptables规则的管理。具体的文档可以参考如下:python iptables
下面来看一个具体的列子吧,基于rpc实现了一个对外接口,可以远程添加iptables规则,另外还有一个周期性调度的功能,定期检测新增的规则是否还存在,不存在则添加。

import iptc
import time
import mylogger
from SimpleXMLRPCServer import SimpleXMLRPCServer
from apscheduler.scheduler import Scheduler

vmrouters = set()
logger = mylogger.Logger(logname='myiptc.log', logger='myiptc').getlog()

def task():
    """This is rolling task and execute every 5 minute,
    and check the rule is exist, if not exsit the task will add the rule"""
    logger.debug('rolling task')
    for mac in vmrouters:
        try:
            istarget = insert(mac)
            if (istarget == 0):
                vmrouters.remove(mac)
                logger.debug('rolling task remove not match target ' + mac)
        except Exception, e:
            logger.error(e)

def insert(mac):
    istarget = 0
    try:
        existrule = 0
        table = iptc.Table(iptc.Table.FILTER)
        for chain in table.chains:
            if (chain.name.startswith('neutron-openvswi-s')):
                break
        for rule in chain.rules:
            for match in rule.matches:
                if (match.mac_source == mac.upper()):
                    istarget = 1
                    break
            if (rule.src.startswith('0.0.0.0/') and rule.dst.startswith('0.0.0.0/0') and rule.target.name == 'RETURN'):
                existrule = 1   

        if (istarget == 1 and existrule == 0):
            rule = iptc.Rule()
            rule.src = '0.0.0.0/0.0.0.0'
            rule.dst = '0.0.0.0/0.0.0.0'
            target = iptc.Target(rule, 'RETURN')
            rule.target = target
            chain.insert_rule(rule)

        if (istarget == 1 and existrule == 1):
            logger.debug(mac + ' rule already added')   

    except Exception, e:
        logger.error(e)
    return istarget

def add_rule(mac):
    logger.debug('add_rule ' + mac)
    ret = 'success'
    try:
        istarget = insert(mac)
        if (istarget == 1):
            vmrouters.add(mac)
        else:
            ret = 'error'
            logger.error('no match target ' + mac)
    except Exception, e:
        logger.error(e)
        ret = 'error'
    return ret

if __name__ == '__main__':

    sched = Scheduler(daemonic=False)
    sched.add_cron_job(task, day_of_week='*', hour='*', minute='*/5', second='*')
    sched.start()

    server = SimpleXMLRPCServer(('192.168.5.12', 4501), allow_none=True)
    logger.debug('Listening on port 4501...')
    server.register_function(add_rule, 'add_rule')
    server.serve_forever()                  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
封锁IP通常是通过防火墙或者网络设备来实现的,可以使用Python的socketiptables(Linux防火墙工具)来实现封锁IP的功能。 首先,你需要安装iptables: ``` sudo apt-get install iptables ``` 然后,使用socket来监听网络连接,当有恶意IP连接时,使用iptables封锁该IP: ```python import socket import os # 监听的IP和端口 HOST = '0.0.0.0' PORT = 8080 # 创建一个TCP socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将socket绑定到指定的IP和端口 s.bind((HOST, PORT)) # 开始监听 s.listen(1) print('Listening on {}:{}'.format(HOST, PORT)) while True: # 等待连接 conn, addr = s.accept() print('Connected by', addr) # 获取远程IP地址 remote_ip = addr[0] # 检查IP是否在黑名单中 if remote_ip in ['1.2.3.4', '5.6.7.8']: print('Blocked IP:', remote_ip) os.system('iptables -A INPUT -s {} -j DROP'.format(remote_ip)) # 与客户端通信 while True: data = conn.recv(1024) if not data: break conn.sendall(data) # 关闭连接 conn.close() ``` 在上面的代码中,我们监听了指定的IP和端口,并且当有连接时,获取远程IP地址并检查是否在黑名单中,如果是,则使用iptables封锁该IP。注意,你需要使用sudo运行Python脚本才能执行iptables命令。 当然,这只是一个简单的示例,实际情况中,你可能需要更复杂的逻辑来判断是否需要封锁IP。而且,封锁IP并不是解决网络安全问题的万能方法,还需要其他的安全措施来保护你的网络。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值