Показаны сообщения с ярлыком ubuntu. Показать все сообщения
Показаны сообщения с ярлыком ubuntu. Показать все сообщения

четверг, 2 июля 2015 г.

Настройка Nagios 3


Сегодня добавим хост на мониторинг в Nagios3 (сервер Debian 8).
Итак, для начала немного теории.
1) Все настройки мониторинга хранятся в папке /etc/nagios3/conf.d
2) Nagios "воспринимает" только файлы с расширением .cfg
3) Все хосты можно разбить по разным файлам, а можно объеденить хосты и сервисы (методы проверки) в разные файлы

Начнем с самого начала.
Установим Nagios:
apt-get install nagios3
Cделаем backup существующих настроек:
mv /etc/nagios3/conf.d /etc/nagios3/conf.d.BACK
mkdir /etc/nagios3/conf.d
1) Первое, что нам нужно - это определить временные интервалы.
Создадим файл настроек временных интервалов /etc/nagios3/conf.d/01-timeperiods.cfg:
echo "
# Период 24х7 (Круглосуточная проверка) - которым в основном и будем пользоваться
define timeperiod{
    timeperiod_name 24x7        ; Имя временного периода (24x7)
    alias           24x7        ; Описание периода
    monday          00:00-24:00 ; Временной интервал в понедельник
    tuesday         00:00-24:00 ; Временной интервал во вторник
    wednesday       00:00-24:00 ; Временной интервал в среду
    thursday        00:00-24:00 ; Временной интервал в четверг
    friday          00:00-24:00 ; Временной интервал в пятницу
    saturday        00:00-24:00 ; Временной интервал в субботу
    sunday          00:00-24:00 ; Временной интервал в воскресение
    }
# Рабочие часы
define timeperiod{
    timeperiod_name workhours
    alias           workhours
    monday          09:00-17:00
    tuesday         09:00-17:00
    wednesday       09:00-17:00
    thursday        09:00-17:00
    friday          09:00-17:00
    }
# Не рабочие часы
define timeperiod{
    timeperiod_name nonworkhours
    alias           nonworkhours
    monday          00:00-09:00,17:00-24:00
    tuesday         00:00-09:00,17:00-24:00
    wednesday       00:00-09:00,17:00-24:00
    thursday        00:00-09:00,17:00-24:00
    friday          00:00-09:00,17:00-24:00
    saturday        00:00-24:00
    sunday          00:00-24:00
    }
# Для того "чтобы было" период "никогда"
# Здесь не заданны временные интервалы, это значит, что проверки не будет
define timeperiod{
    timeperiod_name never 
    alias           Never
    }
" >> /etc/nagios3/conf.d/01-timeperiods.cfg
2) Нужно задать команду оповещения по почте, и настроить эту самую почту.
Установим sendemail, с помощью которого будем производить почтовую рассылку:
apt-get install sendemail
Добавим следующий код в файл /etc/nagios3/commands.cfg:
#Оповещение по email о состоянии хоста
define command{
    command_name    notify-host-by-email
    command_line /usr/bin/printf "%b" "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -s youre.mail.server -xu monitoring_username -xp monitoring_password -t $CONTACTEMAIL$ -f frommail@mail.server -o tls=no -l /var/log/sendemail.log -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -m "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n"
    }
#Оповещение по email о состоянии сервиса
define command{
    command_name    notify-service-by-email
    command_line /usr/bin/printf "%b" "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendemail -s youre.mail.server -xu monitoring_username -xp monitoring_password -t $CONTACTEMAIL$ -f frommail@mail.server -o tls=no -l /var/log/sendemail.log -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -m "*****MONITORING SYSTEM*****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$"
    }
#Команда проверки по SNMP
define command{
    command_name    check_snmp01
    command_line    /usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ $ARG1$
    }
Итак, если не вдаваться в подробности, видно, что мы только что добавили 3 команды:
notify-host-by-email - оповещение по почте о состоянии хоста
notify-service-by-email - оповещение по почте о состоянии сервиса
Ключевые моменты данных команд, которые нужно настроить исходя из сервера, через который будет происходить рассылка:
-s youre.mail.server    - ip или DNS имя почтового сервера
-xu monitoring_username - имя пользователя
-xp monitoring_password - пароль
-f frommail@mail.server - почтовый ящик мониторинга
-o tls=no               - используется или нет tls 
И check_snmp01, с помощью которой будем проверять состояние хостов по SNMP
3) Задаем контактные лица, которым будут отправляться оповещения о пропадании сервисов /etc/nagios3/conf.d/02-contacts.cfg:
echo "
#service_notification_options :
#w - оповещать, если состояние сервиса WARNING
#u - оповещать, если состояние сервиса UNKNOWN
#c - оповещать, если состояние сервиса CRITICAL
#r - оповещать, если состояние сервиса RECOVERY (сервис восстановился после сбоя)
#f - оповещать, если состояние сервиса FLAPPING - происходят кратковременные сбои (вкл/выкл) сервиса
#n - не оповещать (контакт не получит оповещений о состоянии сервиса)

