masson
Version:
Module execution engine for cluster deployments.
133 lines (106 loc) • 3.73 kB
Markdown
# Bind Server Install
export default header: 'Bind Server Install', handler: ({options}) ->
## Users & Groups
By default, the "bind" package create the following entries:
```bash
cat /etc/passwd | grep named
named:x:25:25:Named:/var/named:/sbin/nologin
cat /etc/group | grep named
named:x:25:
```
@system.group options.group
@system.user options.user
## IPTables
| Service | Port | Proto | Parameter |
|------------|------|-------|-----------------|
| named | 53 | tcp | - |
| named | 53 | upd | - |
IPTables rules are only inserted if the parameter "iptables.action" is set to
"start" (default value).
@tools.iptables
header: 'IPTables'
rules: [
{ chain: 'INPUT', jump: 'ACCEPT', dport: options.port, protocol: 'tcp', state: 'NEW', comment: "Named" }
{ chain: 'INPUT', jump: 'ACCEPT', dport: options.port, protocol: 'udp', state: 'NEW', comment: "Named" }
]
if: options.iptables
## Install
The packages "bind" is installed as a startup item and not yet installed.
@service
header: 'Install'
name: 'bind'
srv_name: 'named'
startup: true
@system.tmpfs
if_os: name: ['redhat','centos'], version: '7'
mount: '/run/named'
name: 'named'
perm: '0750'
uid: options.user.name
gid: options.group.name
## Configure
Update the "/etc/named.conf" file by modifying the commenting the listen-on port
and setting "allow-query" to any. The "named" service is restarted if modified.
@file
header: 'Configure'
target: '/etc/named.conf'
mode: 0o644
write: [
# Comment listen-on port
match: /^(\s+)(listen\-on port.*)$/mg
replace: '$1#$2'
,
# Set allow-query to any
match: /^(\s+allow\-query\s*\{)(.*)(\};\s*)$/mg
replace: '$1 any; $3'
]
@service
header: 'Restart'
srv_name: 'named'
state: 'restarted'
if: -> @status -1
## Zones
Upload the zones definition files provided in the configuration file.
@call header: 'Zones', handler: ->
@file
target: '/etc/named.conf'
write: for zone in options.zones
# /^zone "hadoop" IN \{[\s\S]*?\n\}/gm.exec f
match: RegExp "^zone \"#{quote path.basename zone}\" IN \\{[\\s\\S]*?\\n\\};", 'gm'
replace: """
zone "#{path.basename zone}" IN {
type master;
file "#{path.basename zone}";
allow-update { none; };
};
"""
append: true
mode: 0o750
@file (
source: zone
local: true
mode: 0o644
uid: options.user.name
gid: options.group.name
target: "/var/named/#{path.basename zone}"
) for zone in options.zones
## rndc Key
Generates configuration files for rndc.
@call header: 'rndc Key', handler: ->
@system.execute
cmd: 'rndc-confgen -a -r /dev/urandom -c /etc/rndc.key'
unless_exists: '/etc/rndc.key'
@system.chown
target: '/etc/rndc.key'
uid: options.user.name
gid: options.group.name
@service
srv_name: 'named'
state: 'restarted'
if: -> @status()
## Module Dependencies
path = require 'path'
quote = require 'regexp-quote'
## Resources
* [Centos installation](https://www.digitalocean.com/community/articles/how-to-install-the-bind-dns-server-on-centos-6)
* [Forward configuration](http://gleamynode.net/articles/2267/)