Giới thiệu PowerDNS và PowerDNS Admin
PowerDNS là một công cụ mã nguồn mở giúp bạn xây dựng một DNS Server. Ngoài ra, PowerDNS Admin là công cụ giúp quản lý PowerDNS thông qua trình duyệt web. Do đó, bạn có thể dễ dàng tạo và quản lý các DNS Record mà không cần thao tác câu lệnh. Trong bài viết hôm nay, mình sẽ hướng dẫn bạn cách cài PowerDNS và PowerDNS Admin trên Ubuntu 22.04.
Chuẩn bị môi trường
- Server chạy Ubuntu 22.04
- Một domain trỏ tới địa chỉ IP của Server
- Người dùng root
Các bước cài đặt
Bước 1: Chuẩn bị môi trường để cài
Mở các port cần thiết
ufw allow 9191/tcp ufw allow 53/tcp ufw allow 53/udp ufw allow 8081/tcp ufw allow 80/tcp ufw allow 443/tcp ufw allow 3306/tcp ufw reload
Cài MariaDB
sudo apt update sudo apt install mariadb-server -y
Sau khi cài xong, hãy bảo mật MariaDB bằng lệnh bên dưới
sudo mysql_secure_installation
Tạo Database cho PowerDNS
sudo mysql -u root CREATE DATABASE powerdns;
Tạo user và gán quyền
GRANT ALL ON powerdns.* TO ‘powerdns’@’localhost’ IDENTIFIED BY ‘Str0ngPasswOrd’;
FLUSH PRIVILEGES;
Chuyển sang chế độ dùng Database để tạo table
USE powerdns; CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(8) NOT NULL, notified_serial INT UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, options VARCHAR(64000) DEFAULT NULL, catalog VARCHAR(255) DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX name_index ON domains(name); CREATE INDEX catalog_idx ON domains(catalog); CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX ordername ON records (ordername); CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, comment TEXT CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX comments_name_type_idx ON comments (name, type); CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind); CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, published BOOL DEFAULT 1, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX domainidindex ON cryptokeys(domain_id); CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Disbale resolved service
sudo systemctl disable systemd-resolved sudo systemctl stop systemd-resolved
Xóa symlinked resolv.conf file
ls -lh /etc/resolv.conf sudo rm /etc/resolv.conf
Tạo file resolv.conf mới
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Bước 2: Cài pdns
Cập nhật hệ thống và cài một số gói cần thiết
sudo apt update sudo apt install -y curl gnupg lsb-release
Thêm kho lưu trữ PowerDNS:
sudo curl -fsSL https://repo.powerdns.com/repo.gpg | sudo apt-key add - echo "deb [arch=amd64] https://repo.powerdns.com/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/pdns.list
Cập nhật danh sách gói và cài đặt PowerDNS:
sudo apt update sudo apt install -y pdns-server pdns-backend-mysql
Cấu hình SQL cho pdns
vi /etc/powerdns/pdns.d/pdns.local.gmysql.conf # MySQL Configuration # Launch gmysql backend launch+=gmysql # gmysql parameters gmysql-host=localhost gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=Str0ngPasswOrd gmysql-dnssec=yes # gmysql-socket=
sudo systemctl restart pdns sudo systemctl enable pdns
Cấu hình Pdns
Các bạn hãy uncomment và sửa lại thông số như bên dưới
allow-axfr-ips=::/0, 0.0.0.0/0 allow-dnsupdate-from=127.0.0.0/8,::1 allow-notify-from=0.0.0.0/0,::/0 also-notify=0.0.0.0 api=yes api-key=SECRET_KEY daemon=yes disable-axfr=no guardian=yes include-dir=/etc/powerdns/pdns.d launch= local-address=0.0.0.0 local-port=53 log-dns-details=on log-dns-queries=no log-timestamp=yes loglevel=4 master=yes slave=no setgid=pdns setuid=pdns version-string=powerdns webserver=yes webserver-address=ip server webserver-allow-from=0.0.0.0/0,,::1 webserver-port=8081
Lưu ý bảo mật:
- Các cấu hình mở rộng (allow-axfr-ips, allow-notify-from, etc.): Các cấu hình này có thể tạo ra các nguy cơ bảo mật nếu không được kiểm soát chặt chẽ. Hãy đảm bảo rằng bạn chỉ cho phép các địa chỉ IP tin cậy.
- API Key (api-key): Đảm bảo rằng khóa API được giữ bí mật và chỉ được chia sẻ với những người hoặc dịch vụ được ủy quyền.
Như vậy mình đã hướng dẫn các bạn cài đặt và cấu hình xong PowerDNS, ở bài viết sau mình sẽ hướng dẫn các bạn cài đặt PowerDNS Admin và nginx reverse proxy để sử dụng cho tên miền.
Chúc các bạn thành công!