#host_notification_options :
#d - оповещать, если состояние хоста DOWN
#u - оповещать, если состояние хоста UNREACHABLE
#r - оповещать, если состояние хоста RECOVERY (хост восстановился после сбоя)
#f - оповещать, если состояние хоста FLAPPING - происходят кратковременные сбои (вкл/выкл)
#s - оповещать, если хост выключился(включился) по расписанию
#n - не оповещать (контакт не получит оповещений о состоянии хоста)

#Контакт №1
define contact{
    contact_name                  main_admin              ; Имя контакта
    alias                         Glavnii admin           ; Описание контакта
    service_notification_period   24x7                    ; Оповещать о состоянии сервиса во временной интервал
    host_notification_period      24x7                    ; Оповещать о состоянии хоста во временной интервал
    service_notification_options  w,u,c,r                 ; WARNING,UNKNOWN,CRITICAL,RECOVERY
    host_notification_options     d,r                     ; DOWN,RECOVERY
    service_notifications_enabled 1                       ; Оповещать о изменениях сервисов
    host_notifications_enabled    1                       ; Оповещать о изменениях хоста
    service_notification_commands notify-service-by-email ; Способ оповещения о состоянии сервиса(задан в commands.cfg)
    host_notification_commands    notify-host-by-email    ; Способ оповещения о состоянии хоста(задан в commands.cfg)
    email                         main_admin@yordomain.com; Почтовый ящик контактного лица
    }
#Контакт №2
define contact{
define contact{
    contact_name                  second_admin              ; Имя контакта
    alias                         Ne Glavnii admin          ; Описание контакта
    service_notification_period   24x7                      ; Оповещать о состоянии сервиса во временной интервал
    host_notification_period      24x7                      ; Оповещать о состоянии хоста во временной интервал
    service_notification_options  w,u,c,r                   ; WARNING,UNKNOWN,CRITICAL,RECOVERY
    host_notification_options     d,r                       ; DOWN,RECOVERY
    service_notifications_enabled 1                         ; Оповещать о изменениях сервисов
    host_notifications_enabled    1                         ; Оповещать о изменениях хоста
    service_notification_commands notify-service-by-email   ; Способ оповещения о состоянии сервиса(задан в commands.cfg)
    host_notification_commands    notify-host-by-email      ; Способ оповещения о состоянии хоста(задан в commands.cfg)
    email                         second_admin@yordomain.com; Почтовый ящик контактного лица
    }
#Группа контактов
define contactgroup{
    contactgroup_name       admins                    ; Имя группы
    alias                   Nagios Administrators     ; Описание
    members                 main_admin,second_admin   ; Состав группы
    }
" >> /etc/nagios3/conf.d/02-contacts.cfg
4) Зададим шаблон для хостов. Это необязательно, но в дальнейшем значительно упростит конфигурацию Nagios-а
echo "
#notification_options :
#d - оповещать, если состояние хоста DOWN
#u - оповещать, если состояние хоста UNREACHABLE
#r - оповещать, если состояние хоста RECOVERY (хост восстановился после сбоя)
#f - оповещать, если состояние хоста FLAPPING - происходят кратковременные сбои (вкл/выкл)
#s - оповещать, если хост выключился(включился) по расписанию
#n - не оповещать (контакт не получит оповещений о состоянии хоста)

define host{
    name                         host-shablon      ; Имя шаблона
    notifications_enabled        1                 ; Включить оповещения
    event_handler_enabled        1                 ; Включить обработчик событий (контролировать состояние хоста)
    flap_detection_enabled       1                 ; Реагировать на ФЛАППИНГ или нет (кратковременный вкл/выкл хоста)
    failure_prediction_enabled   1                 ; Прогнозирование сбоев. В дальнейшем Nagios от этого 
                                                   ;  параметра отказался совсем, т.к. он часто сбоит
    process_perf_data            1                 ; Обработка данных о производительности
    retain_status_information    1                 ; Обработка состояния хоста(включен, выключен, перезагружен)
                                                   ;  Если включен retain_nonstatus_information - запоминает состояние
                                                   ;  хоста и восстанавливает значение в случае перезагрузки нагиоса
    retain_nonstatus_information 1                 ; Запоминать состояние хоста в случае перезагрузки нагиоса
    check_command                check-host-alive  ; Команда проверки. check-host-alive - проверка хоста на доступность
    max_check_attempts           3                 ; Количество проверок статуса отличного от ОК, 
                                                   ;  перед тем как будет создано оповещение
    notification_interval        60                ; Если статус отличен от ОК, выдавать оповещения каждый час 
                                                   ;  (0-чтобы оповещать только в случае восстановления)
    notification_period          24x7              ; Период оповещения 24х7
    notification_options         d,u,r             ; DOWN, UNREACHABLE, RECOVERY
    contact_groups               admins            ; Кому рассылать оповещения
    register                     0                 ; Не регистрировать в Нагиосе, т.к. это только шаблон
    }
" >> /etc/nagios3/conf.d/03-host_template.cfg
5) Зададим шаблон для сервисов:
echo "
#notification_options :
#w - оповещать, если состояние сервиса WARNING
#u - оповещать, если состояние сервиса UNKNOWN
#c - оповещать, если состояние сервиса CRITICAL
#r - оповещать, если состояние сервиса RECOVERY (сервис восстановился после сбоя)
#f - оповещать, если состояние сервиса FLAPPING - происходят кратковременные сбои (вкл/выкл) сервиса
#n - не оповещать (контакт не получит оповещений о состоянии сервиса)

