Files
homework25/README.md
2026-03-01 19:19:37 +03:00

162 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Домашнее задание 25
## Основы сбора и хранения логов
Для выполнение задания используется vagrant box Ubuntu 22.04
### Создание Vagrantfile
Зададим следующие характеристики для 2 VM
- CPU - 1
- Memory - 512mb
Создаем 2 VM, на VM **nginx** будет установлен серевер nginx, на VM **log-server** будем собирать слоги с сервера **nginx**
Готовый [Vagrantfile](Vagrantfile)
### Cоздание ansible.yml
Сценарий для Ansible будет выполнять следующие действия:
На хосте **nginx**:
1. Установка nginx, auditd и audispd-plugins
2. Настройка access_log для nginx, все логи мы отправляем на **log-server**
3. Настройка error_log для nginx, все логи мы отправляем на **log-server** и сохраняем локально
4. Настройка аудита файлов конфигурации nginx
5. Настройка отправки логов аудита на **log-server**
На VM **log-server**:
1. Настраиваем rsyslog на прием логов по TCP и UDP с удаленных хостов
2. Настраиваем rsyslog, что бы складывал логи с удаленных хостов в каталог /var/log/rsyslog/
3. Так как при отправки логов из auditd в **log-server** не корректно определятеся переменная $programname, делаем небольшую проверку
Готовый [ansible.yml](ansible.yml)
### Проверка
Запускаем vagrant
```bash
alex@ubuntu-pc:~/Документы/25$ vagrant up
Bringing machine 'nginx' up with 'virtualbox' provider...
Bringing machine 'log-server' up with 'virtualbox' provider...
==> nginx: Importing base box 'ubuntu/jammy64'...
==> nginx: Matching MAC address for NAT networking...
==> nginx: Checking if box 'ubuntu/jammy64' version '20241002.0.0' is up to date...
==> nginx: Setting the name of the VM: 25_nginx_1772380320937_95674
==> nginx: Clearing any previously set network interfaces...
==> nginx: Preparing network interfaces based on configuration...
nginx: Adapter 1: nat
nginx: Adapter 2: intnet
==> nginx: Forwarding ports...
...
...
=> log-server: Mounting shared folders...
log-server: /home/alex/Документы/25 => /vagrant
==> log-server: Running provisioner: ansible...
log-server: Running ansible-playbook...
PLAY [log-server] **************************************************************
TASK [Gathering Facts] *********************************************************
ok: [log-server]
TASK [enable UDP remote suslog] ************************************************
changed: [log-server]
TASK [enable UDP remote suslog port] *******************************************
changed: [log-server]
TASK [enable TCP remote suslog] ************************************************
changed: [log-server]
TASK [enable TCP remote suslog port] *******************************************
changed: [log-server]
TASK [conf remote suslog] ******************************************************
changed: [log-server]
RUNNING HANDLER [restart syslog] ***********************************************
changed: [log-server]
PLAY [nginx] *******************************************************************
skipping: no hosts matched
PLAY RECAP *********************************************************************
log-server : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```
Теперь требуется набрать немного логов для проверки.
1. На локальном хосте откроем несколько раз URL http://127.0.0.1:8080/
2. Для того, что бы появились ошибки, поправим права доступа к файлу index.nginx-debian.html на VM **nginx**.
```bash
vagrant@nginx:~$ sudo chmod 600 /var/www/html/index.nginx-debian.html
```
Еще раз на локальном хосте откроем несколько раз URL http://127.0.0.1:8080/
3. Отредаетируем файл конфигурации nginx на сервере **nginx** добавив в конец файла закомментированный текст
```bash
vagrant@nginx:~$ sudo sh -c 'echo "#test audit" >> /etc/nginx/nginx.conf'
```
Подключаемся по ssh к VM **log-server**, и смотрим какие логи у нас создались
```bash
vagrant@log-server:~$ ll /var/log/rsyslog/192.168.80.20/
total 44
drwxr-xr-x 2 syslog syslog 4096 Mar 1 16:04 ./
drwxr-xr-x 4 syslog syslog 4096 Mar 1 15:56 ../
-rw-r----- 1 syslog adm 27238 Mar 1 16:10 audit.log
-rw-r----- 1 syslog adm 1953 Mar 1 16:04 nginx_access.log
-rw-r----- 1 syslog adm 235 Mar 1 16:04 nginx_error.log
```
Видим, что audit.log, nginx_access.log и nginx_error.log создались. Посмотрим их содержимое.
**audit.log**
```bash
vagrant@log-server:~$ sudo tail /var/log/rsyslog/192.168.80.20/audit.log
Mar 1 16:10:08 192.168.80.20 type=USER_CMD msg=audit(1772381408.949:181): pid=3875 uid=1000 auid=1000 ses=6 subj=unconfined msg='cwd="/home/vagrant" cmd=7368202D63206563686F2022237465737420617564697422203E3E202F6574632F6E67696E782F6E67696E782E636F6E66 exe="/usr/bin/sudo" terminal=pts/0 res=success'#035UID="vagrant" AUID="vagrant"
Mar 1 16:10:08 192.168.80.20 type=CRED_REFR msg=audit(1772381408.949:182): pid=3875 uid=1000 auid=1000 ses=6 subj=unconfined msg='op=PAM:setcred grantors=pam_permit,pam_cap acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/0 res=success'#035UID="vagrant" AUID="vagrant"
Mar 1 16:10:08 192.168.80.20 type=USER_START msg=audit(1772381408.949:183): pid=3875 uid=1000 auid=1000 ses=6 subj=unconfined msg='op=PAM:session_open grantors=pam_limits,pam_env,pam_env,pam_permit,pam_umask,pam_unix acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/0 res=success'#035UID="vagrant" AUID="vagrant"
Mar 1 16:10:08 192.168.80.20 type=SYSCALL msg=audit(1772381408.949:184): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=55b416e6c7c8 a2=441 a3=1b6 items=2 ppid=3876 pid=3877 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=6 comm="sh" exe="/usr/bin/dash" subj=unconfined key="nginx_config"#035ARCH=x86_64 SYSCALL=openat AUID="vagrant" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
Mar 1 16:10:08 192.168.80.20 type=CWD msg=audit(1772381408.949:184): cwd="/home/vagrant"
Mar 1 16:10:08 192.168.80.20 type=PATH msg=audit(1772381408.949:184): item=0 name="/etc/nginx/" inode=256286 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0#035OUID="root" OGID="root"
Mar 1 16:10:08 192.168.80.20 type=PATH msg=audit(1772381408.949:184): item=1 name="/etc/nginx/nginx.conf" inode=256295 dev=08:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0#035OUID="root" OGID="root"
Mar 1 16:10:08 192.168.80.20 type=PROCTITLE msg=audit(1772381408.949:184): proctitle=7368002D63006563686F2022237465737420617564697422203E3E202F6574632F6E67696E782F6E67696E782E636F6E66
Mar 1 16:10:08 192.168.80.20 type=USER_END msg=audit(1772381408.953:185): pid=3875 uid=1000 auid=1000 ses=6 subj=unconfined msg='op=PAM:session_close grantors=pam_limits,pam_env,pam_env,pam_permit,pam_umask,pam_unix acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/0 res=success'#035UID="vagrant" AUID="vagrant"
Mar 1 16:10:08 192.168.80.20 type=CRED_DISP msg=audit(1772381408.953:186): pid=3875 uid=1000 auid=1000 ses=6 subj=unconfined msg='op=PAM:setcred grantors=pam_permit acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/0 res=success'#035UID="vagrant" AUID="vagrant"
```
**nginx_access.log**
```bash
vagrant@log-server:~$ sudo tail /var/log/rsyslog/192.168.80.20/nginx_access.log
Mar 1 15:57:10 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:57:10 +0000] "GET /index.html&qwd HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:57:16 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:57:16 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:57:21 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:57:21 +0000] "GET /&qwdq HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:57:25 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:57:25 +0000] "GET /&qwdq=1 HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:57:30 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:57:30 +0000] "GET /qq,&qwdq=1 HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:59:09 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:59:09 +0000] "GET /secret/ HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:59:25 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:59:25 +0000] "GET /protected_file.txt HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 15:59:36 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:15:59:36 +0000] "GET /logs/error.log HTTP/1.1" 404 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 16:00:41 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:16:00:41 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
Mar 1 16:04:08 nginx nginx_access: 10.0.2.2 - - [01/Mar/2026:16:04:08 +0000] "GET / HTTP/1.1" 403 134 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0"
```
**nginx_error.log**
```bash
vagrant@log-server:~$ sudo tail /var/log/rsyslog/192.168.80.20/nginx_error.log
Mar 1 16:04:08 nginx nginx_error: 2026/03/01 16:04:08 [error] 3622#3622: *3 open() "/var/www/html/index.nginx-debian.html" failed (13: Permission denied), client: 10.0.2.2, server: _, request: "GET / HTTP/1.1", host: "127.0.0.1:8080"
```
Видим, что все логи присутствуют на лог сервере. Задание выполнено!