Bu döküman The Perfect Server – CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3) isimli dökümanın Türkçe çevirisi ve iyileştirilmiş versiyonudur.
Dökümana başlamadan önce hatırlatmamız gereken bazı noktalar var. Bu döküman ilk kez kurulmuş bir CentOS 7 işletim sistemi üzerine Web server (nginx), Mail server (dovecot), MySQL, PHP 7 ve IspConfig yazılımının kurulumunu içermektedir. Bunun için temiz kurulmuş bir CentOS 7 işletim sistemine ve ssh erişimine ihtiyacımız vardır. Eğer sunucu yakınınızdaysa bash ile login olmanız yeterlidir. Bu dökümanda CentOS 7 kurulumu anlatılmamaktadır. İşletim sistemi kurulumundan sonraki aşamaları anlatmaktadır. Burada yaptığımız tüm işlemleri root kullanıcısıyla yapmaktayız.
EPEL Repo Ve Bazı Ek Programların Kurulumu
EPEL açılımı Extra Packages for Enterprise Linux olan ve Redhat’ın Fedora projesine yaptığı katkılarını barındıran bir bir yazılım deposudur. Enterprise Linux sunucularının yönetiminde çok sıklıkla kullanılan programlar bu depo içerisindedir. EPEL hakkında daha detaylı bilgi için tıklayın.
yum -y install epel-release yum-priorities
Epel depoyu ve yum-priorities paketlerini kurduktan sonra epel repo tanımlamalarının bulunduğu dosyanın önceliğini ayarlıyoruz. Bunun için priority=10 ifadesini [epel] bölümüne ekliyoruz.
nano /etc/yum.repos.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 7 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [...]
Artık işletim sistemimizi güncelleyebiliriz. Tüm paketlerin güncellenmesi birkaç dakika sürebilir.
yum -y update
Güncelleme bittikten sonra ‘Development Tools’ grubunda bulunan paketleri kurabiliriz. Bu grupta şu paketler mevcuttur: zip, cpp, doxygen, gcc-g++, glibc-devel, m4, bazı Perl ve Python paketleri, rpm dosyalarının yönetimiyle ilgili paketler vs…
yum -y groupinstall 'Development Tools' yum -y install nano wget htop net-tools NetworkManager-tui
hostname Bilgisini Ayarlamak
Her bilgisayarın ağda tanımlı bir ismi vardır. Bu isim web domain adresinden farklı olabilir. Sunuculara isim tanımlamanın amacı birden fazla sunucumuz olduğunda karmaşıklığı önlemek ve yönetimi kolaylaştırmaktır. Örnek olarak biz s100.nixarsoft.com adresini kurulum yapacağımız sunucuya tanımlayacağız. Siz kendi domaininizi veya sadece “s1”, “server2”, “sunucu1” gibi isimler de verebilirsiniz. Fakat bunun için öncelikle sunucumuza tanımlanmış olan IP adresini listeleyelim.
ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 170.210.10.100 netmask 255.255.255.0 broadcast 170.210.10.255 ether 00:50:56:40:33:1e txqueuelen 1000 (Ethernet) RX packets 246619 bytes 44477721 (42.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 219987 bytes 37732901 (35.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Burada kalın olarak işaretlediğim IP adresine host bilgisini tanımlayacağız.
nano /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 170.210.10.100 s100.nixarsoft.com s100 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Artık “ping s100” yazdığımızda 170.210.10.100 adresine ping attığını görebilirsiniz. Sıradaki işlemimiz hostname bilgisini ayarlamak ve sistemi yeniden başlatmak.
echo 's100.nixarsoft.com' > /etc/hostname reboot
Güvenlik Duvarını Kapatmak
ISPConfig kendi güvenlik duvarı servisiyle birlikte gelmektedir. Bu yüzden CentOS’un güvenlik duvarını kapatmamız gerekmektedir.
systemctl stop firewalld.service systemctl disable firewalld.service
Güvenlik duvarının çalışmadığından emin olmak için aşağıdaki komutu yazıyoruz. Çıktısının “not running” şeklinde olması gerekmektedir.
firewall-cmd --state not running
SELinux’u Pasifleştirmek
SELinux’un amacı işletim sisteminin güvenliğini arttırmaktır. Açılımı Security Enhanced Linux’tur fakat bu özellik faydadan daha çok problem çıkarmaktadır. Bu yüzden bu özelliği iptal etmemiz gerekmektedir.
nano /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
Buradaki “SELINUX” yazan satırı “disabled” şeklinde ayarlıyoruz ve reboot komutuyla sistemi yeniden başlatıyoruz.
reboot
quota (kota) Kurulumu
Hosting veya e-posta hesaplarına kota tanımlamamız gerekebilir. Bunu ISPConfig üzerinden yapabilmek için işletim sistemi çekirdeğinde quota özelliğini aktifleştirmemiz gerekmektedir. Öncelikle quota paketini kuruyoruz:
yum -y install quota
Ardından sisteme bağlanmış olan dizinlerin quota durumunu sorguluyoruz:
mount | grep ' / ' [[email protected] ~]# mount | grep ' / ' /dev/sda2 on / type ext4 (rw,noatime,data=ordered)
Gördüğünüz gibi herhangi bir kota ifadesi mevcut değil. Bazı işletim sistemlerinde çıktı olarak “noquota” ifadesi mevcut olabilir. Her iki durumda da quota özelliği aktif değil anlamına gelmektedir. Şimdi quota özelliğini aktifleştirmeye başlayabiliriz. Bu özellik çekirdeğe tanımlanacağı için “grub” dosyasını düzenlememiz gerekmektedir.
nano /etc/default/grub
Burada “GRUB_CMDLINE_LINUX” ile başlayan bir satır mevcut. Bu satırın atandığı tırnaklı ifadenin en sonuna rootflags=uquota,gquota ifadesini ekliyoruz:
GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet rootflags=usrquota,grpquota"
Bu konfigürasyonun aktif olabilmesi için grub’u tekrar oluşturuyoruz:
# grub config dosyasının yedeğini al cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak # grubu tekrar oluştur grub2-mkconfig -o /boot/grub2/grub.cfg # yeniden başlat reboot
Şimdi tekrar bağlanmış olan dizinlerin quota durumunu sorguluyoruz:
[[email protected] ~]# mount | grep ' / ' /dev/sda2 on / type ext4 (rw,noatime,quota,usrquota,grpquota,data=ordered) [[email protected] ~]#
Artık ISPConfig üzeirnden hosting oluştururken kota belirleyebiliriz.
Sistem Tarihini Senkronize Etmek
Sistemin tarih saat bilgisini NTP (Network Time Protocol) ile senkronize etmek faydalı olacaktır.
yum -y install ntp
MySQL Kurulumu
Web projelerinde en çok MySQL 5.7 tercih edilmektedir. Fakat CentOS’un standart depolarında Mariadb mevcuttur. Biz MySQL depolarını kurup ardından 5.7 deposunu aktifleştirip ondan sonra kurulum gerçekleştireceğiz. Öncelikle MySQL deposunu kuruyoruz:
yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
Şimdi MySQL community server paketini kurabiliriz:
yum -y install mysql-community-server
Şimdi MySQL servisinin başlatıp etkinleştirelim:
systemctl start mysqld systemctl enable mysqld
MySQL’i ilk defa başlattığımızda kendisi otomatik olarak bir root şifresi belirleyip log dosyasına yazar. Buradan şifreyi bulabiliriz:
grep 'temporary' /var/log/mysqld.log 2020-07-18T09:00:26.217513Z 1 [Note] A temporary password is generated for [email protected]: xUb)0Y:fr!Dz 2020-07-18T09:00:28.782901Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
Bu şifreyi değiştirmek güvenlik açısından gerekli ve önemlidir. Şimdi MySQL root şifremizi değiştirelim:
mysql -u root -p [yukarıdaki şifreyi girip enter tuşuna basıyoruz]
MySQL komut satırına ulaştıktan sonra karmaşık bir şifre belirliyoruz. Şifreniz yeterince zor değilse password validation plugin size uyarı mesajı verecektir. Bu yüzden şifrenizde özel karakterler ve büyük küçük harf içermelidir. En kolay yöntemle az önceki şifrenin sonuna üç adet ünlem işareti koyarak şifrenizi kolayca belirleyebilirsiniz. İsterseniz bir sonraki aşamada anlatıldığı üzere bu eklentiyi iptal edip sonra tekrar root şifrenizi hatırlayabileceğiniz bir şifreyle tekrar değiştirebilirsiniz:
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xUb)0Y:fr!Dz!!!'; > flush privileges;
Eğer şifre doğrulama eklentisini (validate_password) iptal etmek isterseniz MySQL komut satırındayken aşağıdaki komutla bu eklentiyi kaldırabilirsiniz:
> uninstall plugin validate_password;
Dovecot Kurulumu
Dovecot IMAP ve POP3 sunucusudur. E-posta gönderme ve alma işlemleri için gereklidir. Öncelikle dovecot paketini ve mysql bağlantı paketini kuruyoruz:
yum -y install dovecot dovecot-pigeonhole dovecot-mysql
Ardından dovecot sql bağlantısı için gerekli olan konfigürasyon dosyasını oluşturup gerekli yere soft link yapıyoruz:
touch /etc/dovecot/dovecot-sql.conf ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
Artık dovecot servisini başlatıp aktifleştirebiliriz:
systemctl enable dovecot.service systemctl start dovecot.service
Postfix ve Getmail Kurulumu
Postfix, Unix ve türevi işletim sistemlerinde kullanılan bir açık kaynaklı e-posta aktarma ajanıdır. E-posta gönderebilmek için gereklidir. CentOS kurulumunda sendmail isimli program bu işlemi gerçekleştirir ama biz postfix kullanacağız:
yum -y install postfix
Kurulumu yaptıktan sonra sendmail’i disable edip diğer gerekli servisleri başlatıyoruz::
systemctl restart mysld systemctl disable sendmail systemctl enable postfix systemctl restart postfix
Şimdi getmail kurabiliriz:
yum -y install getmail
Antivirüs (ClamAV) ve Spam Blocker (SpamAssassin) Kurulumu
E-postalarda virüslü eklentiler, kod blokları ve spam içerikler gelecektir. Tüm bunları bloklamak ve temizlemek için bu yazılımları kurmak gerekmektedir.
yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 perl-DBD-mysql
Rar dosyalarını açabilmek ve Rar dosyası oluşturabilmek için de aşağıdaki işlemleri yapıyoruz:
wget https://www.rarlab.com/rar/rarlinux-x64-5.5.0.tar.gz tar -zxvf rarlinux-x64-5.5.0.tar.gz cd rar sudo cp -v rar unrar /usr/local/bin/
Freshclam konfigürasyonunu yapmak için aşağıdaki komutu yazıyoruz:
nano /etc/freshclam.conf
Burada “Example” satırının yorum satırı olarak ayarlandığından emin olmamız gerekiyor:
[....] # Example [....]
Şimdi gerekli servisleri başlatabiliriz:
sa-update freshclam systemctl enable amavisd.service
PHP 7.4 Kurulumu
CentOS’un standart depolarında PHP’nin eski versiyonu mevcut. Biz şuan en çok tercih edilen versiyon olan PHP 7.4 kurulumunu yapmak için farklı bir depo kullanacağız. İlk aşamamız yum-utils paketini kurmak. Bu paket içerisinde yum paket yöneticisiyle ilgili bazı komutlar mevcut:
yum -y install yum-utils
Ardından Remi isimli depoyu kuracağız. Bu depoda farklı PHP versiyonları mevcut. İlerleyen aşamada kurmak istediğimiz PHP versiyonunu aktifleştireceğiz:
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm Total size: 26 k Installed size: 26 k Is this ok [y/d/N]: y <------------ Burada "y" yazıp Enter tuşuna basıyoruz
Depo kuruldu. Bu depo içerisinde farklı PHP versiyonları mevcut. Aşağıdaki komutu yazarak 7.4 versiyonunu içeren depoyu aktifleştiriyoruz:
yum-config-manager --enable remi-php74
Şimdi depolarda olan PHP versiyonlarını listeleyelim:
yum search php74
Burada çıkan paketlerden ihtiyacımız olanları seçebiliriz. Bu dökümanda en çok ihtiyaç duyulan paketleri burada kuracağız:
yum -y install php74 php74-php php74-php-bcmath php74-php-cli php74-php-common php74-php-dbg php74-php-devel php74-php-fpm php74-php-gd php74-php-gmp php74-php-imap php74-php-intl php74-php-json php74-php-ldap php74-php-mbstring php74-php-mysqlnd php74-php-opcache php74-php-pdo php74-php-pear php74-php-pecl-base58 php74-php-pecl-csv php74-php-pecl-ip2location php74-php-pecl-mcrypt php74-php-pecl-memcache php74-php-pecl-psr php74-php-pecl-rar php74-php-pecl-redis5 php74-php-pecl-recode php74-php-pecl-uuid php74-php-pecl-zip php74-php-pecl-zmq php74-php-pgsql php74-php-phpiredis php74-php-tidy php74-php-soap php74-php-xml php74-php-xmlrpc
PHP’yi Remi deposundan kurduğumuz için farklı bir folder içerisine php-cli yazılımını kurar. Bu folder $PATH değişkeni içerisinde olmadığı için PHP çalıştırılabilir dosyasını $PATH değişkeninde bulunan herhangi bir klasöre linkliyoruz:
ln -s /opt/remi/php74/root/bin/php /usr/bin/php [[email protected] ~]# php --version PHP 7.4.8 (cli) (built: Jul 9 2020 08:57:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.8, Copyright (c), by Zend Technologies
Şimdi php.ini dosyasına bazı değişiklikler yapmamız gerekiyor:
nano /etc/opt/remi/php74/php.ini
Öncelikle error_reporting ifadesini aşağıdaki gibi güncelleyelim:
[...] ;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT error_reporting = E_ALL & ~E_NOTICE [...]
Sonra cgi.fix_pathinfo=0: ifadesini aktifleştirelim. Bu satırın sol tarafındaki noktalı virgülü kaldırıyoruz:
cgi.fix_pathinfo=0:
Ardından timezone ayarını yapıyoruz:
date.timezone = 'Europe/Istanbul'
Bu dosya içerisinde farklı ayarlar da yapabilirsiniz. Dosya yükleme limiti (upload_max_filesize), post max size (post_max_size), short_open_tag vs…
Şimdi PHP-FPM servisini başlatıyoruz. Nginx arkaplanda bu servisle iletişim kurmaktadır:
systemctl restart php74-php-fpm systemctl enable php74-php-fpm
Nginx ve Fcgiwrap Kurulumu
Apache sunucusunu durdurup disable ettikten sonra nginx sunucusunu kuracağız:
systemctl stop httpd.service systemctl disable httpd.service yum -y install nginx # nginx kurulumu burada systemctl enable nginx.service systemctl restart nginx.service
ISPConfig kurulum esnasında Apache veya Nginx seçimini soracaktır. Burada Nginx seçmemiz gerekiyor. Şimdi Fcgiwrap yazılımını kuruyoruz. CentOS depolarında bu paket mevcut olmadığından kaynak koddan derleyerek kurulum gerçekleştireceğiz. Kaynak koddan derleyebilmek için öncelikle fcgi-devel paketini kurmamız gerekiyor :
yum -y install fcgi-devel
Şimdi kaynak koddan kuruluma geçebiliriz:
cd /usr/local/src/ git clone git://github.com/gnosek/fcgiwrap.git cd fcgiwrap autoreconf -i ./configure make make install
Bu işlem fcgiwrap programını /usr/local/sbin/fcgiwrap adresine yükler. Şimdi spawn-fcgi paketini kurark fcgiwrap programını daemon olarak çalışmasını sağlıyoruz:
yum -y install spawn-fcgi
Şimdi spawn-fcgi servisinin ayar dosyasını aşağıdaki gibi güncelliyoruz. Kırmızıyla işaretlenmiş olan satırları dosyanın sonuna ekleyeceğiz:
nano /etc/sysconfig/spawn-fcgi # You must set some working options before the "spawn-fcgi" service will work. # If SOCKET points to a file, then this file is cleaned up by the init script. # # See spawn-fcgi(1) for all possible options. # # Example : #SOCKET=/var/run/php-fcgi.sock #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=apache FCGI_GROUP=apache FCGI_EXTRA_OPTIONS="-M 0770" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
İşlemlerin geçerli olabilmesi için aşağıdaki komutları sırayla giriyoruz:
usermod -a -G apache nginx chkconfig spawn-fcgi on systemctl restart spawn-fcgi systemctl enable spawn-fcgi
Bu işlemleri yaptıktan sonra fcgiwrap soken dosyasını /var/run/fcgiwrap.socket adresinde göründüğünden emin olmamız gerekiyor. Bu soket dosyasının kullanıcısı ve grubu apache olmalı. Bu yüzden nginx kullanıcısını apache grubuna dahil ettik.
ls -lha /var/run/fcgiwrap.socket
srwxrwx--- 1 apache apache 0 Jul 20 11:50 /var/run/fcgiwrap.socket
0 yorum