define service{
    name                            service_shablon ; Имя шаблона
                                                    ; Есть 2 типа проверок состояния сервиса регулярно и по расписанию
    active_checks_enabled           1               ; Включить акивные (регулярные) проверки
    passive_checks_enabled          1               ; Включить пассивные (по расписанию) проверки
    parallelize_check               1               ; Активные проверки должны быть параллельными  
    obsess_over_service             1               ; Предпочитать эту проверку а не через ocsp_command
    check_freshness                 0               ; Проверка на "свежесть" пассивных проверок
    notifications_enabled           1               ; Включить оповещения
    event_handler_enabled           1               ; Включить обработчик событий
    flap_detection_enabled          1               ; Реагировать на ФЛАППИНГ или нет (кратковременный вкл/выкл сервиса)
    failure_prediction_enabled      1               ; Прогнозирование сбоев. В дальнейшем Nagios от этого 
                                                    ;  параметра отказался совсем, т.к. он часто сбоит
    process_perf_data               1               ; Обработка данных о производительности
    retain_status_information       1               ; Обработка состояния сервиса(включен, выключен, перезагружен)
                                                    ;  Если включен retain_nonstatus_information - запоминает состояние
                                                    ;  сервиса и восстанавливает значение в случае перезагрузки нагиоса
    retain_nonstatus_information    1               ; Запоминать состояние сервиса в случае перезагрузки нагиоса
    notification_interval           60              ; Если статус отличен от ОК, выдавать оповещения каждый час 
                                                    ;  (0-чтобы оповещать только в случае восстановления)
    is_volatile                     0               ; Постоянный(0) или непостоянный(1) сервис
    check_period                    24x7            ; Период проверки 24х7
    normal_check_interval           1               ; Интервал нормальной проверки
    retry_check_interval            1               ; Интервал повторной проверки
    max_check_attempts              1               ; Количество проверок статуса отличного от ОК, 
                                                    ;  перед тем как будет создано оповещение
    notification_period             24x7            ; Период оповещения 24х7
    notification_options            w,u,c,r         ; WARNING UNKNOWN CRITICAL RECOVERY
    contact_groups                  admins          ; Кому рассылать оповещения
    register                        0               ; Не регистрировать в Нагиосе, т.к. это только шаблон
    }
" >> /etc/nagios3/conf.d/03-service_template.cfg
6) Создаем сервис PING, в который будут включены все хосты, и будут они просто пинговаться:
echo "
#Данный сервис пингует все хосты, которые включены в мониторинг
#Сначала сам сервис:
define service {
    hostgroup_name                  PING-CHECK                     ; Название сервиса
    service_description             PING                           ; Описание сервиса
    check_command                   check_ping!200.0,40%!400.0,80% ; Команда проверки
    use                             service_shablon                ; Использовать шаблон service_shablon
}
#А теперь группа хостов, которая будет пинговаться:
#Здесь есть 1 момент, когда hostgroup_name сервиса и группы хостов совпадает
#Таким образов в данной группе хосты будут мониторится по описанному выше сервису
define hostgroup {
    hostgroup_name  PING-CHECK  ; Название группы
    alias           ping all    ; Описание группы
    members         *           ; Состав группы * - значит все хосты
    }
" >> /etc/nagios3/conf.d/04-ping_all_hosts.cfg
7) Ну а теперь зададим наш хост:
echo "
#Здесь задается хост
define host{
    host_name               my_host1                  ; Имя хоста. Лучше без пробелов и по английски
    alias                   my host number 1          ; Описание хоста
    use                     host-shablon              ; Использовать шаблон              
    address                 212.193.163.6             ; IP Адрес хоста (который автоматически будет добавлен в сервис пинг)
    }
#Определим группу хостов. В дальнейшем, когда в мониторинге будет много хостов - это будет помогать
define hostgroup {
    hostgroup_name          my_hosts_group_1          ; Имя группы 
    alias                   Group of hosts 1          ; Описание
    members                 my_host1                  ; Члены группы (по полю host_name). 
                                                      ; Если членов несколько, то через запятую my_host1,my_host2 и т.д.
    }
" >> /etc/nagios3/conf.d/20-my_host_01.cfg
8) Хост у нас уже есть, а теперь запишем принтер.
Будем мониторить состояние картриджей в принтере Kyocera 6026 (Kyocera 6126,2035,2135).
Мониторинг будет осуществляться по SNMP:
echo "
#Сетевой принтер определяется для нагиоса как обычный хост
define host {
 host_name         Printer 6026 Ur Otdel
 alias             Printer in Ur office
 address           10.77.0.11
 use               host-shablon
 }
#Можно включить его в группу с предыдущим хостом
define hostgroup {
    hostgroup_name          my_hosts_group_1          ; Имя группы 
    alias                   Group of hosts 1          ; Описание
    members                 Printer 6026 Ur Otdel     ; Члены группы (по полю host_name). 
    }
