Install Bind with MySQL support on an AWS instance
Jump to navigation
Jump to search
Prerequisites
Required packages
root@localhost ~ # yum install bind-sdb mariadb-serverMySQL
Enable MySQL at boot
root@localhost ~ # systemctl enable mariadb.serviceCheck if it is enabled.
root@localhost ~ # systemctl list-unit-filesStart MySQL
root@localhost ~ # systemctl start mariadb.serviceSet up root user for mysql
root@localhost ~ # mysqladmin -u root -h localhost password <password>Secure the MySQL installation
Rename the root user
root@localhost ~ # mysql -u root -pRENAME USER 'root'@'localhost' TO 'user'@'localhost'; flush privileges; exit
Remove unnecessary users
root@localhost ~ # mysql -u user -pDELETE FROM mysql.user WHERE User != 'user'; flush privileges; exit;
Remove unnecessary databases
root@localhost ~ # mysql -u user -pSHOW DATABASES; DROP DATABASE test; SHOW DATABASES;
Create user for Bind
root@localhost ~ # mysql -u user -pCREATE DATABASE bind; GRANT ALL on bind.* to 'bind'@'localhost' IDENTIFIED BY 'S3cr3t';
Create the dns_records table
CREATE TABLE bind.dns_records ( record_uid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, view TEXT, zone TEXT, ttl INT, type TEXT, host TEXT, mx_priority text, data TEXT, primary_ns TEXT, resp_contact TEXT, serial INT, refresh INT, retry INT, expire INT, minimum INT ) ENGINE = MyISAM;
Bind
Create directories
root@localhost ~ # mkdir -p /etc/named /var/log/namedroot@localhost ~ #
chown named:named /var/log/namedCreate configuration
root@localhost ~ # nano -w /etc/named/named.confinclude "/etc/named/named.log.conf";
acl "localnet" {
127.0.0.1/32;
10.0.0.0/24;
};
acl "trusted" {
localhost;
};
acl "xfer" {
none;
};
options {
directory "/var/named";
pid-file "/run/named/named.pid";
zone-statistics yes;
statistics-file "/var/named/named.stats";
#statistics-interval 1;
listen-on { any; };
listen-on-v6 { any; };
interface-interval 1;
dnssec-enable yes;
dnssec-validation yes;
allow-query { any; };
allow-query-cache { any; };
allow-recursion { localnet; };
allow-notify { none; };
allow-transfer { none; };
allow-update { none; };
bindkeys-file "/etc/bind.keys";
session-keyfile "/var/named/session.key";
managed-keys-directory "/var/named/dynamic";
};
include "/etc/named/named.dlz.conf";
root@localhost ~ # nano -w /etc/named/named.dlz.confview "external" {
match-clients { any; };
dlz "mysql zone" {
database "mysql
{host=127.0.0.1 port=3306 dbname=bind user=bind pass=S3cr3t}
{SELECT zone FROM dns_records WHERE view = 'external' AND zone = '$zone$';}
{SELECT ttl, type, mx_priority,
CASE
WHEN UPPER(type) = 'TXT' THEN CONCAT('\"', data, '\"')
ELSE data
END AS data
FROM dns_records WHERE view = 'external' AND zone = '$zone$' AND host = '$record$' AND NOT (UPPER(type) = 'SOA' or UPPER(type) = 'NS');}
{SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum FROM dns_records WHERE view = 'external' AND zone = '$zone$' AND (UPPER(type) = 'SOA' or UPPER(type) = 'NS');}
{SELECT ttl, type, host, mx_priority,
CASE
WHEN UPPER(type) = 'TXT' THEN CONCAT('\"', data, '\"')
ELSE data
END AS data, resp_contact, serial, refresh, retry, expire, minimum
FROM dns_records WHERE view = 'external' AND zone = '$zone$' AND not (UPPER(type) = 'SOA' or UPPER(type) = 'NS');}
{SELECT zone FROM xfr_table WHERE view = 'external' AND zone = '$zone$' AND client = '$client$';}
";
};
};
root@localhost ~ # nano -w /etc/named/named.log.conflogging {
channel client_file { file "/var/log/named/client.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel config_file { file "/var/log/named/config.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel database_file { file "/var/log/named/database.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel default_file { file "/var/log/named/default.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel delegation-only_file { file "/var/log/named/delegation-only.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel dispatch_file { file "/var/log/named/dispatch.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel dnssec_file { file "/var/log/named/dnssec.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel general_file { file "/var/log/named/general.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel lame-servers_file { file "/var/log/named/lame-servers.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel network_file { file "/var/log/named/network.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel notify_file { file "/var/log/named/notify.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel queries_file { file "/var/log/named/queries.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel resolver_file { file "/var/log/named/resolver.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel security_file { file "/var/log/named/security.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel unmatched_file { file "/var/log/named/unmatched.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel update_file { file "/var/log/named/update.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel update-security_file { file "/var/log/named/update-security.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel xfer-in_file { file "/var/log/named/xfer-in.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
channel xfer-out_file { file "/var/log/named/xfer-out.log" versions 3 size 5M; severity info; print-time yes; print-severity yes; print-category yes; };
category client { client_file; };
category config { config_file; };
category database { database_file; };
category default { default_file; };
category delegation-only { delegation-only_file; };
category dispatch { dispatch_file; };
category dnssec { dnssec_file; };
category general { general_file; };
category lame-servers { lame-servers_file; };
category network { network_file; };
category notify { notify_file; };
category queries { queries_file; };
category resolver { resolver_file; };
category security { security_file; };
category unmatched { unmatched_file; };
category update { update_file; };
category update-security { update-security_file; };
category xfer-in { xfer-in_file; };
category xfer-out { xfer-out_file; };
};
Update config path in systemd init script
root@localhost ~ # nano -w /usr/lib/systemd/system/named-sdb.serviceEnvironment=NAMEDCONF=/etc/named/named.conf
Start named
Enable bind at boot
root@localhost ~ # systemctl enable named-sdb.serviceCheck if bind is enabled
root@localhost ~ # systemctl list-unit-filesStart bind
root@localhost ~ # systemctl start named-sdb.service