Puppet là một công cụ quản lý cấu hình giúp đơn giản hóa việc quản trị hệ thống. Puppet sử dụng mô hình máy khách/máy chủ trong đó các nút được quản lý của bạn, chạy một quy trình gọi là tác nhân Puppet , trao đổi và kéo xuống các cấu hình từ một máy chủ Puppet .
Triển khai Puppet có thể bao gồm từ nhóm máy chủ nhỏ đến hoạt động cấp doanh nghiệp. Hướng dẫn này sẽ trình bày cách cài đặt Puppet 6.1 trên ba máy chủ:
- Một Puppet master chạy Ubuntu 18.04
- Một nút Puppet được quản lý chạy Ubuntu 18.04
- Một nút Puppet được quản lý chạy CentOS 7
Sau khi cài đặt, phần tiếp theo sẽ chỉ cho bạn cách bảo mật các máy chủ này thông qua Puppet. Phần này sẽ trình bày các tính năng cốt lõi của ngôn ngữ Puppet.
Ghi chú: Hầu hết các hướng dẫn sẽ hướng dẫn bạn làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute trước khi tiến hành. Vì Puppet sẽ được sử dụng để thực hiện tác vụ này, bạn nên bắt đầu hướng dẫn này với tư cách là người root
dùng. Người dùng bị giới hạn với các đặc quyền quản trị sẽ được cấu hình thông qua Puppet trong các bước sau.
Trước khi bạn bắt đầu
Bảng sau đây hiển thị thông tin hệ thống mẫu cho các máy chủ sẽ được triển khai trong hướng dẫn này:
Sự miêu tả | BẠN | Tên máy chủ | Số hiệu đầy đủ | Địa chỉ IP |
---|---|---|---|---|
Người điều khiển rối | Ubuntu 18.04 | con rối | puppet.example.com | 192.0.2.2 |
Nút 1 (Ubuntu) | Ubuntu 18.04 | tác nhân rối-ubuntu | con rối-agent-ubuntu.example.com | 192.0.2.3 |
Nút 2 (CentOS) | CentOS 7 | con rối-đại lý-centos | con rối-agent-centos.example.com | 192.0.2.4 |
Bạn có thể chọn tên máy chủ khác nhau và tên miền đủ điều kiện (FQDN) cho mỗi máy chủ của mình và địa chỉ IP cho máy chủ của bạn sẽ khác với các địa chỉ ví dụ được liệt kê. Bạn sẽ cần phải có tên miền đã đăng ký để chỉ định FQDN cho máy chủ của mình.
Trong suốt hướng dẫn này, các lệnh và đoạn mã sẽ tham chiếu đến các giá trị được hiển thị trong bảng này. Bất cứ khi nào giá trị như vậy xuất hiện, hãy thay thế bằng giá trị của riêng bạn.
Tạo Linode của bạn
- Tạo ba Linode tương ứng với các máy chủ được liệt kê trong bảng trên. Puppet master Linode của bạn phải có ít nhất bốn lõi CPU; gói Linode 8GB được khuyến nghị. Hai nút còn lại có thể có bất kỳ kích thước gói nào, tùy thuộc vào cách bạn định sử dụng chúng sau khi Puppet được cài đặt và cấu hình.
- Cấu hình múi giờ trên các nút chính và nút tác nhân của bạn để tất cả chúng đều có cùng dữ liệu thời gian.
- Đặt tên máy chủ cho mỗi máy chủ.
- Đặt FQDN cho mỗi Linode bằng cách chỉnh sửa các tệp của máy chủ
/etc/hosts
. - Thiết lập bản ghi DNS cho FQDN của Linode. Đối với mỗi Linode, hãy tạo một bản ghi A mới với tên được chỉ định bởi FQDN của nó và gán nó cho địa chỉ IP của Linode đó.Nếu bạn không sử dụng máy chủ tên của Linode cho tên miền của mình, hãy tham khảo trang web của cơ quan quản lý máy chủ tên để biết hướng dẫn về cách chỉnh sửa bản ghi DNS.
Người điều khiển rối
Cài đặt phần mềm Puppet Server
Puppet master chạy puppetserver
dịch vụ, có trách nhiệm biên dịch và cung cấp hồ sơ cấu hình cho các nút được bạn quản lý.
Dịch puppetserver
vụ có dịch vụ tác nhân Puppet làm phụ thuộc (chỉ được gọi puppet
khi chạy trên hệ thống của bạn). Điều này có nghĩa là phần mềm tác nhân cũng sẽ được cài đặt và có thể chạy trên máy chủ của bạn. Vì máy chủ của bạn có thể chạy dịch vụ tác nhân, bạn có thể cấu hình máy chủ của mình thông qua Puppet giống như bạn có thể cấu hình các nút được quản lý khác của mình.
1.Đăng nhập vào Puppet master của bạn thông qua SSH (với tư cách là root):
ssh root@puppet.example.com
2.Tải xuống kho lưu trữ Puppet, cập nhật các gói hệ thống của bạn và cài đặt puppetserver
:
wget https://apt.puppet.com/puppet-release-bionic.deb
dpkg -i puppet-release-bionic.deb
apt update
apt install puppetserver
Cấu hình phần mềm máy chủ
1.Sử dụng puppet config
lệnh để thiết lập giá trị cho dns_alt_names
cài đặt:
/opt/puppetlabs/bin/puppet config set dns_alt_names 'puppet,puppet.example.com' --section main
Nếu bạn kiểm tra tệp cấu hình, bạn sẽ thấy cài đặt đã được thêm vào:
cat /etc/puppetlabs/puppet/puppet.conf
[main]
dns_alt_names = puppet,puppet.example.com
# ...
Ghi chú:Theo mặc định, lệnh puppet
không được thêm vào PATH của bạn. Sử dụng lệnh tương tác của Puppet yêu cầu đường dẫn tệp đầy đủ. Để tránh điều này, hãy cập nhật PATH cho phiên shell hiện tại của bạn:
export PATH=/opt/puppetlabs/bin:$PATH
Một giải pháp lâu dài hơn là thêm điều này vào tệp của .profile
bạn .bashrc
.
2.Cập nhật Puppet master của bạn /etc/hosts
để giải quyết địa chỉ IP của các nút được quản lý của bạn. Ví dụ, /etc/hosts
tệp của bạn có thể trông như sau:
127.0.0.1 localhost
192.0.2.2 puppet.example.com puppet
192.0.2.3 puppet-agent-ubuntu.example.com puppet-agent-ubuntu
192.0.2.4 puppet-agent-centos.example.com puppet-agent-centos
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Ghi chú: Đoạn mã này kết hợp khai báo FQDN được mô tả trong phần Tạo Linodes của bạn .
3.Khởi động và kích hoạt puppetserver
dịch vụ:
systemctl start puppetserver
systemctl enable puppetserver
Theo mặc định, Puppet master sẽ lắng nghe các kết nối của máy khách trên cổng 8140. Nếu dịch puppetserver
vụ không khởi động được, hãy kiểm tra xem cổng đó đã được sử dụng chưa:
netstat -anpl | grep 8140
Các tác nhân bù nhìn
Cài đặt Puppet Agent
1.Trên nút được quản lý của bạn chạy Ubuntu 18.04 , hãy cài đặt puppet-agent
gói:
wget https://apt.puppet.com/puppet-release-bionic.deb
dpkg -i puppet-release-bionic.deb
apt update
apt install puppet-agent
2.Trên nút được quản lý của bạn đang chạy CentOS 7 , hãy nhập:
rpm -Uvh https://yum.puppet.com/puppet/puppet-release-el-7.noarch.rpm
yum install puppet-agent
Cấu hình Puppet Agent
1.Sửa đổi các tệp máy chủ của các nút được quản lý của bạn để giải quyết IP của Puppet master. Để thực hiện, hãy thêm một dòng như sau:
192.0.2.2 puppet.example.com puppet
2.Trên mỗi nút được quản lý, hãy sử dụng puppet config
lệnh để đặt giá trị cho server
cài đặt của bạn thành FQDN của máy chủ chính:
/opt/puppetlabs/bin/puppet config set server 'puppet.example.com' --section main
Nếu bạn kiểm tra tệp cấu hình trên các nút, bạn sẽ thấy cài đặt đã được thêm vào:
cat /etc/puppetlabs/puppet/puppet.conf
[main]
server = puppet.example.com
# ...
3.Sử dụng puppet resource
lệnh để khởi động và kích hoạt dịch vụ tác nhân Puppet:
/opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
Ghi chú:Trên hệ thống systemd, lệnh trên tương đương với việc sử dụng hai systemctl
lệnh sau:
systemctl start puppet
systemctl enable puppet
Tạo và ký chứng chỉ
Trước khi các nút được quản lý của bạn có thể nhận cấu hình từ máy chủ, trước tiên chúng cần được xác thực:
1.Trên các tác nhân Puppet của bạn , hãy tạo một chứng chỉ để người điều khiển Puppet ký:
/opt/puppetlabs/bin/puppet agent -t
Lệnh này sẽ xuất ra lỗi, thông báo rằng không tìm thấy chứng chỉ nào. Lỗi này là do chứng chỉ được tạo ra cần được Puppet master chấp thuận.
2.Đăng nhập vào Puppet master của bạn và liệt kê các chứng chỉ cần phê duyệt:
/opt/puppetlabs/bin/puppetserver ca list
Nó sẽ xuất ra danh sách tên máy chủ của các nút tác nhân của bạn.
3.Phê duyệt chứng chỉ:
/opt/puppetlabs/bin/puppetserver ca sign --certname puppet-agent-ubuntu.example.com,puppet-agent-centos.example.com
4.Quay lại các nút tác nhân Puppet và chạy lại tác nhân Puppet:
/opt/puppetlabs/bin/puppet agent -t
Bạn sẽ thấy nội dung tương tự như sau:
Info: Downloaded certificate for hostname.example.com from puppet
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for hostname.example.com
Info: Applying configuration version '1547066428'
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
Notice: Applied catalog in 0.02 seconds
Thêm Mô-đun để Cấu hình Nút Đại lý
Các nút Puppet master và agent hiện đã hoạt động, nhưng chúng không an toàn. Dựa trên các khái niệm từ hướng dẫn Thiết lập và bảo mật Compute Instance , nên cấu hình một người dùng giới hạn và tường lửa. Điều này có thể được thực hiện trên tất cả các nút thông qua việc tạo các mô-đun Puppet cơ bản, được hiển thị bên dưới.
Ghi chú: Điều này không nhằm mục đích cung cấp cơ sở cho một máy chủ được bảo vệ hoàn toàn và chỉ nhằm mục đích là điểm khởi đầu. Thay đổi và thêm các quy tắc tường lửa và các tùy chọn cấu hình khác, tùy thuộc vào nhu cầu cụ thể của bạn.
Các mô-đun Puppet là cách Puppet quy định để tổ chức mã cấu hình nhằm phục vụ các mục đích cụ thể, như cài đặt và cấu hình ứng dụng. Bạn có thể tạo các mô-đun tùy chỉnh hoặc có thể tải xuống và sử dụng các mô-đun được xuất bản trên Puppet Forge .
Thêm Người dùng bị giới hạn
Để tạo người dùng giới hạn mới trên các nút của bạn, bạn sẽ tạo và áp dụng một mô-đun mới có tên là accounts
. Mô-đun này sẽ sử dụng user
tài nguyên .
1.Từ Puppet master , điều hướng đến thư /etc/puppetlabs/code/environments/production/modules
mục. Khi một nút được quản lý yêu cầu cấu hình của nó từ master, quy trình máy chủ Puppet sẽ tìm kiếm các mô-đun của bạn ở vị trí này:
cd /etc/puppetlabs/code/environments/production/modules/
2.Tạo thư mục cho mô accounts
-đun mới:
mkdir accounts
cd accounts
3.Tạo các thư mục sau bên trong accounts
mô-đun:
mkdir {examples,files,manifests,templates}
Thư mục | Sự miêu tả |
---|---|
manifests | Mã Puppet cung cấp năng lượng cho mô-đun |
files | Các tập tin tĩnh được sao chép vào các nút được quản lý |
templates | Các tệp mẫu sẽ được sao chép vào các nút được quản lý có thể tùy chỉnh bằng các biến |
examples | Mã ví dụ cho thấy cách sử dụng mô-đun |
Ghi chú: Xem lại bài viết về nguyên tắc cơ bản của Module của Puppet để biết thêm thông tin về cách cấu trúc một module.
4.Điều hướng đến thư manifests
mục:
cd manifests
5.Bất kỳ tệp nào chứa mã Puppet đều được gọi là manifest và mỗi tệp manifest đều kết thúc bằng .pp
. Khi nằm bên trong một mô-đun, manifest chỉ nên định nghĩa một lớp. Nếu thư mục manifests của mô-đun có một init.pp
tệp, định nghĩa lớp mà nó chứa được coi là lớp chính cho mô-đun. Định nghĩa lớp bên trong init.pp
phải có cùng tên với mô-đun.
Tạo một init.pp
tệp có nội dung của đoạn mã sau. Thay thế tất cả các trường hợp username
bằng tên người dùng bạn chọn:
class accounts {
user { 'username':
ensure => present,
home => '/home/username',
shell => '/bin/bash',
managehome => true,
gid => 'username',
}
}
Lựa chọn | Sự miêu tả |
---|---|
ensure | Đảm bảo rằng người dùng tồn tại nếu được đặt thành present hoặc không tồn tại nếu được đặt thànhabsent |
home | Đường dẫn đến thư mục home của người dùng |
managehome | Kiểm soát xem có nên tạo thư mục gốc khi tạo người dùng hay không |
shell | Đường dẫn đến shell cho người dùng |
gid | Nhóm chính của người dùng |
6.Mặc dù lớp khai báo nhóm chính của người dùng là gì, nhưng nó sẽ không tự tạo nhóm. Tạo một tệp mới có tên groups.pp
bên trong manifests
thư mục với nội dung sau. Thay thế username
bằng tên người dùng bạn đã chọn:
class accounts::groups {
group { 'username':
ensure => present,
}
}
7.accounts
Lớp của bạn có thể khai báo lớp mới của bạn accounts::groups
để sử dụng trong accounts
phạm vi lớp. Mở init.pp
trong trình soạn thảo của bạn và nhập một include
khai báo mới vào đầu lớp:
class accounts {
include accounts::groups
# ...
}
8.Người dùng mới phải có quyền quản trị. Vì chúng tôi có các nút tác nhân trên cả hệ thống dựa trên Debian và Red Hat, nên người dùng mới cần phải nằm trong nhóm sudo
trên hệ thống Debian và wheel
nhóm trên hệ thống Red Hat.
Giá trị này có thể được thiết lập động thông qua việc sử dụng Puppet facts . Hệ thống facts thu thập thông tin hệ thống về các nút của bạn và cung cấp thông tin đó trong manifest của bạn.
Thêm câu lệnh chọn vào đầu accounts
lớp của bạn:
class accounts {
$rootgroup = $osfamily ? {
'Debian' => 'sudo',
'RedHat' => 'wheel',
default => warning('This distribution is not supported by the Accounts module'),
}
include accounts::groups
# ...
}
Mã này định nghĩa giá trị cho $rootgroup
biến bằng cách kiểm tra giá trị của , đây là một trong những sự kiện cốt lõi$osfamily
của Puppet . Nếu giá trị của không khớp với Debian hoặc Red Hat, giá trị sẽ đưa ra cảnh báo rằng bản phân phối đã chọn không được mô-đun này hỗ trợ.$osfamilydefault
Ghi chú: Ngôn ngữ cấu hình Puppet thực thi mã từ trên xuống dưới. Vì user
khai báo tài nguyên sẽ tham chiếu đến $rootgroup
biến, bạn phải định nghĩa $rootgroup
trước khi khai user
báo.
9.Cập nhật tài nguyên người dùng để bao gồm groups
tùy chọn như sau:
# ...
user { 'username':
ensure => present,
home => '/home/username',
shell => '/bin/bash',
managehome => true,
gid => 'username',
groups => "$rootgroup",
}
# ...
Giá trị "$rootgroup"
được đặt trong dấu ngoặc kép " "
thay vì dấu ngoặc đơn ' '
vì đây là biến cần được nội suy trong mã của bạn.
10.Giá trị cuối cùng cần thêm vào là mật khẩu của người dùng. Vì chúng ta không muốn sử dụng văn bản thuần túy, nên mật khẩu phải được cung cấp cho Puppet dưới dạng tóm tắt SHA1, được hỗ trợ theo mặc định. Tạo tóm tắt bằng lệnh openssl
:
openssl passwd -1
Bạn sẽ được nhắc nhập mật khẩu. Mật khẩu băm sẽ được xuất ra. Sao chép giá trị này vào bảng tạm của bạn.
11.Cập nhật tài nguyên người dùng để bao gồm tùy password
chọn như sau; chèn hàm băm mật khẩu đã sao chép của bạn làm giá trị cho tùy chọn:
# ...
user { 'username':
ensure => present,
home => '/home/username',
shell => '/bin/bash',
managehome => true,
gid => 'username',
groups => "$rootgroup",
password => 'your_password_hash',
}
# ...
Quan trọng: Mật khẩu băm phải được đặt trong dấu ngoặc đơn ' '
.
12.Sau khi lưu các thay đổi, hãy sử dụng trình phân tích cú pháp Puppet để đảm bảo mã là chính xác:
/opt/puppetlabs/bin/puppet parser validate init.pp
Bất kỳ lỗi nào cần được xử lý sẽ được ghi vào đầu ra chuẩn. Nếu không có gì được trả về, mã của bạn là hợp lệ.
13.Điều hướng đến thư examples
mục và tạo một init.pp
tệp khác:
cd ../examples
include accounts
14.Khi vẫn còn trong examples
thư mục, hãy kiểm tra mô-đun:
/opt/puppetlabs/bin/puppet apply --noop init.pp
Ghi chú: Tham số này --noop
ngăn không cho Puppet áp dụng mô-đun vào hệ thống của bạn và thực hiện bất kỳ thay đổi nào.
Notice: Compiled catalog for puppet.example.com in environment production in 0.26 seconds
Notice: /Stage[main]/Accounts::Groups/Group[username]/ensure: current_value absent, should be present (noop)
Notice: Class[Accounts::Groups]: Would have triggered 'refresh' from 1 events
Notice: /Stage[main]/Accounts/User[username]/ensure: current_value absent, should be present (noop)
Notice: Class[Accounts]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 2 events
Notice: Finished catalog run in 0.02 seconds
15.Một lần nữa từ examples
thư mục, chạy puppet apply
để thực hiện những thay đổi sau cho máy chủ Puppet master:
/opt/puppetlabs/bin/puppet apply init.pp
Puppet sẽ tạo người dùng Linux giới hạn trên máy chủ của bạn.
16.Đăng xuất root
và đăng nhập vào Puppet master với tư cách là người dùng mới của bạn.
Chỉnh sửa cài đặt SSH
Mặc dù người dùng giới hạn mới đã được thêm thành công vào Puppet master, vẫn có thể đăng nhập vào hệ thống với tư cách là root. Để bảo mật hệ thống của bạn đúng cách, quyền truy cập root phải bị vô hiệu hóa.
Ghi chú: Vì hiện tại bạn đã đăng nhập vào Puppet master với tư cách là người dùng bị giới hạn nên bạn sẽ cần thực thi lệnh và chỉnh sửa tệp bằng quyền sudo của người dùng.
1.Điều hướng đến files
thư mục trong accounts
mô-đun:
cd /etc/puppetlabs/code//production/modules/accounts/files
2.Sao chép tập tin hiện có của hệ thống sshd_config
vào thư mục này:
sudo cp /etc/ssh/sshd_config .
3.Mở tệp trong trình soạn thảo của bạn (đảm bảo rằng bạn mở tệp bằng sudo
quyền) và đặt PermitRootLogin
giá trị thành no
:
PermitRootLogin no
4.PermitRootLogin no
cd ../manifests
5.Tạo một manifest mới có tên là ssh.pp
. Sử dụng file
tài nguyên để thay thế tệp cấu hình SSH mặc định bằng tệp do Puppet quản lý:
class accounts::ssh {
file { '/etc/ssh/sshd_config':
ensure => present,
source => 'puppet:///modules/accounts/sshd_config',
}
}
Ghi chú: Thư files
mục bị bỏ qua khỏi source
dòng vì files
thư mục là vị trí mặc định của các tệp trong một mô-đun. Để biết thêm thông tin về định dạng được sử dụng để truy cập tài nguyên trong một mô-đun, hãy tham khảo tài liệu mô-đun Puppet chính thức .
6.Tạo một tài nguyên thứ hai để khởi động lại dịch vụ SSH và thiết lập để chạy bất cứ khi nào sshd_config
có thay đổi. Điều này cũng sẽ yêu cầu một câu lệnh selector vì dịch vụ SSH được đặt tên ssh
trên hệ thống Debian và sshd
trên hệ thống Red Hat:
class accounts::ssh {
$sshname = $osfamily ? {
'Debian' => 'ssh',
'RedHat' => 'sshd',
default => warning('This distribution is not supported by the Accounts module'),
}
file { '/etc/ssh/sshd_config':
ensure => present,
source => 'puppet:///modules/accounts/sshd_config',
notify => Service["$sshname"],
}
service { "$sshname":
hasrestart => true,
}
}
Ghi chú: notify
là một trong những siêu tham số quan hệ của Puppet .
7.Bao gồm accounts::ssh
lớp trong accounts
lớp trong init.pp
:
class accounts {
# ...
include accounts::groups
include accounts::ssh
# ...
}
Nội dung của bạn init.pp
bây giờ sẽ trông giống như đoạn trích sau:
class accounts {
$rootgroup = $osfamily ? {
'Debian' => 'sudo',
'RedHat' => 'wheel',
default => warning('This distro not supported by Accounts module'),
}
include accounts::groups
include accounts::ssh
user { 'example':
ensure => present,
home => '/home/username',
shell => '/bin/bash',
managehome => true,
gid => 'username',
groups => "$rootgroup",
password => 'your_password_hash'
}
}
8.Chạy trình phân tích cú pháp Puppet để kiểm tra cú pháp của lớp mới, sau đó điều hướng đến thư examples
mục để kiểm tra và chạy bản cập nhật cho accounts
lớp của bạn:
sudo /opt/puppetlabs/bin/puppet parser validate ssh.pp
cd ../examples
sudo /opt/puppetlabs/bin/puppet apply --noop init.pp
sudo /opt/puppetlabs/bin/puppet apply init.pp
Ghi chú: Bạn có thể thấy dòng sau trong đầu ra khi xác thực:
Error: Removing mount "files": /etc/puppet/files does not exist or is not a directory
Điều này đề cập đến tệp cấu hình Puppet, không phải tài nguyên mô-đun mà bạn đang cố gắng sao chép. Nếu đây là lỗi duy nhất trong đầu ra của bạn, thao tác vẫn có thể thành công.
9.Để đảm bảo ssh
lớp học hoạt động bình thường, hãy đăng xuất khỏi Puppet master rồi thử đăng nhập bằng root
. Bạn sẽ không thể làm như vậy.
hêm và cấu hình IPtables
Để hoàn tất cài đặt bảo mật của hướng dẫn này, tường lửa cần được cấu hình trên Puppet master và các nút của bạn. Phần iptables
mềm tường lửa sẽ được sử dụng.
1.Theo mặc định, các thay đổi đối với iptables
quy tắc của bạn sẽ không tồn tại qua các lần khởi động lại. Để tránh điều này, hãy cài đặt gói phù hợp trên Puppet master và các nút của bạn:
Ubuntu/Debian :
sudo apt install iptables-persistent
CentOS 7 :
CentOS 7 sử dụng firewalld theo mặc định làm bộ điều khiển cho iptables. Hãy đảm bảo firewalld đã dừng và vô hiệu hóa trước khi bắt đầu làm việc trực tiếp với iptables:
sudo systemctl stop firewalld && sudo systemctl disable firewalld
sudo yum install iptables-services
2.Trên máy chủ Puppet của bạn, hãy cài đặt mô-đun tường lửa của Puppet Lab từ Puppet Forge:
sudo /opt/puppetlabs/bin/puppet module install puppetlabs-firewall
Mô-đun sẽ được cài đặt trong /etc/puppetlabs/code/environments/production/modules
thư mục của bạn.
3.Điều hướng đến manifests
thư mục bên trong mô-đun mới firewall
:
cd /etc/puppetlabs/code/environments/production/modules/firewall/manifests/
4.Tạo một tệp có tiêu đề pre.pp
, trong đó sẽ chứa tất cả các quy tắc mạng cơ bản cần chạy trước tiên:
class firewall::pre {
Firewall {
require => undef,
}
# Accept all loopback traffic
firewall { '000 lo traffic':
proto => 'all',
iniface => 'lo',
action => 'accept',
}->
#Drop non-loopback traffic
firewall { '001 reject non-lo':
proto => 'all',
iniface => '! lo',
destination => '127.0.0.0/8',
action => 'reject',
}->
#Accept established inbound connections
firewall { '002 accept established':
proto => 'all',
state => ['RELATED', 'ESTABLISHED'],
action => 'accept',
}->
#Allow all outbound traffic
firewall { '003 allow outbound':
chain => 'OUTPUT',
action => 'accept',
}->
#Allow ICMP/ping
firewall { '004 allow icmp':
proto => 'icmp',
action => 'accept',
}
#Allow SSH connections
firewall { '005 Allow SSH':
dport => '22',
proto => 'tcp',
action => 'accept',
}->
#Allow HTTP/HTTPS connections
firewall { '006 HTTP/HTTPS connections':
dport => ['80', '443'],
proto => 'tcp',
action => 'accept',
}
}
5.Trong cùng thư mục, tạo post.pp
, lệnh này sẽ chạy bất kỳ quy tắc tường lửa nào cần được nhập cuối cùng:
class firewall::post {
firewall { '999 drop all':
proto => 'all',
action => 'drop',
before => undef,
}
}
Các quy tắc này sẽ chỉ đạo hệ thống loại bỏ mọi lưu lượng truy cập đến chưa được phép qua tường lửa.
6.Chạy trình phân tích cú pháp Puppet trên cả hai tệp để kiểm tra lỗi cú pháp:
sudo /opt/puppetlabs/bin/puppet parser validate pre.pp
sudo /opt/puppetlabs/bin/puppet parser validate post.pp
7.Điều hướng đến thư mục chính manifests
:
cd /etc/puppetlabs/code/environments/production/manifests
8.Tạo một tệp có tên site.pp
bên trong /etc/puppetlabs/code/environments/production/manifests
. Tệp này là manifest chính cho dịch vụ máy chủ Puppet. Tệp này được sử dụng để ánh xạ các mô-đun, lớp và tài nguyên vào các nút mà chúng cần được áp dụng.
node default {
}
node 'puppet.example.com' {
include accounts
resources { 'firewall':
purge => true,
}
Firewall {
before => Class['firewall::post'],
require => Class['firewall::pre'],
}
class { ['firewall::pre', 'firewall::post']: }
firewall { '200 Allow Puppet Master':
dport => '8140',
proto => 'tcp',
action => 'accept',
}
}
9.Chạy site.pp
tệp qua trình phân tích cú pháp Puppet để kiểm tra lỗi cú pháp. Sau đó, kiểm tra tệp bằng tùy --noop
chọn để xem tệp có chạy được không:
sudo /opt/puppetlabs/bin/puppet parser validate site.pp
sudo /opt/puppetlabs/bin/puppet apply --noop site.pp
Nếu thành công, hãy chạy puppet apply
mà không có --noop
tùy chọn:
sudo /opt/puppetlabs/bin/puppet apply site.pp
10.Sau khi Puppet hoàn tất việc áp dụng các thay đổi, hãy kiểm tra các quy tắc iptables của Puppet master:
sudo iptables -L
Nó sẽ trả về:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere /* 000 lo traffic */
REJECT all -- anywhere 127.0.0.0/8 /* 001 reject non-lo */ reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere /* 002 accept established */ state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere /* 004 allow icmp */
ACCEPT tcp -- anywhere anywhere multiport ports ssh /* 005 Allow SSH */
ACCEPT tcp -- anywhere anywhere multiport ports http,https /* 006 HTTP/HTTPS connections */
ACCEPT tcp -- anywhere anywhere multiport ports 8140 /* 200 Allow Puppet Master */
DROP all -- anywhere anywhere /* 999 drop all */
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere /* 003 allow outbound */
Áp dụng các mô-đun cho các nút tác nhân
Bây giờ các mô-đun accounts
và firewall
đã được tạo, thử nghiệm và chạy trên Puppet master, đã đến lúc áp dụng chúng vào các nút được quản lý của bạn.
1.Trên Puppet master , điều hướng đến /etc/puppetlabs/code/environments/production/manifests
:
cd /etc/puppetlabs/code/environments/production/manifest
2.Cập nhật site.pp
để khai báo các mô-đun, lớp và tài nguyên cần áp dụng cho mỗi nút được quản lý:
node default {
}
node 'puppet.example.com' {
# ...
}
node 'puppet-agent-ubuntu.example.com' {
include accounts
resources { 'firewall':
purge => true,
}
Firewall {
before => Class['firewall::post'],
require => Class['firewall::pre'],
}
class { ['firewall::pre', 'firewall::post']: }
}
node 'puppet-agent-centos.example.com' {
include accounts
resources { 'firewall':
purge => true,
}
Firewall {
before => Class['firewall::post'],
require => Class['firewall::pre'],
}
class { ['firewall::pre', 'firewall::post']: }
}
3.Theo mặc định, dịch vụ tác nhân Puppet trên các nút được quản lý của bạn sẽ tự động kiểm tra với máy chủ chính sau mỗi 30 phút và áp dụng bất kỳ cấu hình mới nào từ máy chủ chính. Bạn cũng có thể gọi thủ công quy trình tác nhân Puppet giữa các lần chạy tác nhân tự động.
Đăng nhập vào từng nút được quản lý (với tư cách là root) và chạy tác nhân Puppet:
/opt/puppetlabs/bin/puppet agent -t
4.Để đảm bảo tác nhân Puppet hoạt động:
- Đăng xuất khỏi phiên SSH gốc của bạn và đăng nhập lại với tư cách là người dùng giới hạn đã được tạo.
- Kiểm tra các quy tắc tường lửa của nút:
sudo iptables -L
Xin chúc mừng! Bạn đã cài đặt thành công Puppet trên một máy chủ chính và hai nút được quản lý. Bây giờ bạn đã xác nhận mọi thứ đang hoạt động, bạn có thể tạo thêm các mô-đun để tự động hóa việc quản lý cấu hình trên các nút của mình. Để biết thêm thông tin, hãy xem tài liệu nguồn mở của Puppet . Bạn cũng có thể cài đặt và sử dụng các mô-đun mà người khác đã tạo trên Puppet Forge .
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
Nguồn: https://www.linode.com/docs/guides/getting-started-with-puppet-6-1-basic-installation-and-setup/