#Проверка черного картриджа 
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon       ; Шаблон сервиса
        host_name               Printer 6026 Ur Otdel ; Имя хоста (по полю host_name). 
        service_description     Black Cartridge       ; Описание сервиса
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.4 -w 433: -c 100: ; SNMP запрос
        }
#Проверка синего картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon
        host_name               Printer 6026 Ur Otdel
        service_description     Blue Cartridge
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.1 -w 433: -c 100:
        }
#Проверка красного картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon
        host_name               Printer 6026 Ur Otdel
        service_description     Red Cartridge
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.2 -w 433: -c 100:
        }
#Проверка желтого картриджа
#WARNING 443 страницы
#CRITICAL 100 страниц
define service{
        use                     service_shablon
        host_name               Printer 6026 Ur Otdel
        service_description     Yellow Cartridge
        check_command           check_snmp01!-C public -o .1.3.6.1.2.1.43.11.1.1.9.1.3 -w 433: -c 100:
        }
" >> /etc/nagios3/conf.d/30-my_printer_01.cfg


Вот собственно и все.
Осталось перезагрузить Нагиос:
/etc/init.d/nagios3 restart
Теперь у нас должны появится 2 хоста в мониторинге, объединенные в одну группы.
При этом у принтера будет проверка состояния картриджей, и оба будут пинговаться.

среда, 3 июня 2015 г.

Интернет шлюз на базе Squid3 работающего в прозрачном режиме (с ssl-bump) с авторизацией по ip + HAVP + ClamAV + Sams2 + Webmin + NTLM + iptables

Здравствуйте друзья, сегодня я расскажу как сделать прозрачный шлюз на основе кэширующего прокси сервера Squid3.

Суть задачи:
1) Обеспечить доступ в интернет для 150+ компьютеров организации.
2) Сделать это максимально просто для конечных пользователей.
3) Обеспечить максимально безопасный доступ в интернет. Именно поэтому весь трафик будет проверяться на вирусы.
4) Так как ранее применялась NTLM авторизация - выполнить гибридную систему NTLM+ip авторизация, чтобы в дальнейшем всех пользователей перевести на новую систему с ip авторизацией.

Итак, я написал скрипт, с помощью которого развернуть полноценную систему доступа в интернет можно будет за очень короткое время.
Данная конфигурация собиралась под Debian 8 x64.

Сервер имеет 2 сетевые карты
eth0 - подключена к интернету и имеет адрес 10.10.0.2/30
eth1 - подключена к локальной сети и имеет адрес 192.168.0.1/24

Итак, для начала нужно настроить сетевые интерфейсы таким образом, чтобы маршрут по умолчанию (шлюз) был на интерфейсе eth0:
приводим к следующему виду: cat /etc/network/interfaces
allow-hotplug eth0
allow-hotplug eth1
iface eth0 inet static
        address 10.10.0.2
        netmask 255.255.255.252
        network 10.10.0.0
        broadcast 10.10.0.3
        gateway 10.10.0.1
      
iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.254
        dns-nameservers 8.8.8.8
        dns-search domain.ru
Далее все команды будем выполнять из под рута. Переходим в режим суперпользователя с помощью команды su и вводим пароль рута:
$ su
Password:
Теперь несколько констант, которые будут упрощать дальнейший код. Здесь необходимо указать путь до вашего FPT сервера, если вы хотите чтобы скрипт автоматически скачивал все нужные в процессе файлы, можете пропустить этот пункт и создавать необходимые файлы вручную:
FTP_PATH='ftp://ftp_login:ftp_passwd@youre.ftp.server/Path_to_configs'
ADMIN_LOGIN_FOR_DC_JOIN='administrator'
ADMIN_DC_PSW='administrator_psw'
IP_ADDRESS_OF_PROXY='ip_of_youre_proxy'
IP_OF_DC='ip_of_domain_controller'
DOMAIN_SM='domain.ru'
NTP_SERVER='ntp_server_domain_name_or_ip'
DOMAIN='DOMAIN'
DOMAIN_RU='DOMAIN.RU'
LOC_HOST='newproxy'
LOC_HOST_FULL='newproxy.domain.ru'
SAMSDB_PASS='sams_pass'
Сами файлы конфигурации можно скачать ЗДЕСЬ
Добавляем маршруты. Предпологается, что в локальной сети несколько подсетей, а именно 192.168.10.0/24 и 192.168.20.0/24. Нужно чтобы они добавлялись каждый раз при загрузке Debian:
echo '#! /bin/sh
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.1
route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.0.1
exit 0' > /etc/network/if-up.d/routes_add

echo '#! /bin/sh
route del -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.1
route del -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.0.1
exit 0' > /etc/network/if-down.d/routes_delete

