Máy chủ hoàn hảo – CentOS 8 với Apache, Postfix, Dovecot, Pure-FTPD, BIND và ISPConfig 3.2

theanh

Administrator
Nhân viên
Hướng dẫn này trình bày cách cài đặt ISPConfig 3.2 trên máy chủ CentOS 8 (64Bit). ISPConfig là bảng điều khiển lưu trữ web cho phép bạn cấu hình các dịch vụ sau thông qua trình duyệt web: máy chủ web Apache, PHP, máy chủ thư Postfix, MySQL, máy chủ tên BIND, PureFTPd, SpamAssassin, ClamAV, Mailman và nhiều dịch vụ khác.

1 Yêu cầu​

Để cài đặt hệ thống như vậy, bạn sẽ cần những thứ sau:
  • Hệ thống máy chủ tối thiểu Centos 8. Đây có thể là máy chủ được cài đặt từ đầu như mô tả trong hướng dẫn về máy chủ tối thiểu Centos 8 của chúng tôi hoặc máy chủ ảo hoặc máy chủ gốc từ công ty lưu trữ có cài đặt thiết lập Centos 8 tối thiểu.
  • Kết nối Internet nhanh.

2 Lưu ý sơ bộ​

Trong hướng dẫn này, tôi sử dụng tên máy chủ server1.example.com với địa chỉ IP 192.168.0.100 và cổng 192.168.0.1. Các thiết lập này có thể khác nhau đối với bạn, vì vậy bạn phải thay thế chúng khi cần thiết.

3Chuẩn bị máy chủ​

Thiết lập bố cục bàn phím

