# Разбор ДЗ к уроку 5

a) Написать скрипт, который удаляет из текстового файла пустые строки 
и заменяет маленькие символы на большие (воспользуйтесь tr или sed).

#!/bin/bash

# Пербираем файлы txt в текущей директории в переменной file
for file in *txt
do
  # Удаляем пустые строки и передаём конвейером на tr
  sed '/^$/d' $file |  
  
  # преобразовываем регистр и выводим во временный файл
  tr [a-z] [A-Z] > tempfile
  
  # Переносим данные в исходный файл
  mv tempfile $file
done


b) Изменить скрипт мониторинга лога (создать скрипт), 
чтобы он выводил сообщения при попытке неудачной аутентификации 
пользователя /var/log/auth.log, отслеживая сообщения примерно такого вида:
May 16 19:45:52 vlamp login[102782]: FAILED LOGIN (1) on '/dev/tty3' 
FOR 'user', Authentication failure

#!/bin/bash

# В переменой определяем путь к файлу лога
LOG=/var/log/auth.log

# Читаем построчно лог и каждую строку передаём в while
tail -1f "${LOG}" | while read i

do
 # Если в строке есть искомая ошибка
 case $i in
       *'Authentication failure'*)
       
       # Выводим сообщение в всплывающем окне
       zenity --info --text="Authentication failure" ;;
 esac
done


Более простой вариант

tail -1f /var/log/auth.log | grep "Authentication failure"

c) Создать скрипт, который создаст директории для нескольких годов 
(2010 — 2017), в них — поддиректории для месяцев (от 01 до 12), 
и в каждый из них запишет несколько файлов с произвольными записями 
(например 001.txt, содержащий текст Файл 001, 002.txt с текстом Файл 002) 
и т.д.

#!/bin/bash

# Во внешнем цикле перебираем года
for i in {2010..2017}
do
  # Перебираем месяцы
  for j in {01..12}
  do
    # Создаём необходимые директории
    mkdir -p $i/$j
      # Перебираем имена файлов
      for n in {001..020}
      do
        # Создаём файл и записываем в него строку
        echo "File $n" > $i/$j/$n.txt
      done
  done
done


# Один из примеров реализации решений к ДЗ урока 6.

2. Настроить nginx в качестве балансировщика. Используя mod_upstram, раскидывать весь 
входящий трафик по трем Apache2-серверам, находящимся в локальной
сети.

buryanov@buryanovws:~$ cat /etc/nginx/sites-enabled/default

upstream backend.ws {
        server backend1.ws:8080;
        server backend2.ws:8080;
        server backend3.ws:8080;
    }

server {
        listen 80;

        location / {
                proxy_pass http://backend.ws;
        }
}

3. Настроить сетевой фильтр, чтобы был доступ только к сервисам http и ssh.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

4 * Настроить правила iptables, чтобы из внешней сети можно было обратиться 
только к портам 80 и 443 Запросы, идущие на порт 8080, перенаправлять на порт 80

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80,443 -m state --state ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination :80

5 * Настроить доступ по ssh только из указанной сети.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT


