среда, 25 мая 2011 г.

Установка exim в rhel 6 (Альтернативный способ)

В заметке http://jskyworker.blogspot.com/2011/02/exim-rhel-60.html я описал установку exim под RHEL 6 из исходников. Привожу еще один вариант, вроде немного полегче)).

Добавить репозиторий Atrpms:
1. импортировать gpg-ключ
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
или если не получилось
wget -c http://packages.atrpms.net/RPM-GPG-KEY.atrpms
rpm --import RPM-GPG-KEY.atrpms


2. добавить репозиторий
cat << EOF >> /etc/yum.repos.d/atrpms.repo
[atrpms]
name=RHEL $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=1
gpgcheck=1

EOF

Установить пакеты

yum --enablerepo=atrpms -y install exim exim-mysql libspf2 libsrs_alt

Литература:
http://atrpms.net/documentation/install/

понедельник, 23 мая 2011 г.

Установка cacti в RHEL5.

Сразу предупреждаю - заметка будет короткой, только основные моменты. В конце заметки будет ссылка на более подробный материал. Решил перенести на сервер с nagios еще и cacti. Cacti — open-source веб-приложение, система позволяет строить графики при помощи RRDtool. Cacti собирает статистические данные за определённые временные интервалы и позволяет отобразить их в графическом виде.

Установка:
1. подключить репозиторий epel  (wget -c http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm && rpm -Uvh epel-release-5*.rpm)
2. yum install cacti

Настройка БД:
mysql -u root -p
> create database cacti;
 > grant all on cacti.* to cacti@'localhost' identified by 'SUPER_PASSWORD';
> flush privileges;
> quit
mysql -u root -p cacti < cacti.sql


Поменять параметры в /etc/cacti/db.php (логин/пароль/БД).

Зайти на web-интерфейс (admin/admin по умолчанию).
 
Дополнительные настройки (см. литературу)

Возможные проблемы:
 1. невозможно через web-интерфейс добавить определенные хосты для определенных пользователей.
Решение (workaround): воспользоваться cli-скриптом add_perms.php
cd /CACTI_DIR/cli
php -q add_perms.php


Внимательно читаем краткую инструкцию по использованию скрипта add_perms.php.
Выводим список хостов и список пользователей, затем добавляем нужному пользователю только определенные хосты. Порядок предоставления доступа смотрим в документации.

[root@odin cli]# php -q add_graphs.php --list-hosts
Known Hosts: (id, hostname, template, description)
2 172.xx.0.1 5 C2800-Nikolaev 
3 172.xx.0.1 5 C2800-Poltava
*** 

[root@odin cli]# php -q add_perms.php --list-users
Known Users:
id username full_name
1 admin Administrator
3 guest Guest Account
4 jack Jack Skyworker
5 support Technical Support

Собственно, сопоставляем id-хоста с id-пользователя:
*********************
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=10 --item-id=7
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=10 --item-id=19
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=11 --item-id=8
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=11 --item-id=17
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=12 --item-id=9
*********************


Литература:
http://redhat-club.org/2011/настройка-cacti-в-centos-rhel-fedora
http://www.cacti.net/downloads/docs/html/
http://forums.cacti.net/about26451.html
http://forums.cacti.net/about7683.html

Авторизация пользователей squid в домене с доступом к ресурсам по группам

Возникла однажды интересная задача — организация прокси-сервера для филиала. С тех пор утекло много времени и пришла пора вспомнить как и что делалось. Для начала почитайте дополнительную небольшое введение о том зачем нужен прокси-сервер, как браузер обменивается информацией с прокси-сервером. Данная статья является скорее заметкой, нежели полноценной статьей, потому предоставляется AS IS (как есть) и вся ответственность за ее использование ложится на Ваши плечи (т.е. все нижеследующее не отменяет чтения вами документации и прочей полезной литературы). Данная заметка рассчитана на RHEL5.

Зачем нужен прокси-сервер?
Для того, чтоб не выпускать весь http/https/FTP/gopher трафик пользователей в Интернет, а, используя единую точку выхода, фильтровать какие запросы выпускать, а какие — нет. Для удобства управления предусмотрена возможность управления доступов в Интернет посредством нахождения пользователя в определённых группах Active Directory.
Как настроить клиенткое ПО для использования прокси-сервера?
Подавляющее большинство программ, требующих выхода в Интернет, имею в своих настройках возможность указать прокси-сервер, порт и, опционально, параметры авторизации.
Как это работает?
Рассмотрим пример. Пользователь открывает браузер и вводит в адресной строке domain.ru. Не буду рассказывать что происходит действие прежде, чем браузер отправит запрос http-серверу, это несущественно для примера. Итак, браузер сформировал запрос и отправил его http-серверу напрямую, если не указаны настройки прокси-сервера, но, поскольку, выход в Интернет скорее всего открыт только для прокси-сервера, то пользователь ожидаемую страничку так и не увидит. Указывая в настройках браузера параметры прокси-сервера, мы заставляем браузер отправлять весь http-трафик прокси-серверу.
Что происходит на стороне прокси-сервера?
Если squid получает запрос, который попадает под ACL proxy_auth (proxy_auth_regex, external с %LOGIN) в http_access, то squid ищет заголовок Authorization и извлекает из него имя и пароль (base64, открытым текстом); если заголовок не обнаружен, то браузеру возвращается сообщение об ошибке 407 (Proxy Authentication Required) со списком допустимых схем аутентификации, браузер запрашивает у пользователя имя и пароль для определённой области действия (realm); полученные от пользователя имя и пароль браузер передаёт в последующих запросах к squid в заголовке Authorization; для аутентификации используется внешняя программа, которая получает на стандартный ввод имя и пароль и должна ответить "OK" или "ERR".
Squid может предлагать клиенту несколько схем аутентификации (заголовок Proxy-Authenticate:), а браузер должен выбрать из них самую безопасную из понимаемых им; на практике, браузеры обычно выбирают самую первую.
Далее, откуда брать объект определяется так (в упрощенном виде): послать ICP/HTCP/multicast запросы ко всем подходящим соседям; подождать определенное время; загрузить с первого соседа, пославшего HIT; иначе загрузить с первого отца, ответившего MISS; иначе загрузить с первоисточника, а затем передать пользователю.

Итак, приступим. Нам понадобятся следующие пакеты: squid, ntp, samba-common, krb5-workstation, krb5-libs.
squid — собственно пакет с прокси-сервером
ntp — сервер времени, необходим для синхронизации времени с контроллером домена
samba-common — пакет с демоном winbind, собственно для авторизации пользователей в AD
krb5-* — библиотеки для работы с kerberos

Устанавливаем пакеты при помощи yum или rpm (что кому удобней, что у кого настроено)

1. Установить пакет ntp и добавить его в автозапуск
    1.yum -y install ntp
    2./sbin/chkconfig ntpd on
2. Настроить /etc/ntp.conf (ниже перечислены ключевые моменты)
    1.server IP_DOMAIN_CONTROLLER
    2.остальные директивы server закомментировать
3. Синхронизировать время с контроллером домена
    1./usr/sbin/ntpdate IP_DC
4. Запустить сервер ntp
    1./sbin/service ntpd restart
5. Установить пакет samba-common
    1.yum -y install samba-common
6.Настроить /etc/samba/smb.conf (ниже перечислены ключевые моменты)
   1.workgroup = BRANCH
   2.security = ADS
   3.password server = IP_DOMAIN_CONTROLLER
   4.realm = BRANCH.OFFICE.COM
   5.netbios name = GW-BRANCH
   6.idmap backend = rid:BRANCH=10000 – 20000
   7.winbind uid = 10000 – 20000
   8.winbind gid = 10000 – 20000
   9.winbind use default domain = yes
   10.winbind enum users = yes
   11.winbind enum groups = yes
   12.local master = no
   13.os level = 0
   14.preferred master = no
   15.wins support = no
   16.load printers = no
   17.где BRANCH – netbios имя вашего филиала, например, ODESSA, branch – то же самое, но с маленькой буквы
7. Установить пакеты krb5-libs и krb5-workstation
    1.yum -y install krb5-libs krb5-workstation