chmod +x /etc/network/if-up.d/routes_add
chmod +x /etc/network/if-down.d/routes_delete
/etc/init.d/networking restart
Обновляемся:
apt-get -q -y update
apt-get -q -y upgrade
apt-get -q -y dist-upgrade
Устанавливаем все необходимое:
apt-get -q -y install mc ntp squid3 winbind samba krb5-user havp clamav ssl-cert libpcre3 libpcre3-dev apache2 apache2-doc  
apt-get -q -y install mysql-server mysql-client libmysqlclient-dev apache2 apache2-mpm-prefork apache2-doc php5 libapache2-mod-php5 
apt-get -q -y install php5-cli php5-common php5-mysql php5-gd php5-ldap php-fpdf mysql-server mysql-client libmysqlclient15off 
apt-get -q -y install libpcre3 libpcre3-dev make php5 php5-cli php5-common php5-dev php5-mcrypt php5-imagick php5-mysql 
apt-get -q -y install php5-gd php5-ldap php-fpdf libapache2-mod-php5 apache2-utils
apt-get -q -y install make g++ libtool build-essential autoconf automake ssl-cert apache2 apache2-doc apache2-utils 
apt-get -q -y install mysql-server mysql-client libmysqlclient-dev libpcre3 libpcre3-dev php5 php5-cli php5-common 
apt-get -q -y install php5-dev php5-mcrypt php5-imagick php5-mysql php5-gd php5-ldap php-fpdf libapache2-mod-php5 libldap2-dev
Устанавливаем Webmin, с помощью которого будем контролировать iptables (и не только):
echo '
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
' >> /etc/apt/sources.list
mkdir ~/downloads
cd ~/downloads
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc
apt-get update
apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python
apt-get install webmin
Предварительные настройки hosts:
mv /etc/hosts /etc/hosts.BACK
echo "
127.0.0.1       localhost
$IP_ADDRESS_OF_PROXY      $LOC_HOST_FULL      $LOC_HOST
" >> /etc/hosts

mv /etc/resolv.conf /etc/resolv.conf.BACK
echo "
search $DOMAIN_SM
nameserver $IP_OF_DC
" >> /etc/resolv.conf
Включаем маршрутизацию пакетов, чтобы наш прокси выполнял функции маршрутизатора:
echo "
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
" >> /etc/sysctl.conf
echo "1" > /proc/sys/net/ipv4/ip_forward
Настраиваем логирование всего, что делает в командной строке пользователь (в том числе root), лог будет храниться в /var/log/commands.log (полезная штука):
mkdir ~/downloads
cd ~/downloads
wget $FTP_PATH/bash_logging/string.txt
cat string.txt >> /etc/bash.bashrc
touch /etc/rsyslog.d/bash.conf
touch /var/log/commands.log
echo "local6.*    /var/log/commands.log" >> /etc/rsyslog.d/bash.conf
/etc/init.d/rsyslog restart
Теперь все команды будут вписываться в лог после переподключения
Если вы вручную вводите данные, и не пользуйтесь теми файлами, что я предоставил вначале, то для вас содержимое /etc/bash.bashrc должно дополнится следующей строчкой:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Настраиваем временную зону (в моем случае это Екатеринбург, у вас вероятнее всего своя):
cp /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime
Настраиваем NTP:
mv /etc/ntp.conf /etc/ntp.conf.BACK
echo "
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
#server
server $NTP_SERVER
" >> /etc/ntp.conf

/etc/init.d/ntp restart
/etc/init.d/rsyslog restart
Настраиваем Samba:
mv /etc/samba/smb.conf /etc/samba/smb.conf.BACK
echo "
[global]
        workgroup = $DOMAIN
        netbios name = $LOC_HOST
        server string = $DOMAIN Proxy
        log file = /var/log/samba/log.%m
        max log size = 50
        log level = 3
        #hosts allow = 192.168.0.0/24 127.0.0.1
        #map to guest = bad user
        realm = $DOMAIN_SM
        nt acl support = yes
        nt status support = yes

        security = ads
        auth methods = winbind
        password server = $IP_OF_DC
        encrypt passwords = yes
        winbind separator = +
        winbind uid = 10000-20000
        winbind gid = 10000-20000
        winbind enum groups = yes
        winbind enum users = yes
        socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
        #interfaces = 192.168.0.248/24
        local master = no
        os level = 0
        domain master = no
        preferred master = no
        domain logons = no
        name resolve order = host lmhosts bcast
        dns proxy = no
" >> /etc/samba/smb.conf
Настраиваем kerberos
mv /etc/krb5.conf /etc/krb5.conf.BACK
echo "
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5dc.log
admin_server = FILE:/var/log/kerberos/ksadmind.log
[libdefaults]
default_realm = $DOMAIN_RU
[realms]
$DOMAIN_RU = {
kdc=$IP_OF_DC
default_domain=$DOMAIN_SM
admin_server=$IP_OF_DC
}
[domain_realm]
$DOMAIN_SM = $DOMAIN_RU
.$DOMAIN_SM = $DOMAIN_RU
" >> /etc/krb5.conf
Настраиваем nsswitch
mv /etc/nsswitch.conf /etc/nsswitch.conf.BACK
echo "
passwd:         files winbind compat
group:          files winbind compat
shadow:         files winbind compat
gshadow:        files
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis
" >> /etc/nsswitch.conf
Настройки winbindd_priv. Суть в том, что по умолчанию squid не имеет доступа к получаемым NTLM ключам связки winbind+samba.
gpasswd -a proxy winbindd_priv
chown root:proxy -R /var/lib/samba/winbindd_privileged
sed -i -e '/chgrp winbindd_priv $PIDDIR\/winbindd_privileged\/ || return 1/ c\chgrp proxy $PIDDIR\/winbindd_privileged\/ || return 1' /etc/init.d/winbind

