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/下有一个备份,远程也有一个备份。