CentOS 7
How to install a webserver on CentOS7 from scratch

Install Apache, MariaDB, PHP73 on CentOS 7
Installation done on OVH VPS (last time augustus 2019) 

 Add normal user to work under 

 useradd max

passwd max

vi /etc/sudoers 

max ALL=(ALL:ALL) ALL 

 ssh, change port for security 

 vi /etc/ssh/sshd_config (change port 22 to 1122)

service sshd restart

semanage port -a -t ssh_port_t -p tcp 1122

sudo firewall-cmd --list-all

sudo firewall-cmd --permanent --zone=public --add-port=1122/tcp 

 Install MariaDB 

 sudo yum -y install mariadb-server mariadb

sudo systemctl start mariadb.service

sudo systemctl enable mariadb.service

mysql_secure_installation 

 Install Apache 

 sudo yum -y install httpd

sudo systemctl start httpd.service

sudo systemctl enable httpd.service 

 Cinfigure Firewall 

 sudo firewall-cmd --permanent --zone=public --add-service=http 

sudo firewall-cmd --permanent --zone=public --add-service=https

sudo firewall-cmd --reload 

 Install PHP7.3 

 sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

sudo yum -y install yum-utils

sudo yum update

sudo yum-config-manager --enable remi-php73 

 Optional, fix issue ‘Loaded plugins: fastestmirror’; this message appears when installing PHP7.3 and installation is not executed. 

 sudo /etc/yum/pluginconf.d/fastestmirror.conf 

and change enabled=1 -> enabled=0

sudo yum -y install php php-opcache

sudo systemctl restart httpd.service 

 Add max (user) to groups 

 sudo usermod -a -G root max

sudo usermod -a -G apache max 

 Install Python plus Libraries for maxtrack (runtracker) 

 sudo yum -y install python-pip

pip install flask

pip install stravalib

pip install TinyDB 

 xxx 

 xxx

Get Certificates for Webserver
Use letsencrypt 

 https ssl install 

 Instruction from https://certbot.eff.org/lets-encrypt/centosrhel7-apache 

 Once installed, add certificate with: sudo certbot --apache 

 Renew certificates:  sudo certbot renew 

 crontab (auto renew) sudo crontab -e 

 # Minute Hour Day of Month Month Day of Week Command

# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)

1 7 * * 1 /usr/bin/certbot renew --quiet 

 Ubuntu 

 DNS 

 A Record: @ 12.13.14.15

CNAME Record: www domain.com 

 vhost 

 Rewrite Engine added by certbot 

 <VirtualHost>

ServerName domain.com

ServerAlias www.domain.com

DocumentRoot /var/www/domain

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on

RewriteCond %{SERVER_NAME} =www.domain.com [OR]

RewriteCond %{SERVER_NAME} =domain.com

RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost> 

 certbot 

 Eén domein heeft meerdere sub-domeinen: meldt ze in één keer aan. 

 Komt er één bij dan de complete regel opnieuw invoeren. 

 sudo certbot --apache -d domain.com -d www.domain.com 

 certbot - other 

 // delete

sudo certbot delete

//list

sudo certbot certificates 

 --

Yum
Belangrijkste yum commando's 

 # show installed packages

yum list installed

# Check for updates

yum check-update

# Repolist

yum repolist

# update

sudo yum update

iptables - block ipnummer
iptables is de (software) firewall van (o.m.) CentOS. In dit stukje leer je hoe je ipnummers kunt blokkeren met iptables. 

 Check op invalid logins. Meestal ssh 

 sudo grep failed /var/log/audit/audit.log* | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sort | uniq -c 

 Dit laat een lijstje zien van ip nummers waarvandaan failed login's zijn geregstreerd. Het getal voor het ip nummer is het aantal keren dat er een failed login heeft plaatsgevonden. 

 Stel ipnummer 45.119.53.58 komt meer dan 1000 keer voor. Dan kun je eerst proberen op te zoeken waar dit nummer vandaan komt. Daar zijn verschillende sites (bijvoorbeeld http://whois.domaintools.com ) voor en je kunt zelf ook databases downloaden. In dit geval komt dit nummer uit China. 

 Nu kun je dit ipnummer blokkeren. Beter nog is om heel het netwerk te blokeren. Meestal kun je als subnetmask /24 nemen daarmee blokkeer je 256 ip adressen. In dit geval blokkeer je dan 45.119.53.* 

 Je kunt ook nog meer blokkeren, bijvoobeeld het /16 netwerk oftewel 45.118.* dan blokkeer je 65 536 (64K) ip adressen. Maar dan moet je wel weten welke netwerken je dan allemaal blokkeert. Om dit te controleren heb je een uitgebreide datasabase nodig, die je kunt downloaden bij bijvoorbeeld https://lite.ip2location.com Op deze site kun je zelf ook een een lijst krijgen van bijvoorbeeld alle ipnummers uit Nederland. Dan kun je in ieder geval controleren of je geen Nederlandse ipnummers blokkeert. 

 Blokkeren zelf gebeurt met: 

 sudo iptables -A INPUT -s 45.119.53.0/24 -j DROP 

 In dit geval blokkeer je 45.119.53.* 

 Om te zien wat je hebt geblokeerd: 

 sudo iptables -L 

 Om alle blokkades op te heffen: 

 iptables -F INPUT 

  

awstats
stats 

 Install 

 Ubuntu: https://tecadmin.net/install-awstats-apache-log-analyzer-on-ubuntu/ 

 CentOS: https://tecadmin.net/steps-to-configure-awstats-on-centos-and-rhel-system/ 

 Add site 

 ga naar /etc/awstats 

 create new file awstats.xxx.conf waarbij xxx de domeinnaam is, bijvoorbeeld awstats.roc.ovh.conf 

 pas file aan, pas de domainnaam aan en pas de naam van de logfile die moet worden ingelezen aan. 

 pas de awstats-update.sh file aan en zet de nieuwe domeinnaam in de eerste regel van de file (spreekt voor zich). 

 edit vi /var/www/default/stats/index.php en voeg de site toe (voor de web toegang) 

 Vanuit de crontab wordt de awstats-update.sh file elke nacht gedraaid om 01:00 uur. 

 Let op dat de user waarvan uit de crontab wordt gedraaid toegang heeft tot de logfiles. 

 Test de awstats-update.sh door deze handmatig te draaien. 

 File locaties 

 output data files: /var/lib/awstats cronjob: /etc/awstats/awstats-update.sh 

 config file 

 # /etc/awstats/awstats.mijnsite.com.conf

LogFile="/var/log/apache2/mijnsite-access.log"

SiteDomain="mijnsite.com"

HostAliases="mijnsite.com www.mijnsite.com" 

 awstats-update.sh 

 for i in mijnsite.com anothersite.com andanothersite.com; do

 echo "---------------------------------------------------------"

 echo " Udate stats for:"$i

 echo "---------------------------------------------------------"

 perl /usr/lib/cgi-bin/awstats.pl -config=$i -update

done

# filter url from stats

find /var/lib/awstats/*.txt -exec sed -i 's/phpmyadmin\.717664/phpmyadmin-local/g' {} \; 

 crontab 

 0 2 * * * /etc/awstats/awstats-update.sh > /home/.../awstats/awstats-lastrun.log 

  