/etc/init.d/samba restart
/etc/init.d/winbind restart
Предварительная настройка Squid3. Предположительно у нас есть пользователи, доступ которых в интернет осуществляется без авторизации. Например это руководители, которых мы не хотим утруждать вводом всяческих логинов и паролей. Это действительно только для какого-то типа авторизации, в данном случае NTLM. В дальнейшем, когда будет выполнен переход на ip авторизацию - эти настройки потеряют смысл.
ln -s /usr/sbin/squid3 /usr/sbin/squid
touch /etc/squid3/01-superusers
touch /etc/squid3/02-allowedsites
touch /etc/squid3/03-our_network
Для пользователей, доступ которым на прокси будет разрешен без авторизации:
echo "
192.168.0.10  # Boss IP 1
192.168.10.10 # Boss IP 2
192.168.20.20 # Boss IP 3
" >> /etc/squid3/01-superusers
Сайты, на которые будет разрешен доступ без авторизации для всех из локальной сети:
echo "
#local net----------------------
$DOMAIN_SM
#cloud.mail.ru----------------------
.datacloudmail.ru
cloud.radar.imgsmail.ru
cloud.mail.ru
headline.radar.imgsmail.ru
portal.mail.ru
cloclo1.cloud.mail
#mail.yandex.ru----------------------
mail.yandex.ru
#google.com----------------------
.google.com
" >> /etc/squid3/02-allowedsites
Локальная сеть, из которой будет разрешен доступ на сайты без авторизации:
echo "
192.168.0.0/24   # LAN-1
192.168.10.0/24  # LAN-2
192.168.20.0/24  # LAN-3
" >> /etc/squid3/03-our_network
Так как изначально Squid3 не поддерживает прозрачный режим работы с динамической генерацией сертификатов, нам необходимо его "пересобрать". В Debian это делается относительно просто:
cd /usr/src
mv /etc/squid3/squid.conf /etc/squid3/squid.conf.BACK
apt-get source squid3
apt-get build-dep squid3
apt-get build-dep squid
apt-get build-dep openssh
apt-get build-dep openssl
apt-get install devscripts build-essential fakeroot
cd squid3-*
sed -i -e 's/--enable-inline/--enable-inline --enable-ssl/' ./debian/rules
./configure
debuild -us -uc -b
dpkg -i -y squid3_3*amd64.deb  squid3-common*all.deb squid3-dbg*amd64.deb
Дальше нужно заменить конфиг squid-а на ранее подготовленный:
cd ~/downloads
wget $FTP_PATH/configs/2_squid_TRANSPERENT+NTLM_conf.txt
cat 2_squid_TRANSPERENT+NTLM_conf.txt > /etc/squid3/squid.conf
Если вы делаете это вручную, то основная задача настройки заключается в следующем. Мы объявляем 2 порта, которые будут работать в прозрачном режиме, и 1 который будет работать в режиме авторизации:
http_port 3128
http_port 3126 intercept
https_port 3127 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/openssl/public.pem key=/etc/squ$
always_direct allow all
ssl_bump allow all
##Uncommented 2 lines below, if you allow all ssl connectios, even dont verify sertificate.
#sslproxy_cert_error allow all
#sslproxy_flags DONT_VERIFY_PEER
Так как прокси работает в прозрачном режиме, нам необходимо работать с сертификатами. В таком режиме пользователь устанавливает SSL соединение с прокси, а проси непосредственно с запрашиваемым ресурсом. Появляется возможность контролировать весь трафик внутри зашифрованного соединения. Но появляется и проблема, связанная с постоянным предупреждением пользователя о том, что сертификат не действителен. Нам в дальнейшем нужно будет добавить всем пользователям сертификат от прокси в доверенные:
mkdir /etc/squid3/openssl
cd /etc/squid3/openssl
openssl genrsa 4096 > private.pem
openssl req -new -x509 -days 3650 -key private.pem -out public.pem
openssl x509 -in public.pem -outform DER -out squid_user.der
После чего у нас в папке появится 3 файла:
private.pem - сертификат
public.pem - публичный ключ
squid_user.der - сертификат для конечных пользователей, который нужно установить на все клиентские машины в "Доверенные корневые центры сертификации".
Создадим небольшую напоминалку в данной папке:
echo '
Так как в данном случае мы используем self-signed сертификат, любые посещения https сайтов через прокси 
будут показывать пользователям ошибку сертификата. 
Причина ошибки — Issuer нашего сертификата не находится в списке Trusted CA в браузере.
Что бы ошибок не было, выполняем следующее действие.

Теперь полученный файл squid_user.der надо импортировать в клиентский браузер.
Для Internet Explorer:
Tools->Internet Options->Content->Certificates
Выбираем закладку «Trusted Root Certificate Authorities» (Доыеренные корневые центры сертификации)
Жмём Import, выбираем файл squid.der и завершаем импорт.