8. Настроить /etc/krb5.conf (ниже перечислены ключевые моменты)
   1.[libdefaults]
   2. default_realm = BRANCH.OFFICE.COM
   3.[realms]
   4. BRANCH.OFFICE.COM = {
   5. kdc = IP_DOMAIN_CONTROLLER:88
   6. admin_server = IP_DOMAIN_CONTROLLER:749
   7. default_domain = branch.office.com
   8.[domain_realm]
   9. .branch.office.com = BRANCH.OFFICE.COM
  10. branch.office.com = BRANCH.OFFICE.COM
9. Настроить /etc/hosts (добавить запись о нашем хосте)
   1.IP_THIS_SERVER gw-branch.office.com
10. Настроить /etc/resolv.conf (добавить записи)
   1.nameserver 127.0.0.1 (или IP_DOMAIN_CONTROLLER)
   2.search branch.office.com office.com
11. Добавить в ДНС-сервер на контроллере домена запись о нашем сервере
12. Завести в AD группы gl-Inet-extra, gl-Inet-power, gl-Inet-users и добавить в них соответствующих пользователей
13. Получить билет kerberos
   1.kinit Administrator или kinit root
14. Ввести компьютер в домен (в случае ошибок проверить ДНС-имена)
   1.net ads join -U Administrator
15. Запустить winbind и добавить его в автозапуск
   1.Проверить, чтоб пользователь от имени которого запускается squid имел права на чтение winbind-сокета в папке winbindd_privileged ls -l /var/cache/samba/ или /var/lib/samba
   2.chgrp squid /var/cache/samba/winbindd_privileged
   3./sbin/service winbind start
   4./sbin/chkconfig winbind on
16. Проверить вывод wbinfo -t (-p, -u, -g, --get-auth-user) на предмет ошибок
17. sudo wbinfo --set-auth-user=BRANCH\root%ПАРОЛЬ
18. Проверить вывод ntlm_auth –helper-protocol=squid-2.5-basic на предмет ошибок
19. Проверить вывод wbinfo_group.pl на предмет ошибок
   1.echo root gl-inet-extra | /usr/lib64/squid/wbinfo_group.pl
   2.правильные ответы — ERR, OK. Если выдает Couldn't convert sid to gid или подобное, то проблема в настройке samba.
20. Установить пакет squid    1.yum -y install squid
21. Настроить /etc/squid/squid.conf (ниже перечислены ключевые моменты)  
    1.auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
    2.auth_param ntlm children 30
    3.auth_param ntlm keep_alive off
    4.auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
    5.auth_param basic realm Squid proxy-caching web server
    6.auth_param basic children 5
    7.auth_param basic credentialsttl 2 hours
    8.external_acl_type ad_group %LOGIN путь_к_wbinfo_group.pl
    9.acl extra external ad_group gl-Inet-extra
    10.acl power external ad_group gl-Inet-power
    11.acl users external ad_group gl-Inet-users
    12.http_access allow MYDOMAIN allow_hosts
    13.http_access allow extra all
    14.http_access deny all
    15.pid_filename /var/run/squid/squid.pid. Описание смотреть ниже в комментариях к рабочему конфигу squid.conf, а здесь только команды.
         1.отредактировать /etc/init.d/squid
         2.mkdir -p /var/run/squid/
         3.chown squid:squid /var/run/squid/
         4.cd /etc/squid/ && rm -f errors
         5.cd /etc/squid/ && ln -s /usr/share/squid/errors/Russian-1251 errors
22. Перезапустить squid
    1./sbin/service squid restart (reload)
23. В домене настроить групповую политику для IE. (regsvr32.exe ieaksie.dll)
24. Проверить работу всей системы

Листинг /etc/squid/squid.conf с некоторыми комментариями, для Squid3. За более подробным описанием директив следует обратиться к файлу squid.conf.default. Полностью приводить конфиг не вижу смысла ибо он очень большой и большинство директив имеют значения по умолчанию.

# адрес, на котором слушать запросы клиентов
http_port 172.xx.1.254:3128

******

# по умолчанию, однажды захваченная, но ныне не используемая память не отдается обратно # в систему, off позволяет освобождать ее
memory_pools on
memory_pools_limit 256 MB

# Директория для кэша, числа - размер кэша в Mb, число директорий первого уровня, число директорий второго уровня в каждой директории первого.
cache_dir ufs /var/spool/squid 4500 32 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log

******

# где хранить pid-процесса. ОБЯЗАТЕЛЬНО должен совпадать с тем, что указано в /etc/init.d/squid потому как не сможете нормально стартовать/остановить squid. Если необходимо — внесите правки либо в squid.conf, либо создайте папку /var/run/squid и дайте пользователю, под которым запускается squid права на запись в данную папку.
pid_filename /var/run/squid/squid.pid

 ****

dns_nameservers 127.0.0.1

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 35
auth_param ntlm keep_alive off

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
# сколько процессов запускать
auth_param basic children 10
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

******

# ----------------------------------------------------------------
# DEFAULT CONFIG
# ----------------------------------------------------------------

# закомментировать для Squid3, для второй версии раскомментировать
#acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl webserver src 172.xx.1.254/32
acl SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT

acl MYDOMAIN proxy_auth REQUIRED

# внешняя ACL для разруливания по группам
external_acl_type ad_group ttl=120 %LOGIN /usr/lib64/squid/wbinfo_group.pl

acl extra external ad_group gl-Inet-extra
acl power external ad_group gl-Inet-power
acl users external ad_group gl-Inet-users

# список хостов, доступных пользователям группы gl-inet-users
acl allow_tender dstdom_regex "/etc/squid/acl/allow_tender"
# список запрещенных хостов
acl deny_hosts dstdom_regex "/etc/squid/acl/deny_hosts"
# список хостов, доступных без регистрации
acl allow_hosts dstdom_regex "/etc/squid/acl/allow_hosts"
acl no_delay dst "/etc/squid/acl/no_delay_hosts"
acl worktime time MTWHFS 8:00-19:30

# Default configuration

# пропускаем sqstat
http_access allow manager webserver
http_access deny manager

# Закрываем доступ, кроме как к разрешенным портам
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Разрешаем всем доступные сайты, этим же правилом срубаются все неавторизованные
http_access allow MYDOMAIN allow_hosts
# разрешаем доступ группе gl-inet-extra на все сайты
http_access allow extra all
# разрешаем доступ группе gl-inet-power на все сайты, кроме deny_hosts
http_access allow power !deny_hosts
# разрешаем доступ группе gl-inet-users на все разрешенные сайты allow_tender
http_access allow users allow_tender
# запрещаем доступ всем, кто не попал по вышестоящие правила
http_access deny all

miss_access allow localhost
miss_access allow MYDOMAIN allow_hosts worktime
miss_access allow extra all
miss_access allow power !deny_hosts worktime
miss_access allow users allow_tender worktime
miss_access deny all

 *****


# для того, чтоб выводились сообщения на русском сделать в директории /etc/squid
# ln -s /usr/share/squid/errors/Russian-1251 errors
# предварительно, удалив неправильную ссылку errors
error_directory /etc/squid/errors

 *****

Листинг файла /etc/hosts:
127.0.0.1 gw.BRANCH.office.com gw localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
172.xx.1.254 gw-BRANCH.BRANCH.office.com

Листинг файла /etc/resolv.conf:
nameserver 127.0.0.1
nameserver 172.xx.1.2
search BRANCH.office.com office.com

Листинг файла /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
  default_realm = BRANCH.OFFICE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes

[realms]
  BRANCH.OFFICE.COM = {
  kdc = 172.xx.1.2:88
  admin_server = 172.xx.1.2:749
  default_domain = branch.office.com
}

[domain_realm]
  .branch.office.com = BRANCH.OFFICE.COM
  branch.office.com = BRANCH.OFFICE.COM

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

Листинг /etc/samba/smb.conf:
[global]
  workgroup = BRANCH
  server string = BRANCH GW-Server
  netbios name = GW-BRANCH
  hosts allow = 127. 172.xx.

log file = /var/log/samba/%m.log
max log size = 50
security = ADS
password server = 172.xx.1.2
realm = BRANCH.OFFICE.COM

winbind uid = 10000 — 20000
winbind gid = 10000 — 20000
idmap backend = rid:BRANCH=10000 – 20000
winbind use default domain = yes
winbind enum users = yes
winbind refresh tickets = yes
winbind enum groups = yes
domain master = no
domain logons = no
local master = no
os level = 0
preferred master = no
load printers = no

Tips

Как узнать есть ли пользователь в группе, которой разрешен доступ в Интернет?

1.Залогиниться на сервере, где работает Squid
2.echo USER_NAME gl-inet-GROUPNAME | ПУТЬ_К_wbinfo_group.pl
где,
USER_NAME — логин пользователя в Active Directory, например, vasya
GROUPNAME — имя группы, например, gl-inet-users
ПУТЬ_К_wbinfo_group.pl — полный путь к файлу wbinfo_group.pl, например, /usr/lib64/squid/wbinfo_group.pl
Как открыть/закрыть пользователям доступ к определенным сайтам? Получив служебную записку от руководства на предоставление/закрытие доступа пользователям к определенным сайтам, нужно отредактировать списки с сайтами, которые находятся в файлах allow_hosts (сайты доступные без авторизации), allow_tender (сайты доступные авторизовавшимся пользователям из группы gl-inet-users), deny_hosts (сайты запрещенные авторизовавшимся пользователям из группы gl-inet-power)


1.Залогиниться на сервере, где работает Squid
2.cd /etc/squid/acl
3.Отредактировать указанные выше файлы по ситуации
4.Заставить squid перечитать свой конфигурационный файл — sudo /sbin/service squid reload


Проблема с пользователями Windows 7
Если машина с Windows 7 одна
1.проверить на win7 в реестре данный параметр LmCompatibilityLevel=0 (REG_DWORD), если его нет - создать
2.Перезагрузить машину

Если машин с Windows 7 сотни/тысячи (данный совет не всегда срабатывает)
1.Запустить редактор групповой политики
2.Создать/редактировать определенную политику (например, SquidWin7Auth)
3.Computer config (Конфигурация компьютера)->windows setting (Конфигурация Windows)->local policies (Локальные политики)->security option (Параметры безопасности)->Network security: LAN Manager authentication level (Безопасность сети: уровень проверки подлинности LAN Manager)
4.Set LM & NTLM — Use NTLMv2 session if negotited (Отправлять LM & NTLM — использовать сеансовую безопасность)


Активация Win7 вылетает с ошибкой 0x8004FE33 или подобной

Решение: Поскольку доступ в Интернет имеют ТОЛЬКО авторизованные пользователи, а программа активации не содержит возможности ввода учетных данных, необходимо в конфигурационный файл squid.conf внести изменения для разрешения доступа к домену microsoft.com и его поддоменам без требования логина/пароля.

Список сайтов необходимых для активации Win7:

http://go.microsoft.com/*
https://sls.microsoft.com/*
https://sls.microsoft.com:443
http://crl.microsoft.com/pki/crl/products/MicrosoftRootAuthority.crl
http://crl.microsoft.com/pki/crl/products/MicrosoftProductSecureCommunications.crl
http://www.microsoft.com/pki/crl/products/MicrosoftProductSecureCommunications.crl
http://crl.microsoft.com/pki/crl/products/MicrosoftProductSecureServer.crl
http://www.microsoft.com/pki/crl/products/MicrosoftProductSecureServer.crl


1.Залогиниться на сервере, где работает Squid
2.cd /etc/squid/
3.Отредактировать squid.conf
4. Внести в список контроля доступа acl msoft dstdomain .microsoft.com
5. Внести строку http_access allow all msoft ДО http_access allow MYDOMAIN allow_hosts
6. Внести строку miss_access allow all msoft ДО miss_access allow MYDOMAIN allow_hosts
7. Сохранить изменения и выйти
8. Заставить squid перечитать свой конфигурационный файл — sudo /sbin/service squid reload


Список литературы:

http://www.lissyara.su/articles/freebsd/programms/squid+ad/
http://bog.pp.ru/work/squid.html
http://linuxnews.ru/docs/squid.html
http://www.opennet.ru/base/net/squid_inst.txt.html

пятница, 20 мая 2011 г.

Ошибка при старте системы: piix4_smbus 0000.00.07.0: SMBus base address uninitialized - upgrade bios or ...

Обновил RHEL, установленную в VirtualBox, с версии 6.0 до 6.1, при старте вылезла такая ошибка: "piix4_smbus 0000.00.07.0: SMBus base address uninitialized - upgrade bios or use force_addr=0xaddr"
Обновление сначала делаю на тестовых и виртуальных машинах, чтоб не удивиться каким-то мелким нестыковкам при обновлении production-систем.

Итак, после загрузки и логина в систему:
# lsmod | grep piix
i2c_piix4 11098 0

**** 
Что за модуль i2c_piix4 и для чего он читаем здесь
http://www.kernel.org/doc/Documentation/i2c/busses/i2c-piix4

# lspci -v | grep -i piix4

Чтобы система не подгружала данный драйвер, добавляем его в blacklist список
echo "blacklist i2c_piix4" >> /etc/modprobe.d/blacklist.conf
reboot

Литература:
man modprobe.conf 
http://www.kernel.org/doc/Documentation/i2c/busses/i2c-piix4 

среда, 18 мая 2011 г.

VMware: VM Console error "Unable to connect to the MKS"

Собственно, вот такую ошибку словил при открытии консоли виртуальной машины с VMware Client: “Unable to connect to the MKS: Failed to connect to the server shu:902”.
Shu - имя ESX-сервера, 902 - порт, по которому происходит взаимодействие между vCenter и ESX-хостами. В DNS хост внесен. оказалось это накладка с клиентом DNS локальной машины. Помогает обычный пинг, либо перезапуск службы DNS-клиента.

среда, 4 мая 2011 г.

Linux IPSec + Cisco. Тунель между Cisco и Linux.

В праздничные дни внезапно упал канал между филиалом и главным офисом. Работать операторы могли через терминальный сервер, однако, несколько спец. программ работают только напрямую. Пришлось поднимать туннель между центральным маршрутизатором (cisco3800) и шлюзом под Linux (Fedora8). Небольшая заметка для себя.
Итак, имеем филиальский сервер, который выступает шлюзом в интернет.
$ rpm -q ipsec-tools
ipsec-tools-0.7-3.fc8
- Подсеть филиала 172.23.0.0/16
- Подсеть главного офиса - 10.0.0.0/8
- Подсеть2 главного офиса - 192.168.0.0/16
Приведенные выше подсети внутри разбиты на части, но с точки зрения маршрутизации, все они находятся за центральным маршрутизатором, так что имеет смысл определить только данные ("крупные") подсети.
- Внешние адреса с обеих сторон (1.1.1.1-linux и 2.2.2.2-cisco)


Конфигурационный файл - racoon.conf
Приведу только несколько измененных директив.

Нужно описать удаленный узел с помощью ключевого слова remote.
Если определено ключевое слово anonymous, то его параметры применяются ко всем удаленным узлам, которые явно не описаны в конфиге.

remote 2.2.2.2
{
# режим проверки подлинности
exchange_mode main,base;

# время жизни безопасного соединения (SA)
lifetime time 8 hour ;

# указываем в случае, если racoon только принимает запросы на соединение, т.е. пассивно ждет пакетов от инициатора. В этом случае, если нет заданных политик в базе данных политик безопасности (SPD — Security Policy Database), racoon выберет первое предложение, переданное инициатором и сгенерирует на его основе новую политику.
generate_policy on;

# пытаться ли участвовать в инициировании соединения или пассивно ждать
passive on ;
# phase 1 proposal (for ISAKMP SA)
proposal {
# Определяем алгоритм шифрования, используемый при проверке подлинности
encryption_algorithm 3des;
# Указываем алгоритм расчёта хэша, используемый на первой фазе согласования между узлами.
hash_algorithm sha1;
# Определяет метод проверки подлинности, используемый при согласовании узлов. В данном случае для проверки подлинности применяются предварительные общие ключи.
authentication_method pre_shared_key;
# Указывает номер группы Диффи-Хелмана для выбора динамически создаваемых ключей сеанса. У меня используется группа из 1024 бит.
dh_group 2 ;
}
}

Поля в sainfo описывают вторую фазу соединения между узлами IPsec — основу IPsec-соединения (включая используемый поддерживаемый алгоритм шифрования) и способ обмена ключами.

sainfo address 172.23.0.0/16 any address 10.0.0.0/8 any
{
# Определяет протокол обмена ключами Диффи-Хелмана, задающий алгоритм, по которому узлы IPsec устанавливают общий временный ключ сеанса для второй фазы соединения IPsec.
pfs_group 2;

# Этот параметр задаёт срок жизни SA и может быть определяться временем или объёмом данных в байтах.
lifetime time 1 hour ;

# Указываем поддерживаемые алгоритмы шифрования для фазы 2
encryption_algorithm 3des, blowfish 448, rijndael ;

# Перечисляем поддерживаемые алгоритмы хэша для проверке подлинности.
authentication_algorithm hmac_sha1, hmac_md5 ;

# Определяем алгоритм сжатия Deflate для поддержки сжатия IP-заголовков (IP Payload Compression, IPCOMP), что может увеличить скорость передачи IP-датаграм по медленным соединениям.
compression_algorithm deflate ;
}

sainfo address 172.23.0.0/16 any address 192.168.0.0/16 any
{
pfs_group 2;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}


Для управления базами безопасных соединений и политик безопасности (SAD/SPD) используется утилита setkey. Более подробное описание можно узнать из man setkey. Я приведу конфигурационный файл, описывающий создание безопасного соединения между подсетями филиала и центрального офиса:

#!/sbin/setkey -f
flush;
spdflush;

spdadd 172.23.0.0/16 10.0.0.0/8 any -P out ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
spdadd 10.0.0.0/8 172.23.0.0/16 any -P in ipsec esp/tunnel/2.2.2.2-1.1.1.18/require;

spdadd 172.23.0.0/16 192.168.0.0/16 any -P out ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
spdadd 192.168.0.0/16 172.23.0.0/16 any -P in ipsec esp/tunnel/2.2.2.2-1.1.1.1/require;


Первый запуск:
service racoon start

Смотрим лог в /var/log/racoon.log
Видим первую ошибку
pfkey X_SPDDUMP failed: No such file or directory

# setkey -D 
No SAD entries. 
Создание записей в БД безопасности из файла  
# setkey -f /etc/racoon/ipsec-tools.conf

Удаляем старые маршруты через маршрутизатор c2801:
route del -net 10.0.0.0 netmask 255.0.0.0 gw 172.23.0.1
route del -net 192.168.0.0 netmask 255.255.0.0 gw 172.23.0.1


Настройка iptables:
iptables
*filtet
-A INPUT -p esp -s 2.2.2.2/32 -j ACCEPT
-A INPUT -p udp --dport 500 -s 2.2.2.2/32 -j ACCEPT

*nat
-A POSTROUTING -s 172.23.0.0/16 -d 10.0.0.0/8 -j ACCEPT
-A POSTROUTING -s 172.23.0.0/16 -d 192.168.0.0/16 -j ACCEPT
-A POSTROUTING -s 172.23.0.0/16 -d ! 10.0.0.0/8 -o eth1 -j SNAT --to-source 1.1.1.1
-A POSTROUTING -s 172.23.0.0/16 -d ! 172.23.0.0/16 -o eth1 -j SNAT --to-source 1.1.1.1

service iptables restart


На стороне cisco филиала
удалить маршрутизацию в подсети, оставив маршрут по умолчанию на linux-шлюз.

no ip route 10.0.0.0 255.0.0.0 192.168.255.1
no ip route 192.168.0.0 255.255.0.0 192.168.255.1
ip route 0.0.0.0 0.0.0.0 172.23.1.254


На стороне Cisco в ЦО.
Не забыть применить crypto map на исходящем интерфейсе, а также указать какие интерфейсы участвуют в nat (ip nat inside и ip nat outside)

****
crypto isakmp policy 25
encr 3des
authentication pre-share
group 2
lifetime 3600
****

crypto isakmp key PASSWORD address 1.1.1.1 no-xauth
crypto ipsec transform-set BRANCH esp-3des esp-sha-hmac

crypto map IPSEC_MAP 48 ipsec-isakmp
description tunnel_to_Branch
set peer 1.1.1.1
set transform-set BRANCH
match address BRANCH-1

ip nat inside source list ALLOW_NAT interface GigabitEthernet0/1.40 overload

ip access-list extended BRANCH-1
permit ip 10.0.0.0 0.255.255.255 172.23.0.0 0.0.255.255
permit ip 172.16.0.0 0.15.255.255 172.23.0.0 0.0.255.255
permit ip 192.168.0.0 0.0.255.255 172.23.0.0 0.0.255.255

ip access-list extended ALLOW_NAT
deny ip any 10.0.0.0 0.255.255.255
deny ip any 172.16.0.0 0.15.255.255
deny ip any 192.168.0.0 0.0.255.255
permit ip any host 1.1.1.1
 *****


Литература:
man racoon.conf, man setkey, документация с сайта cisco.com