Trong trường hợp bố cục bàn phím của máy chủ không khớp với bàn phím của bạn, bạn có thể chuyển sang bàn phím phù hợp (trong trường hợp của tôi là "de" cho bố cục bàn phím tiếng Đức, bằng lệnh localectl:
Mã:
localectl set-keymap de
Để có danh sách tất cả các bản đồ phím khả dụng, hãy chạy:
Mã:
localectl list-keymaps
Tôi muốn cài đặt ISPConfig ở cuối hướng dẫn này, ISPConfig đi kèm với tập lệnh tường lửa Bastille mà tôi sẽ sử dụng làm tường lửa, do đó, tôi tắt tường lửa CentOS mặc định ngay bây giờ. Tất nhiên, bạn có thể thoải mái bật tường lửa CentOS và cấu hình theo nhu cầu của mình (nhưng sau đó bạn không nên sử dụng bất kỳ tường lửa nào khác vì rất có thể nó sẽ can thiệp vào Tường lửa CentOS).

Chạy...
Mã:
dnf -y install net-tools wget rsyslog curl
systemctl stop firewalld.service
systemctl disable firewalld.service
để dừng và vô hiệu hóa tường lửa CentOS. Không sao khi bạn gặp lỗi ở đây, điều này chỉ cho biết tường lửa chưa được cài đặt.

Sau đó, bạn nên kiểm tra xem tường lửa đã thực sự bị vô hiệu hóa chưa. Để thực hiện, hãy chạy lệnh:
Mã:
iptables -L
Đầu ra sẽ trông như thế này:
Mã:
[root@server1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Mã:
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Mã:
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Hoặc sử dụng lệnh firewall-cmd:
Mã:
firewall-cmd --state
Mã:
[root@server1 ~]# firewall-cmd --state
not running
[root@server1 ~]#
Bây giờ tôi sẽ cài đặt trình chỉnh sửa cấu hình mạng và trình chỉnh sửa dựa trên shell "nano" mà tôi sẽ sử dụng trong các bước tiếp theo để chỉnh sửa cấu hình tệp:
Mã:
dnf -y install nano wget NetworkManager-tui yum-utils
Nếu bạn chưa cấu hình card mạng trong quá trình cài đặt, bạn có thể thực hiện ngay bây giờ. Chạy...
Mã:
nmtui
... và đi đến Chỉnh sửa kết nối:





Chọn giao diện mạng của bạn:





Sau đó, điền thông tin chi tiết về mạng của bạn - tắt DHCP và điền địa chỉ IP tĩnh, mặt nạ mạng, cổng của bạn và một hoặc hai máy chủ tên, sau đó nhấn Ok:



Tiếp theo, chọn OK để xác nhận những thay đổi bạn đã thực hiện trong cài đặt mạng



và Thoát để đóng công cụ cấu hình mạng nmtui.



Bạn nên chạy
Mã:
ifconfig
ngay bây giờ để kiểm tra xem trình cài đặt có nhận đúng địa chỉ IP của bạn không:
Mã:
[root@server1 ~]# ifconfig
ens33: flags=4163 mtu 1500
 inet 192.168.0.100 netmask 255.255.255.0 phát sóng 192.168.0.255
 inet6 fe80::20c:29ff:feee:b665 prefixlen 64 scopeid 0x20
[*] 
 inet6 2003:e1:bf22:1b00:20c:29ff:feee:b665 prefixlen 64 scopeid 0x0
 ether 00:0c:29:ee:b6:65 txqueuelen 1000 (Ethernet)
 Gói RX 2874 byte 1369892 (1,3 MiB)
 Lỗi RX 0 bị loại bỏ 546 tràn 0 khung 0
 Gói TX 968 byte 160901 (157,1 KiB)
 Lỗi TX 0 bị loại bỏ 0 tràn 0 sóng mang 0 va chạm 0
Mã:
lo: cờ=73 mtu 65536
 inet 127.0.0.1 netmask 255.0.0.0
 inet6 ::1 prefixlen 128 scopeid 0x10
 loop txqueuelen 1000 (Local Loopback)
 RX packets 0 byte 0 (0.0 B)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 0 byte 0 (0.0 B)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Nếu card mạng của bạn không hiển thị ở đó, thì nó không được bật khi khởi động. Trong trường hợp này, hãy mở tệp /etc/sysconfig/network-scripts/ifcfg-eth0
Mã:
nano /etc/sysconfig/network-scripts/ifcfg-ens33
và đặt ONBOOT thành yes:
Mã:
[...]
ONBOOT=yes
[...]
và khởi động lại máy chủ.

Kiểm tra /etc/resolv.conf của bạn xem nó có liệt kê tất cả các máy chủ tên mà bạn đã cấu hình trước đó không:
Mã:
cat /etc/resolv.conf
Nếu máy chủ tên bị thiếu, hãy chạy
Mã:
nmtui
và thêm lại các máy chủ tên bị thiếu.

Bây giờ, chuyển sang cấu hình...

Điều chỉnh /etc/hosts và /etc/hostname

Tiếp theo, chúng ta sẽ chỉnh sửa /etc/hosts. Làm cho nó trông như thế này:
Mã:
nano /etc/hosts
Mã:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100 server1.example.com server1

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Đặt tên máy chủ trong tệp /etc/hostname. Tệp phải chứa tên miền đủ điều kiện (ví dụ: server1.example.com trong trường hợp của tôi) chứ không chỉ tên viết tắt như "server1". Mở tệp bằng trình chỉnh sửa nano:
Mã:
nano /etc/hostname
Và đặt tên máy chủ trong tệp.
Mã:
server1.example.com
Lưu tệp và thoát nano.

Đặt SELinux thành permissive

SELinux là tiện ích mở rộng bảo mật của CentOS, có thể cung cấp bảo mật mở rộng. ISPConfig không đi kèm với bộ quy tắc SELinux, do đó, tôi đặt thành permissive (điều này là bắt buộc nếu bạn muốn cài đặt ISPConfig sau này).

Chỉnh sửa /etc/selinux/config và đặt SELINUX=permissive:
Mã:
nano /etc/selinux/config
Mã:
# Tệp này kiểm soát trạng thái của SELinux trên hệ thống.# SELINUX= có thể lấy một trong ba giá trị sau:# enforcing - Chính sách bảo mật SELinux được thực thi.# permissive - SELinux in cảnh báo thay vì thực thi.# disabled - Không có chính sách SELinux nào được tải.SELINUX=permissive# SELINUXTYPE= có thể lấy một trong hai giá trị sau:# targeted - Các quy trình được nhắm mục tiêu được bảo vệ,# mls - Bảo vệ bảo mật nhiều cấp độ.SELINUXTYPE=targeted
Sau đó, chúng ta phải khởi động lại hệ thống:
Mã:
khởi động lại

4Kích hoạt kho lưu trữ bổ sung và cài đặt một số phần mềm​

Đầu tiên, chúng ta nhập khóa GPG cho các gói phần mềm:
Mã:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Sau đó, chúng ta kích hoạt kho lưu trữ EPEL trên hệ thống CentOS của mình vì nhiều gói mà chúng ta sẽ cài đặt trong quá trình hướng dẫn này không có sẵn trong kho lưu trữ CentOS 8 chính thức:
Mã:
dnf -y install epel-release
Kích hoạt Power Tools:
Mã:
dnf config-manager --set-enabled powertools
Sau đó, chúng ta cập nhật kho lưu trữ hiện có của mình các gói trên hệ thống:
Mã:
dnf -y update
Bây giờ chúng ta cài đặt một số gói phần mềm cần thiết sau này:
Mã:
dnf -y groupinstall 'Development Tools'

5 Quota​

(Nếu bạn đã chọn một lược đồ phân vùng khác với tôi, bạn phải điều chỉnh chương này để hạn ngạch áp dụng cho các phân vùng mà bạn cần.)

Để cài đặt hạn ngạch, chúng ta chạy lệnh này:
Mã:
dnf -y install quota
Bây giờ chúng ta kiểm tra xem hạn ngạch đã được bật cho hệ thống tệp nơi lưu trữ trang web (/var/www) và dữ liệu Maildir (var/vmail) hay chưa. Trong thiết lập ví dụ này, tôi có một phân vùng gốc lớn, vì vậy tôi tìm kiếm ' / ':
Mã:
mount | grep ' / '
Mã:
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#
Nếu bạn có phân vùng /var riêng, hãy sử dụng:
Mã:
mount | grep ' /var '
thay thế. Nếu dòng chứa từ "noquota", hãy tiến hành các bước sau để bật hạn ngạch.

Bật hạn ngạch trên phân vùng / (root)​

Thông thường, bạn sẽ bật hạn ngạch trong tệp /etc/fstab, nhưng nếu hệ thống tệp là hệ thống tệp gốc "/", thì hạn ngạch phải được bật bằng tham số khởi động của Linux Kernel.

Chỉnh sửa tệp cấu hình grub:
Mã:
nano /etc/default/grub
Tìm kiếm dòng bắt đầu bằng GRUB_CMDLINE_LINUX và thêm rootflags=uquota,gquota vào tham số dòng lệnh để dòng kết quả trông như thế này:
Mã:
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rootflags=uquota,gquota"
và áp dụng các thay đổi bằng cách chạy lệnh sau.
Mã:
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg
và khởi động lại máy chủ.
Mã:
khởi động lại
Bây giờ hãy kiểm tra xem hạn ngạch có đã bật:
Mã:
mount | grep ' / '
Mã:
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#
Khi quota đang hoạt động, chúng ta có thể thấy "usrquota,grpquota" trong danh sách tùy chọn gắn kết.

Bật quota trên phân vùng /var riêng biệt​

Nếu bạn có phân vùng /var riêng biệt, hãy chỉnh sửa /etc/fstab và thêm ,uquota,gquota vào phân vùng / (/dev/mapper/centos-var):
Mã:
nano /etc/fstab
Mã:
#
# /etc/fstab
# Được tạo bởi anaconda vào CN 21/09/2014 16:33:45
#
# Các hệ thống tập tin có thể truy cập được, theo tham chiếu, được duy trì trong '/dev/disk'
# Xem các trang hướng dẫn fstab(5), findfs(8), mount(8) và/hoặc blkid(8) để biết thêm thông tin
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0
Sau đó chạy
Mã:
mount -o remount /var
Mã:
quotacheck -avugm
quotaon -avug
để bật hạn ngạch. Khi bạn gặp lỗi không có phân vùng nào được bật hạn ngạch, hãy khởi động lại máy chủ trước khi tiếp tục.

6 Cài đặt Apache, PHP, MySQL và phpMyAdmin​

Bật kho lưu trữ Remi để có phiên bản PHP mới hơn (hiện tại là PHP 7.4):
Mã:
dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf -y install yum-utils
dnf -y module reset php
dnf -y module install php:remi-7.4
dnf update
Chúng ta có thể cài đặt các gói cần thiết chỉ bằng một lệnh duy nhất:
Mã:
dnf -y install httpd mod_ssl mariadb-server php php-mysqlnd php-mbstring
Để đảm bảo máy chủ không thể bị tấn công thông qua HTTPOXYvulnerability, chúng tôi sẽ vô hiệu hóa tiêu đề HTTP_PROXY trong apache trên toàn cầu.

Thêm quy tắc tiêu đề apache vào cuối tệp httpd.conf:
Mã:
echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf
Và khởi động lại httpd để áp dụng thay đổi cấu hình.
Mã:
service httpd restart
Cài đặt phpMyAdmin:
Mã:
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
tar xzvf phpMyAdmin-5.0.2-all-languages.tar.gz
mkdir /usr/share/phpmyadmin
mv phpMyAdmin-5.0.2-all-languages/* /usr/share/phpmyadmin/
mkdir /usr/share/phpmyadmin/tmp
chown -R apache:apache /usr/share/phpmyadmin
chmod 777 /usr/share/phpmyadmin/tmp

Tùy chọn: Thay đổi Mô-đun Apache MPM​

CentOS 8 sử dụng mô-đun Sự kiện Apache MPM theo mặc định, điều này tốt ở một khía cạnh, vì nó cho phép bạn sử dụng giao thức HTTP/2. Mặt khác, nó không cho phép bạn sử dụng mô-đun apache mod_php. Nhìn chung, người ta nên sử dụng PHP-FPM làm mặc định ngày nay và ISPConfig hỗ trợ điều đó. Trong trường hợp bạn cần chế độ mod_php cũ vì lý do tương thích, thì bạn có thể chuyển đổi Apache MPM như sau:
Mã:
nano /etc/httpd/conf.modules.d/00-mpm.conf
Thêm # vào trước dòng sự kiện MPM để trông như thế này:
Mã:
# LoadModule mpm_event_module modules/mod_mpm_event.so
Sau đó xóa # ở trước dòng MPM Prefork để trông như thế này:
Mã:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Sau đó khởi động lại httpd để áp dụng thay đổi cấu hình.
Mã:
service httpd restart

7 Cài đặt Dovecot​

Dovecot có thể được cài đặt như sau:
Mã:
dnf -y install dovecot dovecot-mysql dovecot-pigeonhole
Tạo một tệp dovecot-sql.conf trống và tạo liên kết tượng trưng:
Mã:
touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf
Bây giờ hãy tạo các liên kết khởi động hệ thống và khởi động Dovecot:
Mã:
systemctl enable dovecot
systemctl start dovecot

8 Cài đặt Postfix​

Postfix có thể được cài đặt như sau:
Mã:
dnf -y install postfix postfix-mysql
Tiếp theo, mở các cổng TLS/SSL và submission trong Postfix:
Mã:
nano /etc/postfix/master.cf
Bỏ chú thích các phầnsubmissionvàsmtpsnhư sau và thêm các dòng nếu cần để phần này của tệp master.cf trông giống hệt như phần bên dưới.QUAN TRỌNG:Xóa dấu # trước các dòng bắt đầu bằng smtps và submission too chứ không chỉ từ các dòng -o sau các dòng này!
Mã:
[...]
submission inet n - n - - smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated, từ chối
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated, từ chối
# -o milter_macro_daemon_name=ĐANG GỐC
smtps inet n - n - - smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=có
 -o smtpd_sasl_auth_enable=có
 -o smtpd_client_restrictions=cho phép_sasl_đã xác thực,từ chối
# -o smtpd_reject_unlisted_recipient=không
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[...]
Sau đó tắt Sendmail và khởi động Postfix và MariaDB (MySQL):
Mã:
systemctl enable mariadb.service
systemctl start mariadb.service
Mã:
systemctl enable postfix.service
systemctl restart postfix.service
Chúng tôi vô hiệu hóa sendmail để đảm bảo rằng nó không khởi động trong trường hợp nó được cài đặt trên máy chủ của bạn. Do đó, thông báo lỗi "Không thể phát hành lệnh gọi phương thức: Đơn vị sendmail.service không được tải." có thể bỏ qua.

Để bật hỗ trợ cho các thiết bị cũ/lỗi thời, hãy chạy lệnh này (tùy chọn, chỉ sử dụng khi bạn muốn các thiết bị thư cũ kết nối vì nó làm suy yếu thiết lập SSL/TLS bằng cách cho phép các mã hóa kém an toàn hơn):
Mã:
update-crypto-policies --set LEGACY

9 Cài đặt Getmail​

Getmail có thể được cài đặt như sau:
Mã:
dnf install python2
cd /tmp
wget http://pyropus.ca/software/getmail/old-versions/getmail-5.14.tar.gz
tar xvfz getmail-5.14.tar.gz
cd getmail-5.14
python2 setup.py build
python2 setup.py install

10 Thiết lập mật khẩu MySQL và cấu hình phpMyAdmin​

Thiết lập mật khẩu cho tài khoản root MySQL:
Mã:
mysql_secure_installation
Mã:
[root@server1tmp]#mysql_secure_installation


LƯU Ý: KHUYẾN NGHỊ CHẠY TẤT CẢ CÁC PHẦN CỦA Script này CHO TẤT CẢ CÁC MÁY CHỦ MariaDB ĐANG SỬ DỤNG TRONG SẢN XUẤT! VUI LÒNG ĐỌC KỸ TỪNG BƯỚC!
Mã:
Để đăng nhập vào MariaDB để bảo mật, chúng ta sẽ cần mật khẩu hiện tại của người dùng root. Nếu bạn vừa cài đặt MariaDB và 
chưa đặt mật khẩu root, mật khẩu sẽ để trống, 
do đó, bạn chỉ cần nhấn enter ở đây.
Mã:
Nhập mật khẩu hiện tại cho root (nhập nếu không có): 
OK, mật khẩu đã sử dụng thành công, tiếp tục...
Mã:
Thiết lập mật khẩu gốc đảm bảo rằng không ai có thể đăng nhập vào MariaDB
người dùng gốc mà không có thẩm quyền thích hợp.

Đặt mật khẩu gốc?[Y/n]
 
Back
Bên trên