Для Firefox:
Tools->Options->Advanced->Encryption->View Certificates
Выбираем закладку «Authorities»
Жмём Import, выбираем файл squid.der и завершаем импорт.

Ну вот в общем то всё. В зависимости от ваших фантазий, теперь у вас есть возможность в https трафике 
запретить делать POST запросы, скачивать большие файлы, закрыть доступ к определённым файлам/папкам. 
Так же можно запретить доступ на сайты, сертификаты которых выданы не доверенными CA. Ну и возможность проверять на вирусы.
' > readme
Установка Sams2
cd ~/downloads
wget https://launchpad.net/ubuntu/+archive/primary/+files/libzip1_0.9.3-1_amd64.deb
wget http://launchpadlibrarian.net/94808408/libmysqlclient16_5.1.58-1ubuntu5_amd64.deb
dpkg -i libzip1_0.9.3-1_amd64.deb
dpkg -i libmysqlclient16_5.1.58-1ubuntu5_amd64.deb

wget http://nixdev.net/release/sams/devel/packages/debian/sams2_2.0.0-rc2_amd64.deb
dpkg -i sams2_2.0.0-rc2_amd64.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-doc_2.0.0-rc2_all.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-web_2.0.0-rc2_all.deb
dpkg -i sams2-doc_2.0.0-rc2_all.deb && dpkg -i sams2-web_2.0.0-rc2_all.deb
Настройка Sams2
cp /etc/sams2.conf /etc/sams2.conf.BACK
sed -i -e 's/DB_USER=/DB_USER=sams/' /etc/sams2.conf
sed -i -e 's/DB_PASSWORD=/DB_PASSWORD='$SAMSDB_PASS'/' /etc/sams2.conf
sed -i -e 's/squid/squid3/' /etc/sams2.conf
sed -i -e '/SHUTDOWNCOMMAND=shutdown -h now/ c\SHUTDOWNCOMMAND=shutdown -r now' /etc/sams2.conf
sed -i -e 's|SQUIDCACHEDIR=/usr/local/apache2|SQUIDCACHEDIR=/var/spool/squid3|' /etc/sams2.conf
sed -i -e 's/SAMS_ENABLE=false/SAMS_ENABLE=true/' /etc/init.d/sams2
Создаем линки в апаче для самса
echo '
Alias /sams2 /usr/share/sams2
<Directory "/usr/share/sams2">
    Options Indexes FollowSymlinks
    AllowOverride None
    Require all granted
    AddDefaultCharset off
</Directory>
<Location "/sams2">
    Options Indexes
    Order allow,deny
    Allow from all
</Location>
' > /etc/apache2/conf-available/sams2.conf

echo '
Alias /sams2/doc /usr/share/doc/sams2-doc/
 <Directory "/usr/share/doc/sams2-doc/">
    Options Indexes FollowSymlinks
    AllowOverride None
    Require all granted
    AddDefaultCharset off
</Directory>
 <Location "/sams2/doc">
    Options Indexes
    Order allow,deny
    Allow from all
</Location>
 ' > /etc/apache2/conf-available/doc4sams2.conf
 
ln -s ../conf-available/sams2.conf /etc/apache2/conf-enabled/
ln -s ../conf-available/doc4sams2.conf /etc/apache2/conf-enabled/
chown -R www-data:www-data /usr/share/sams2/data/

/etc/init.d/apache2 restart
/etc/init.d/squid3 restart
/etc/init.d/sams2 restart
Настройки HAVP, который будет проверять весь траффик на вирусы
mv /etc/havp/havp.config /etc/havp/havp.config.BACK
echo '
USER havp
GROUP havp
DAEMON true
PIDFILE /var/run/havp/havp.pid
SERVERNUMBER 10
MAXSERVERS 100
ACCESSLOG /var/log/havp/access.log
ERRORLOG /var/log/havp/error.log
USESYSLOG false
LOG_OKS false
LOGLEVEL 1
SCANTEMPFILE /var/spool/havp/havp-XXXXXX
TEMPDIR /var/tmp
DBRELOAD 60
FORWARDED_IP true
PORT 8081
BIND_ADDRESS 127.0.0.1
TEMPLATEPATH /etc/havp/templates/ru
WHITELISTFIRST true
WHITELIST /etc/havp/whitelist
BLACKLIST /etc/havp/blacklist
FAILSCANERROR false
SCANNERTIMEOUT 10
RANGE true
SCANIMAGES false
MAXSCANSIZE 5000000
STREAMUSERAGENT Player Winamp iTunes QuickTime Audio RMA/ MAD/ Foobar2000 XMMS
IGNOREVIRUS Oversized. Encrypted. Phishing
ENABLECLAMLIB true
CLAMDBDIR /var/lib/clamav
CLAMBLOCKBROKEN false
CLAMBLOCKENCRYPTED false
CLAMBLOCKMAX false
CLAMMAXFILES 500
CLAMMAXFILESIZE 10
CLAMMAXRECURSION 8
ENABLEFPROT false
ENABLEAVG false
ENABLEAVESERVER false
ENABLESOPHIE false
ENABLETROPHIE false
ENABLENOD32 false
ENABLEAVAST false
ENABLEARCAVIR false
ENABLEDRWEB false

