# 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**

```bash
useradd max
passwd max
vi /etc/sudoers 
max ALL=(ALL:ALL) ALL
```

**ssh, change port for security**

```shell
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**

```shell
sudo yum -y install mariadb-server mariadb
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
mysql_secure_installation
```

**Install Apache**

```shell
sudo yum -y install httpd
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
```

**Cinfigure Firewall**

```shell
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**

```shell
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.

```shell
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

```shell
sudo usermod -a -G root max
sudo usermod -a -G apache max
```

Install Python plus Libraries for maxtrack (runtracker)

```shell
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](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`

```shell
# 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

```shell
# 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

```shell
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](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](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/](https://tecadmin.net/install-awstats-apache-log-analyzer-on-ubuntu/)

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

### Add site

1. ga naar /etc/awstats
2. create new file awstats.xxx.conf waarbij xxx de domeinnaam is, bijvoorbeeld awstats.roc.ovh.conf
3. pas file aan, pas de domainnaam aan en pas de naam van de logfile die moet worden ingelezen aan.
4. pas de awstats-update.sh file aan en zet de nieuwe domeinnaam in de eerste regel van de file (spreekt voor zich).
5. 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

<span class="s1">output data files: /var/lib/awstats  
</span><span class="s1">cronjob: /etc/awstats/awstats-update.sh</span>

##### <span class="s1">config file</span>

```p1
# /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

```shell
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

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