puppet的配置之iptable

puppet的配置之iptable

时间:2013-09-20 01:09:11      作者:beebol      标签: itpable puppet      分类: 应用工具

现在来做一个通过puppet来管理远程agent上的防火墙。puppet已经安装完毕,具体方法见《puppet试验之puppet配置方法》。

首先,在/etc/puppet/manifests目录下创建site.pp文件,这个文件必须存在。如果不存在puppet就启动不了。site.pp是puppet的入口文件。

然后,在/etc/puppet/manifests创建一个nodes目录来放置所有的节点配置,如/etc/puppet/manifests/nodes/hadoop2.pp。hadoop2.pp这个文件里配置关于hadoop2这个主机的配置。具体内容如下:

node 'Hadoop2.cyou-inc.com' {
        include iptable::status       #这里表示hadoop2节点的配置,加载了iptable::status模块}
}

其中一个节点配置好了,那么怎么在入口文件中引用这个节点呢?看下site.pp文件内容吧。

import "nodes/*.pp"   #导入nodes目录下的所有节点配置
$fileserver="Hadoop1.cyou-inc.com"   #设置文件同步服务器给指定变量,后面就可以使用这个变量。
$puppetmaster="Hadoop1.cyou-inc.com"  
$puppetbucket="Hadoop1.cyou-inc.com"
node default
{}
}

在节点中加载了iptable::status模块,那么这个模块如何创建呢?模块都放到了/etc/puppet/modules目录下,见如下:

1、创建一个iptable目录,这个目录里包含如下目录:

backup     #这个目录用来备份的,不是必需的,按需求创建
files      #这个目录用来存入传输文件的,不是必需的,按需求创建manifests  #这个目录是必须的,这个目录是模块的入口目录,里面必需有一个init.pp入口文件
manifests  #这个目录是必须的,这个目录是模块的入口目录,里面必需有一个init.pp入口文件

2、init.pp可以进行相关资源的配置,如下:

class iptable::status    #创建一个类,节点加载的就是这个
{
        service     #定义了一个服务
        {
                "iptable":
                name =>iptables,
                ensure =>running,
        }
        file     #定义了一个文件资源
        {
                "/etc/sysconfig/iptables":
                source =>"puppet://$fileserver/iptable/iptables",
                owner =>"root",
                group =>"root",
                mode =>"600",
                require =>Exec["remote_back"],
                backup =>".bak_$uptime_seconds",
                #backup =>main
        }
        exec 
        {
                "remote_back":
                command =>"/bin/bash /etc/sysconfig/rsync.sh",
                user =>"root",
                path =>["/usr/local/sbin","/usr/local/bin","/sbin","/bin","/usr/sbin","/usr/bin"]
        }
        exec
        {
                "restore":
                command =>"/sbin/iptables-restore < /etc/sysconfig/iptables",
                user =>"root",
                subscribe =>File["/etc/sysconfig/iptables"],
                refreshonly =>true
        }
        filebucket
        {
                "main":
                server =>"Hadoop1.cyou-inc.com",
                port =>"8140",
                path =>false
        }}
}

3、这个模块主要的功能是:

1)监控iptable服务状态,保证是running的。

2)当iptables规则文件改变之前在本地进行备份,名称是:

.bak_$uptime_seconds    #如iptables.bak_时间戳

3)还执行rsyn.sh脚本进行远程备份。

4)当文件规则文件改动后,进行生效。

4、在file的puppet://$fileserver/iptable/iptables配置是什么意思呢?就是每次从$fileserver服务器中去拿这个文件配置到agent上的/etc/sysconfig/iptables中,如果没有改动就不会拷贝。$fileserver就是上面的变量。在本例当中就是到hadoop1.cyou-inc.com/iptable下拿iptables文件。这个目录是在哪里配置的呢?是在/etc/puppet/fileserver.conf 文件进行配置的,文件内容为:

# This file consists of arbitrarily named sections/modules
# defining where files are served from and to whom

# Define a section 'files'
# Adapt the allow/deny settings to your needs. Order
# for allow/deny does not matter, allow always takes precedence
# over deny
# [files]
#  path /var/lib/puppet/files
#  allow *.example.com
#  deny *.evil.example.com
#  allow 192.168.0.0/24
[cron]
        path /etc/puppet/modules/cron/files
        allow *.cyou-inc.com

[iptable]   #和rsync有点类似,引用的就是这个名字
        path /etc/puppet/modules/iptable/files    #定义了真实的文件存储路径
        allow *.cyou-inc.com    #这个是哪些主机可以访问这个路径
[fileback]
        path /etc/puppet/modules/iptable/backupallow *.cyou-inc.com
        allow *.cyou-inc.com

5、一切OK后,开始测试,先把iptable服务停了。测试方法,在hadoop2.cyou-inc.com这个agent上执行:

puppetd --server hadoop1.cyou-inc.com --test

执行成功后,发现agent上的iptable已经启来了。

然后,fileserver中/etc/puppet/modules/iptable/files的iptables文件增加或减少一条规则。然后在agent上执行上面那条命令。发现agent上的防火墙规则变了,且生效。在/etc/sysconfig/下有一个备份,远程也有一个备份。

 

时间:2013-09-20 01:09:11      作者:beebol      标签: itpable puppet      分类: 应用工具
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信

Copyright © 2015 Gitblog | Proudly powered by Gitblog.