' > /etc/havp/havp.config

echo '
*.youtube.com*
*.$DOMAIN_SM*
*.apple.com*
' >> /etc/havp/whitelist
Вводим прокси в домен
net join -I $IP_OF_DC -U $ADMIN_LOGIN_FOR_DC_JOIN%$ADMIN_DC_PSW
Проверка, должно вывести все что видит в домене
wbinfo -g
wbinfo -u
wbinfo -t
Добавляем необходимые настройки в MYSQL
mysql -u root -p
GRANT ALL ON squidctrl.* TO 'sams'@localhost IDENTIFIED BY "SAMSDB_PASS";
GRANT ALL ON squidlog.* TO 'sams'@localhost IDENTIFIED BY "SAMSDB_PASS";
GRANT ALL ON sams2db.* TO 'sams'@localhost IDENTIFIED BY "SAMSDB_PASS";
flush privileges;
Ну и IPTABLES.
Iptables это очень мощный инструмент для работы с сетью, чтобы описать все возможности нужна отдельная статья.
В нашем случае все более тривиально, нам нужен редирект с 80 и 443 портов на 3126 и 3127 порты соответственно + некоторые базовые настройки
#-------------УДАЛЯЕМ ВСЕ НАСТРОЙКИ----------------
IPTABLES="/sbin/iptables"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
###############################################################################
#-------------Настраиваем----------------
# 1.1 Настройки сети 
INET_IP="10.10.0.2/30"
INET_IFACE="eth0"
INET_BROADCAST="255.255.255.255"
# локалка
LAN_IP="192.168.0.0/24"
LANN="192.168.0.1"
LAN_IP_RANGE="192.168.10.0/24"
LAN_IP_RANGE2="192.168.20.0/24"
LAN_IFACE="eth1"
# локалхост
LO_IFACE="lo"
LO_IP="127.0.0.1"
#Открытые порты (через пробел)
open_tcp_ports="22 80 443 3126 3127 3128 10000"
open_udp_ports="123"
open_icmp_state="8 11"
###########################################################################
# 2. Module loading.
/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
###########################################################################
# 3.1 Включаем режим роутера
echo "1" > /proc/sys/net/ipv4/ip_forward
# ----------------------Правила----------------------------------
# 4.1 ТАБЛИЦА Filter
#Умолчания
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#Создаем цепочки
$IPTABLES -N bad_tcp_packets
                $IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
                $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
                $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -N allowed
                $IPTABLES -A allowed -p TCP --syn -j ACCEPT
                $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
                $IPTABLES -A allowed -p TCP -j DROP

$IPTABLES -N tcp_packets
                for open_tcp in $open_tcp_ports
                        do
                        $IPTABLES -A tcp_packets -p TCP --dport $open_tcp -j allowed
                done

$IPTABLES -N udp_packets
                for open_udp in $open_udp_ports
                        do
                        $IPTABLES -A udp_packets -p UDP --dport $open_udp -j allowed
                done

$IPTABLES -N icmp_packets
                for open_icmp in $open_icmp_state
                        do
                        $IPTABLES -A icmp_packets -p ICMP --icmp-type $open_icmp -j ACCEPT
                done

# 4.1.4 ТАБЛИЦА INPUT
# Подключения к прокси
# Сначала пропускаем уже ранее установленые соединения
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
$IPTABLES -A INPUT -i $INET_IFACE -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -d $LAN_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
# пропускаем соединения к прокси от локалки и лупбак
$IPTABLES -A INPUT -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -s $LAN_IP_RANGE2 -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -s $INET_IP -j ACCEPT
# фильтруем открытые порты для разных протоколов
$IPTABLES -A INPUT -p TCP -i $LAN_IFACE -s $LAN_IP_RANGE  -j tcp_packets
$IPTABLES -A INPUT -p TCP -i $LAN_IFACE -s $LAN_IP_RANGE2  -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE -s $LAN_IP_RANGE -j udp_packets
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE -s $LAN_IP_RANGE2 -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $LAN_IFACE -s $LAN_IP_RANGE -j icmp_packets
$IPTABLES -A INPUT -p ICMP -i $LAN_IFACE -s $LAN_IP_RANGE2 -j icmp_packets
$IPTABLES -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT INPUT packet died: "

# 4.1.5 ТАБЛИЦА FORWARD
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
#$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT FORWARD packet died: "

# 4.1.6 ТАБЛИЦА OUTPUT
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $INET_IP -j ACCEPT
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT OUTPUT packet died: "

# 4.2 ТАБЛИЦА nat
$IPTABLES -A PREROUTING ! -d $LAN_IP -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination $LANN:3126
$IPTABLES -A PREROUTING ! -d $LAN_IP -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination $LANN:3127
#$IPTABLES -A POSTROUTING -o eth0 -j MASQUERADE
Вот собственно и все. Теперь можно зайти на http://proxy_ip/sams2/ и настроить самс под свои нужды, логин по умолчанию admin, пароль qwerty. Так же доступен Webmin по адресу https://proxy_ip:10000 логин и пароль по умолчанию от учетной записи root сервера.
Полный скрипт для развертывания данной конфигурации за несколько минут можно скачать ТУТ