суббота, 6 ноября 2010 г.

торможение ssh и samba

Если у вас тормозит ssh и в логах (messages) такие сообщение

Nov  6 15:17:00 redhat smbd[13689]:   Unable to connect to CUPS server localhost:631 - В соединении отказано
Nov  6 15:17:00 redhat smbd[13689]: [2010/11/06 15:17:00, 0] printing/print_cups.c:cups_connect(69)

то скорее ssh тормозит из-за samba, проблему решило добавление в конфиг samba таких строк

load printers = no
printing = bsd
printcap name = /dev/null

и после перезапуска samba все стало нормально

настройка аудита Linux

Ставим пакет audit, и пускаем сервис service auditd start (предварительно проверив уровни запуска chkconfig --list auditd)

1). Настраиваем наблюдение за конфигами и логами системы аудита
#vim /etc/audit/audit.rules
# наблюдение за конфигруционными файлами
-w /etc/audit/auditd.conf -p wa
-w /etc/audit/audit.rules -p wa
-w /etc/libaudit.conf -p wa
-w /etc/sysconfig/auditd -p wa

 # наблюдение за журнальными файлами
-w /var/log/audit/
-w /var/log/audit/audit.log

где
-w - путь к файлу или директории (маски не позволительны)
-p - эквивалент фильтра perm (пример -F perm=aw, есть еще r (read), x (execute))
wa - w - запись (write), a - смена атрибутов (attribute change)

2). наблюдение за важными системными конфигурационнными файлами

# настройки и задания at
-w /var/spool/at/
-w /etc/at.deny

# задания cron
-w /etc/cron.deny -p wa
-w /etc/cron.d/ -p wa
-w /etc/cron.daily/ -p wa
-w /etc/cron.hourly/ -p wa
-w /etc/cron.monthly/ -p wa
-w /etc/cron.weekly/ -p wa
-w /etc/crontab -p wa
-w /var/spool/cron/root

# файлы паролей и груп
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow

# конфигурационные и журнальные файлы входа в систему
-w /etc/login.defs -p wa
-w /etc/securetty
-w /var/log/faillog
-w /var/log/lastlog

# список и имена хостов
-w /etc/hosts -p wa

# стартовый скрипты демонов
-w /etc/rc.d/init.d
-w /etc/rc.d/init.d/auditd -p wa

# пути поиска библиотек
-w /etc/ld.so.conf -p wa
-w /etc/ld.so.conf.d

# настройки времени
-w /etc/localtime -p wa

# системный переменные
-w /etc/sysctl.conf -p wa

# правила загрузки модулей
-w /etc/modprobe.d/

# модули системы PAM
-w /etc/pam.d

# настройки сервера SSH
-w /etc/ssh/sshd_config

3). настроим наблюдение за всеми системными вызовами, которые могут угрожать безопасности системы (применять в случае особой необходимости - высокая нагрузка на систему аудита и разрастание журналов файлов)

# изменения прав доступа к файлам
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown32

-a - добавить правило в список
entry - события происходящие на входе в системный вызов
always - собитие записываетсь в журнал собитий
-S - имя системного вызова

# создание, открытие или изменение размеров файлов
-a entry,always -S crate -S open -S truncate -S truncate64 -S ftruncate -S ftruncate64 -S

# создание и удаление каталогов
-a entry,always -S mkdir -S rmdir

# удаление и создание ссылок
-a entry,always -S unlink -S raname -S link -S symlink

# изменение расширенных атрибутов файлов
-a entry,always -S setxattr
-a entry,always -S lsetxattr
-a entry,always -S fsetxattr
-a entry,always -S removexattr
-a entry,always -S lremovexattr
-a entry,always -S fremovexattr

# создание файлов устройств
-a entry,always -S mknod

# монтирование файловых систем
-a entry,always -S mount -S umount -S umount2

# использование системного вызова ptrace для отладки процессов
-a entry,always -S ptrace

перегружаем демон

4). анализ журнальных файлов /var/log/audit/ нельзя делять редакторами (нечитабельны). Делает утилитами
aureport - общий анализ
aureport -f - список файлов к который происходил доступ
лучше запросить за определенный период (--end не обязателен)
aureport -f --start 09/20/10 13:00 --end 09/20/10 16:00
вместо времени можно использовать
now, recent (10 минут назад), today (начиная с полуночи), yesterday, this-week, this-month, this-year.
aureport -f --summary - какие файлы сколько раз были открыты

60. 06.11.2010 19:13:01 /etc/pam.d/crond 5 yes /usr/sbin/crond -1 11037
5 - номер системного вызова (чтобы видеть имя флаг -i)
yes - успешность или нет системного вызова
(deleted) -
-1 - UID (AUID) - пояснение ниже
11037 - номер события

каждое событие можно проанализировать утилитой
auserch -a номер_события (11037 - в нашем логе)
также можно искать события по именам системных вызовов (ключ -i)
auserch -sc ptrace -i
идентификаторам пользователей
ausearch -ui 500
именам исполняемых файлов
ausearch -x /usr/sbin/crond

имени терминала
ausearch -tm pts/0
именам демонов
ausearch -tm cron
или клуючам поиска
ausearch -k etc_access
можно также использовать временные промежутки

еще флаги aureport для генерации отчетов
-s - системный вызовы
-au - попытки аутентификации
-l - успешные логины
m - модификация экаунта
--failed - отчеты можно получать только для событий, завершившихся неудачно

пользователь может использовать команды su sudo, чтобы менять свой (UID), чтобы это обойти используется Audit UID (AUID), которые закрепляются за пользователем при входе в систему и не меняются, по умолчанию эта функция отключена по этому и -1, активация
/etc/pam.d/login добавить session required pam_loginuid.so
перед строкой (session    include    common-session -  dedian), у меня (rpm based), можно до и после

session    include      system-auth
также нужно проверить или установщик не добавил уже эту строку, ту же операцию проделываем с другими файлами
/etc/pam.d/sshd gdm(kdm или kde) crond atd

источник: Пингвин под колпаком (Аудит системный событий в Linux) (Хакер, 11/142/2010 — 126)
Дополнительная информация
http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
http://linux.die.net/man/7/audit.rules
http://www.xakep.ru/post/54897/?print=true

пятница, 17 сентября 2010 г.

cisco спамеры и как их вычислить

Создаем access-list в котором прописываем строчку
deny tcp any any eq smtp log
а также увеличиваем буфер логирования
logging buffered 16000
и тогда в логе можно наблюдать спамеров или ботов, которые рассылают спам и потом их уничтожать. Приведу пример такого лога
.Sep 17 09:39:15: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2090) -> 168.215.84.83(25), 1 packet
.Sep 17 09:39:18: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2086) -> 213.83.66.209(25), 1 packet
.Sep 17 09:39:23: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2054) -> 64.18.4.10(25), 1 packet
.Sep 17 09:39:30: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2318) -> 207.126.147.12(25), 1 packet
.Sep 17 09:39:34: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2287) -> 207.17.33.102(25), 1 packet
.Sep 17 09:39:35: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2428) -> 204.4.187.100(25), 1 packet
.Sep 17 09:39:37: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2404) -> 88.27.242.43(25), 1 packet
.Sep 17 09:39:44: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2430) -> 199.43.38.109(25), 1 packet
.Sep 17 09:39:46: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2582) -> 208.15.91.13(25), 1 packet
.Sep 17 09:39:47: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2608) -> 32.97.182.143(25), 1 packet
.Sep 17 09:39:48: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2494) -> 129.41.169.246(25), 1 packet
.Sep 17 09:39:51: %SEC-6-IPACCESSLOGP: list ExtFW_Block_SMTP denied tcp 21.90.16.166(2628) -> 64.18.7.11(25), 1 packet

пятница, 10 сентября 2010 г.

fail2ban и борьба со спамом

Мне надоело смотреть на лог присланный logwatch который весил 3 мб, и 99% его составлял лог posfixа, которые очень часто одним и тем же айпишником пишет одни и те же ошибки и решил подключить в помощь postfixу fail2ban, который бы почтовики, не прошедшие проверку, после 1 проверки на час (раньше половину суток было - неоправдано, поскольку иногда недостуны днс провайдера и не проходит проверка обратной зоны и легитимный хост может пол суток быть отвергаемый не по своей вине) отправлял в бан, чтобы они не надоедали почтовику заниматься полезной нагрузкой.
Было создано правило (каждый из regexp объясню ниже)
cat /etc/fail2ban/filter.d/mail.conf (коментарии пропущены)

[INCLUDES]

before = common.conf

[Definition]

failregex =
cannot find your hostname\S \S<HOST>\S
RCPT from .+\[<HOST>\]: .+ Recipient address rejected: User unknown in virtual mailbox table
Client host \[<HOST>\] blocked using [\.\w]+;
RCPT from .+\[<HOST>\]: .+: Sender address rejected: Domain not found
RCPT from .+\[<HOST>\]: .+: Helo command rejected:
warning: .+\[<HOST>\]: SASL LOGIN authentication failed:
milter-reject: END-OF-MESSAGE from .*\[<HOST>\]
ignoreregex =

а также добавлена секция в файл /etc/fail2ban/jail.conf

[mail-iptables]

enabled = true
filter = mail
action = iptables[name=mail, port=smtp, protocol=tcp]
logpath = /var/log/maillog
maxretry = 1

то есть после 1 неудачи спамер долго к почтовику подключится не может.
Теперь поясню правила на примерах лога (часть лога которая берется в качестве основы регулярного выражения выделена жирным):

1). баним хосты не имеющие обратной зоны;

cannot find your hostname\S \S<HOST>\S

Sep 5 05:10:17 redhat postfix/smtpd[26817]: NOQUEUE: reject: RCPT from unknown[91.218.38.132]: 450 4.7.1 Client host rejected: cannot find your hostname, [91.218.38.132]; from=<gais@allexperts.com> to=<olya@chucha.kiev.ua> proto=ESMTP helo <mail.ru>

в postfix (main.cf )должна быть включена проверка
smtpd_client_restrictions =
reject_unknown_client_hostname

2). баним хосты, которые не знают наших почтовых пользователей 

RCPT from .+\[<HOST>\]: .+ Recipient address rejected: User unknown in virtual mailbox table

Sep 6 00:31:50 redhat postfix/smtpd[24421]: NOQUEUE: reject: RCPT from wpc4883.amenworld.com[85.10.140.230]: 550 5.1.1 <jdauaaysieugeniavoznyuk@chukcha.kiev.ua>: Recipient address rejected: User unknown in virtual mailbox table<jdauaaysieugeniavoznyuk@chukcha.kiev.ua>; from=<isaiah@gmail.com> to=<jdauaaysieugeniavoznyuk@chukcha.kiev.ua> proto=ESMTP helo=<wpc4883.home>

3). баним хосты, которые уже забанены каким-то DNSBL

Client host \[<HOST>\] blocked using [\.\w]+;

Sep 7 08:35:36 redhat postfix/smtpd[16967]: NOQUEUE: reject: RCPT from net-93-64-240-213.cust.dsl.vodafone.it[93.64.240.213]: 554 5.7.1 Service unavailable; Client host [93.64.240.213] blocked using zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=93.64.240.213; from=<lulow5021@vodafone.it> to=<memory@chukcha.kiev.ua> proto=ESMTP helo=<vodafone.it>

в postfix (main.cf )должна быть включена проверка
smtpd_recipient_restrictions =
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client b.barracudacentral.org,
reject_rbl_client db.wpbl.info
reject_rbl_client psbl.surriel.com,
reject_rbl_client sbl.csma.biz,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client bl.spamcannibal.org,

4). баним хосты, домен которых не существует

RCPT from .+\[<HOST>\]: .+: Sender address rejected: Domain not found

Sep 8 18:41:46 redhat postfix/smtpd[21768]: NOQUEUE: reject: RCPT from host81-149-53-2.in-addr.btopenworld.com[81.149.53.2]: 450 4.1.8 <zelenii@bigart.com.ua&t;: Sender address rejected: Domain not found; from=<zelenii@bigart.com.ua> to=<olya@chukcha.kiev.ua> proto=ESMTP helo=<icasexch.icas.local>

в postfix (main.cf )должна быть включена проверка
smtpd_recipient_restrictions =
reject_unknown_sender_domain,

5). баним хосты, у которых hello кривое

RCPT from .+\[<HOST>\]: .+: Helo command rejected:

Sep 23 00:20:09 redhat postfix/smtpd[28248]: NOQUEUE: reject: RCPT from 110-210.trifle.net[212.3.110.210]: 504 5.5.2 <silvina-bfam4c5>: Helo command rejected: need fully-qualified hostname; from=<stem8@eiras.ru> to=<igor@chukcha.kiev.ua> proto=ESMTP helo=<silvina-bfam4c5>

в postfix (main.cf )должна быть включена проверка
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
check_client_access hash:/etc/postfix/whitelisted_clients,
check_client_access hash:/etc/postfix/blacklisted_clients,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_invalid_hostname,
check_helo_access hash:/etc/postfix/access_helo,
permit
cat /etc/postfix/access_helo
127.0.0.1                       REJECT Your server configured incorrectly
localhost                       REJECT Your server configured incorrectly
localhost.localdomain  REJECT Your server configured incorrectly
localhost.domain.com  REJECT Your server configured incorrectly
10                                   REJECT Your server configured incorrectly
172.16                            REJECT Your server configured incorrectly
192.168                          REJECT Your server configured incorrectly
1.2.3.4                           REJECT Your server configured incorrectly
name1.domain.com      REJECT Your server configured incorrectly
name2.domain.com      REJECT Your server configured incorrectly
name3.domain.com      REJECT Your server configured incorrectly
mail3.kc.sss                  OK
promkmos.PMK.local   OK
romkmos2.PMK.local   OK

обьяснения см. http://www.opennet.ru/docs/RUS/postfix_soho/


6). баним хосты, которые хотят подобрать авторизацию и отправить письмо через демон saslauth

warning: .+\[<HOST>\]: SASL LOGIN authentication failed:

Oct 23 11:53:31 redhat postfix/smtpd[13090]: warning: 190.172.0.4: hostname 190-172-0-4.speedy.com.ar verification failed: Name or service not known
Oct 23 11:53:31 redhat postfix/smtpd[13090]: connect from unknown[190.172.0.4]
Oct 23 11:53:33 redhat postfix/smtpd[13090]: warning: unknown[190.172.0.4]: SASL LOGIN authentication failed: authentication failure
Oct 23 11:54:36 redhat postfix/smtpd[13090]: warning: unknown[190.172.0.4]: SASL LOGIN authentication failed: authentication failure
Oct 23 11:54:54 redhat postfix/smtpd[13090]: warning: unknown[190.172.0.4]: SASL LOGIN authentication failed: authentication failure
Oct 23 11:54:56 redhat postfix/smtpd[13090]: too many errors after AUTH from unknown[190.172.0.4]
Oct 23 11:54:56 redhat postfix/smtpd[13090]: disconnect from unknown[190.172.0.4]

7). баним хосты которые не нравятся политике dkim-milter, а собственно

/etc/mail/dkim-milter/dkim-filter.conf

On-Default              reject
On-BadSignature         reject
On-DNSError             tempfail
On-InternalError        accept
On-NoSignature          accept
On-Security             discard

milter-reject: END-OF-MESSAGE from .*\[<HOST>\]

Apr  8 04:53:54 redhat postfix/cleanup[7219]: 4654B6A68001: milter-reject: END-OF-MESSAGE from mails.marsmail.com.ua[91.224.75.2]: 4.7.1 Service unavailable - try again later; from=<irina04041@marsmail.com.ua> to=<sales@chukcha.kiev.ua> proto=ESMTP helo=<mails.marsmail.com.ua>

что обозначают значки + \S и другие в регулярных выражениях можно почитать сдесь http://www.py-my.ru/post/4bfb3c691d41c846bc000081, а как пользоваться утилитой fail2ban-regex для проверки регулярных выражений на строке, файле здесь 
http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Usage

Теперь у меня в табличке iptables которая баних почтовики стандартно 900-1300 хостов:
hostname#iptables -n --list fail2ban-mail | wc -l
1041
и в логе fail2ban за 1 минуту 1-4 хоста или банится или разбанивается
#tail /var/log/fail2ban.log
2010-09-10 15:51:51,473 fail2ban.actions: WARNING [mail-iptables] Unban 77.120.122.24
2010-09-10 15:52:54,579 fail2ban.actions: WARNING [mail-iptables] Unban 186.203.62.80
2010-09-10 15:54:34,733 fail2ban.actions: WARNING [mail-iptables] Unban 201.240.87.5
2010-09-10 15:55:01,781 fail2ban.actions: WARNING [mail-iptables] Unban 124.105.93.2
2010-09-10 15:55:39,851 fail2ban.actions: WARNING [mail-iptables] Unban 116.114.83.32
2010-09-10 15:56:00,895 fail2ban.actions: WARNING [mail-iptables] Unban 212.30.218.11
2010-09-10 15:56:14,094 fail2ban.actions: WARNING [mail-iptables] Unban 125.165.34.1
2010-09-10 15:56:30,130 fail2ban.actions: WARNING [mail-iptables] Unban 196.205.231.112
2010-09-10 15:56:42,153 fail2ban.actions: WARNING [mail-iptables] Ban 195.184.220.242
2010-09-10 15:56:56,185 fail2ban.actions: WARNING [mail-iptables] Unban 115.75.224.221

и лог logwatch стал приятно меньше.

также sasl кракеров можно рубать и стандартными средствами из jail.conf

[sasl-iptables]

enabled  = true 
filter   = sasl
backend  = polling
action   = iptables[name=sasl, port=smtp, protocol=tcp]
#           sendmail-whois[name=sasl, dest=you@example.com
logpath  = /var/log/maillog 

четверг, 29 июля 2010 г.

ACL (getfacl, setfacl)

Порядок установки ACL:
1.Устанавливаем маску максимальных полномочий, она определяется из тех максимальных полномочий, которые должны быть у пользователя или группы на ресурс
2.Устанавливаем или модифицируем необходимые ACL с опцией отменяющей изменение маски максимальных полномочий
3.Удаляем  все или необходимые ACL записи
Важно!
1.ACL никоим образом не влияет на права доступа для владельца

2.Изменение маски максимальных полномочий отражается на группе по умолчанию, т.е права определённые маской максимальных полномочий определяются и для группы по умолчанию
3.Изменение прав доступа для категории o(other) в ACL влияет на категорию o(other) по умолчанию
При установки ACL для многих групп (u,g,o) в качестве разделителя используется запятая(,). 

Установка доступа rwx для пользователя user на каталог 1
setfacl -R -m u:user:rwx /safe/samba/users/1
- R - рекурсивно
- m - изменение
Установка доступа rwx для пользователя user на каталог 1 по умолчанию (то есть все файлы будут создаваться с указанным доступом)
setfacl -R -d -m u::rwx,g::---,o::---,u:user:rwx /safe/samba/users/1
посмотреть их можно
[root@redhat ~]# getfacl /safe/samba/users/1
getfacl: Removing leading '/' from absolute path names
# file: safe/samba/users/1
# owner: telemarketing1
# group:tele
user::rwx
user:user:rwx
user:telemarketing1:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:telemarketing1:rwx
default:group::---
default:mask::rwx
default:other::---
Нужные ключи:
-b – удаляет все установленные ACL
-m   – добавляет и модифицирует существующие записи ACL
-M - добавляет и модифицирует существующие ACL взятые из указанного файла
-n – не изменяет существующую маску максимальных полномочий при установке ACL
-x – удаляет конкретную запись ACL
-X – удаляет записи ACL взятые из указанного файл

-k - удаляет значения по умолчанию (Default ACL)
-d - вывод (задание) только значения по умолчанию Default ACL
-a Вывод ACL без Default ACL.

При установке ACL важен порядок следования опций, опция –n должна следовать перед опцией –m или -x
Важно!
Обязательно не забывайте использовать опцию –n при установке, модификации или удалении существующих ACL, так как при добавлении, модификации или удалении ACL без опции –n происходит изменение максимальной маски полномочий в сторону уменьшения или увеличения, в зависимости от прав доступа.
Пример почему это важно
Удалим ACL установленные для пользователя tests:
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-         # effective: r--
user:tests:rw-          # effective: r--
group::r--
mask::r--
other::r--
fdesktop1# setfacl -n -x u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-         # effective: r--
group::r--
mask::r--
other::r--
Сделаем тоже самое, только без опции –n для демонстрации того, как меняется максимальная маска полномочий:
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-         # effective: r--
user:tests:rw-          # effective: r--
group::r--
mask::r--
other::r--
fdesktop1# setfacl -x u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-
group::r--
mask::rw-
other::r--
Как можно видеть максимальная маска полномочий изменилась в сторону увеличения, что соответственно может привести к проблемам с безопасностью, поэтому будьте внимательны.

Продвинутое использование:
Cохранить и восстановить списки контроля доступа (архивирование данных или переносе в другую систему например)
# getfacl -R --skip-base . > backup.acl
# setfacl --restore=backup.acl
Если для некоторого файла или каталога требуется установить разрешения, которые сходны с уже имеющимися, то можно поступить так (опции, написанные с заглавной буквы, применяются при использовании в качестве ввода результата работы другой утилиты).
#  getfacl -a dir | setfacl -M - dir
#  getfacl file1 | setfacl -S- file2
Чтобы удалить разрешение, используйте опцию -х. Например, удалим права для группы sales:
# setfacl -x g:sales test_acl
Опция -m модифицирует (а фактически сохраняет) старые разрешения, добавляя к ним  новые. В некоторых случаях проще установить новые права на файл или каталог, полностью затерев старые. Для этих целей используется флаг -b.
# setfacl -m u:fedja:rw,g:netadmin:rwx test_acl_file
Установленную для каталога маску доступа, используемую по умолчанию, можно изменить так:
# setfacl -m default:u::rx acldir

среда, 21 июля 2010 г.

linux автоматическая авторизация в разных системах

#!/usr/bin/expect -f
set timeout 20
spawn /usr/kerberos/bin/kinit -r 30d user@KTDOMAIN
expect "Password for workuser@KTDOMAIN:" { send "password\n" }
interact

скрипт получает тикет от Active Directory, очень важна строка "set timeout 30" (например задержки в 20 секунд не хватает поэтому нужно проверять хватает ли времени) - скрипт не будет без нее работать в crontab.

если в скрипте не только еxpect, то есть есть еще куча команд (использовал источник
http://stackoverflow.com/questions/10393848/using-expect-in-bash-script)

#!/bin/bash
cd /var/www/domains/bridge.com/
echo "Updating Source start"
expect <<- DONE
  set timeout  -1
  spawn git pull
  expect "*?assword:*"
  send -- "b15\r"
  send -- "\r"
  expect eof
DONE
echo "Updating Source done"

ясное дело если есть переменные (смотрим вышеприведенный источник нужно писать в начале скрипта #!/usr/bin/env bash)

но если сессия должна остаться и вы будете дальше что-то вводить (interact), то конечно нужно использовать конструкции вроде (источник http://blog.omnidarren.com/2011/04/quick-and-dirty-telnet-script-for-switches-in-bash/)

#!/bin/bash
(expect -c "
set timeout  20
spawn /usr/bin/telnet $1
expect \"Username:\"
send \"user\r\"
expect \"Password:\"
send \"pass\r\"
expect \">\"
send \"enable\r\"
expect \"Password:\"
send \"pass_en\r\"
interact
exit
")



среда, 14 июля 2010 г.

загрузка модулей ядра при старте (modprobe preload)

/etc/modprobe.preload: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.
# this file is for module-init-tools (kernel 2.5 and above) ONLY
# for old kernel use /etc/modules

intel_agp
evdev
ip_conntrack_ftp

как видим файл называется /etc/modprobe.preload, старый /etc/modules уже не используется.
ip_conntrack_ftp - используется для коректной работы с пасивным ftp iptables, файла iptables-config mandriva не содержит

в redhat es 5.2 файлик такой есть /etc/sysconfig/iptables-restore там модули задаются через пробел в строке IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"

понедельник, 5 июля 2010 г.

обмен трафик машинами, которы обе за NAT

./pwnat <-s|-c> <args> (-s, -c - клиент и сервер)
Для клиента
: [local ip] <local port> <proxy host> [proxy port (def:2222)] <remote host> <remote port>
Для сервера (можно помимо прочего указать доверенные хосты и порты)
: [local ip] [proxy port (def:2222)] [[allowed host]:[allowed port]...]

среда, 23 июня 2010 г.

медленная печать в cups

был принтяк hp1200 (подключен по USB), какие дрова не ставил всегда медленная печать, скачал поставил PPD файл - ничего не изменилось
залез в него
vim /etc/cups/ppd/hp1200_l.ppd
нашел там строку *DefaultResolution: 1200dpi
как видим разрешалка не кислая и поэтому листы долго формируются
строку исправил *DefaultResolution: 300dpi
принтер стал печатать с нормальной скоростью как под виндой.

пятница, 21 мая 2010 г.

анонимайзеры

http://anon.rengo.ru/ - не работает youtube, работаеют odnoklasniki, vkontakte
ctunnel.com - не работают odnoklasniki, vkontakte, работает youtube

postfix автоответчик

Приведу работающий тестовый вариант.

master.cf

autoreply unix - n n - - pipe
flags= user=nobody argv=/usr/local/etc/postfix/autoreply $sender $mailbox

main.cf

virtual_mailbox_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
transport_maps = hash:/usr/local/etc/postfix/transport

transport

autoreply.example.ru autoreply:

mysql base

address goto

mailbox@example.ru mailbox@example.ru,mailbox@example.ru@autoreply.example.ru

autoreply

#!/bin/sh
/usr/sbin/sendmail -f $2 $1 < /usr/local/etc/postfix/autoreply.txt

autoreply.txt

This is a autoreply text
I am absent
Send mail later

источник http://www.postfix.ru/viewtopic.php?t=14020&highlight=%C0%E2%F2%EE%EE%F2%E2%E5%F2%F7%E8%EA

у меня

master.cf

autoreply unix - n n - - pipe
flags= user=nobody argv=/etc/postfix/autoreply $sender $mailbox

main.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
transport_maps = hash:/etc/postfix/transport

transport

autoreply.example.ru autoreply:

mysql base

address goto

mailbox@example.ru mailbox@example.ru,mailbox@example.ru@autoreply.example.ru

autoreply

#!/bin/sh
/usr/sbin/sendmail -f $2 $1 < /etc/postfix/autoreply.txt

autoreply.txt

This is a autoreply text
I am absent
Send mail later

!!!Не ставить не в коем случае админа, поскольку при нахождении письма на список рассылки, ему прийдет письмо -> список рассылки -> невозможность доставки на список рассылки (обратный адрес ее не такой как прямой) -> даемон админу о невозможности доставки -> автоответчик что админа нет -> даемон админу о невозможности доставки - цикл пошел!!!
Чтобы этого не случилось в mailman нужно в настройке рассылки поставить нет - Обработка ошибок доставки -> Должна ли программа Mailman пересылать вам, администратору списка рассылки, все сообщения о невозможности доставить сообщение, необработанные обработчиком ошибок доставки? Рекомендуется установить в Да. (Подробная информация о "bounce_unrecognized_goes_to_list_owner")

пятница, 14 мая 2010 г.

програмированние и отладка на php

1). традиционный метод "руками"
вывод все сообщений об ошибках (директива error_reporting установлена E_ALL) и расстановкой echo/print сообщений по всему коду (http://phpfaq.ru/debug)
2). продвинутый
отладчик Expert Debugger (phpexperteditor.com) - создали авторы PHP Expert Editor. Скачать с www.ankord.com

четверг, 13 мая 2010 г.

глюки npviewer.bin (flash) в firefox (жрет cpu)

1). */10 * * * * pkill npviewer.bin
2). установить дополнения в firefox - noscript or flashblock.
альтернатива
3). убиваем флешплеер установленный пакетом
качаем tar.gz from adobe.com и файл из архива кидаем libflashplayer.so
/usr/lib/opera/plugins/
/home/vova/.mozilla/plugins/
и проблемы нет

пятница, 16 апреля 2010 г.

Как экранировать html код (вывести код на страницу)?

Нету тега. Надо знать HTML entities, чтобы выводить HTML код на страницу, например, чтобы вывести HTML строку, где слова "моя Москва" жирным (обрамлены тегом Bold), надо открывающие и закрывающие угловые скобки обозначать с помощью HTML entities:
& lt; и & gt; (без пробела; я пробел поставил, чтобы в Ответе не произошло распознавание этого).

То есть, надо вот так писать, чтобы это не было воспринято как часть HTML кода Вашей страницы, а именно как выведение на экран строки HTML кода (без пробела после & что я здесь имею):

& lt;bold& gt;моя Москва& lt;/bold& gt; (пробелы после & ясно что не нужны)

На экране страницы будет вот такой 'вывод HTML кода':

<bold>моя Москва</bold>

То есть, смысл в том, чтобы не было воспринято как код страницы...

источник http://otvet.mail.ru/question/18202288/

<local port> то есть сдесь < земенено & lt; > & gt; пробел & nbsp; (пробелы после & ясно что не нужны)

cups удаленный доступ

Строки которые нужно заменить или добавить выделены жирным

Port 631 заменить ее строку Listen Localhost:631
Listen /var/run/cups/cups.sock

# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
# (Change '@LOCAL' to 'ALL' if using directed broadcasts from another subnet.)
BrowseAllow @LOCAL

# Default authentication type, when authentication is required...
DefaultAuthType Basic

# Restrict access to the server...
<Location />
Order allow,deny
Allow @LOCAL добавить
</Location>

# Restrict access to the admin pages...
<Location /admin>
Encryption Required
Order allow,deny
Allow @LOCAL добавить
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow @LOCAL добавить
</Location>

потом можно удаленно подключиться по адресу ip:631 или локально lynx localhost:631 и запустить принтер который не печатает. Также локально lynx localhost:631 можно включить и удаленные доступ через меню Администрирования (прийдется ввести логин рута и пароль) и после этого не забыть чуть ниже нажать кнопку сохранить настройки

пятница, 9 апреля 2010 г.

Анализ системы после взлома

1). touch изменяет лишь время модификации файла (mtime) и время доступа, но у файла есть атрибут ctime (Change Time) - фиксирует время изменения метаданных файла (например прав доступа, владельца, группы и т.д.). Чтобы найти свежезалитых и спрятанных шеллов:
find {КАТАЛОГ} -ctime -1
Менять атрибут можно лишь с правами рута, средства для этого http://www.krazyworks.com/changing-time/ или http://www.securiteam.com/tools/5JP0H2K7FE.html

четверг, 25 марта 2010 г.

Intrusion Detection For PHP Applications With PHPIDS

Эта статья покажет как настроить PHPIDS. PHPIDS (PHP-Intrusion Detection System) - это легко используемая, хорошо структурированная, быстрая прослойка для анализа безопасности ваших приложений. IDS - не является прослойкой для анализа данных, введенных пользователем, он только распознает, когда пытаются атаковать ваш сайт. на основе набора проверенных и оттестированных правил каждой атаке сопоставлен рейтинг ее опасности. Это позволит легко сохранять статистику по атакам или отсылать уведомления для команды разработчиков.

Apache версии 2 и PHP5, IP - мой. Пользователь и группа Apache - apache. Путь к php.ini - etc/php.ini. В качестве document root использовался /var/www/html/

Установка PHPIDS
Из изображений безопасности я установил PHPIDS вне document root, поэтому я создал /var/www/phpids:

Затем я установил PHPIDS (на момент установки последняя версия была 0.5).

cd /tmp
wget http://php-ids.org/files/phpids-0.4.7.ta…
tar xvfz phpids-0.4.7.tar.gz
cd phpids-0.4.7
mv lib/ /var/www/web1/phpids/
cd /var/www/web1/phpids/lib/IDS
chown -R apache:apache tmp/

Далее я переконфигурировал Config.ini:

cd Config/
vi Config.ini


Я использую конфигурацию по умолчанию, и все что надо сделать - это поменять пути

; PHPIDS Config.ini

; General configuration settings

; !!!DO NOT PLACE THIS FILE INSIDE THE WEB-ROOT IF DATABASE CONNECTION DATA WAS ADDED!!!

[General]

filter_type = xml
filter_path = /var/www/phpids/lib/IDS/default_filter.xml
tmp_path = /var/www/phpids/lib/IDS/tmp
scan_keys = false

exceptions[] = __utmz
exceptions[] = __utmc

; If you use the PHPIDS logger you can define specific configuration here

[Logging]

; file logging
path = /var/www/phpids/lib/IDS/tmp/phpids_log.txt

; email logging

; note that enabling safemode you can prevent spam attempts,
; see documentation
recipients[] = test@test.com.invalid
subject = "PHPIDS detected an intrusion attempt!"
header = "From: info@php-ids.org"
safemode = true
allowed_rate = 15

; database logging

wrapper = "mysql:host=localhost;port=3306;dbname=phpids"
user = phpids_user
password = 123456
table = intrusions

; If you would like to use other methods than file caching you can configure them here

[Caching]

; caching: session|file|database|memcached|none
caching = file
expiration_time = 600

; file cache
path = /var/www/phpids/lib/IDS/tmp/default_filter.cache

; database cache
wrapper = "mysql:host=localhost;port=3306;dbname=phpids"
user = phpids_user
password = 123456
table = cache

; memcached
;host = localhost
;port = 11211
;key_prefix = PHPIDS
;tmp_path = /var/www/phpids/lib/IDS/tmp/memcache.timestamp

Использование PHPIDS

Сейчас мы создадим /var/www/html/phpids.php, который будет использовать PHPIDS

set_include_path(
get_include_path()
. PATH_SEPARATOR
. '/var/www/phpids/lib'
);

require_once 'IDS/Init.php';
$request = array(
'REQUEST' => $_REQUEST,
'GET' => $_GET,
'POST' => $_POST,
'COOKIE' => $_COOKIE
);
$init = IDS_Init::init('/var/www/phpids/lib/IDS/Config/Config.ini');
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();

if (!$result->isEmpty()) {
// Take a look at the result object
echo $result;
require_once 'IDS/Log/File.php';
require_once 'IDS/Log/Composite.php';

$compositeLog = new IDS_Log_Composite();
$compositeLog->addLogger(IDS_Log_File::getInstance($init));
$compositeLog->execute($result);
}

После этого введите в своем браузере http://192.168.0.100/phpids.php, и вы увидите пустую страницу.
Однако если вы добавите различные параметры, например http://192.168.0.100/phpids.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E, PHPIDS определит их и напечатает результат в браузер

otal impact: 54
Affected tags: xss, csrf, id, rfe, lfi, sqli

Variable: REQUEST.test | Value: ">XXX
и т.д.

Сейчас мы сделаем так, чтобы PHPIDS тиспользовался в каждом вашем скрипте. Конечно, вам не придется модифицировать каждый файл php в вашей системе. Мы скажем php, чтобы он запускал PHPIDS при каждом старте скрипта. Мы сделаем это используя auto_prepend_file параметр. Для этого сделаем модификацию в php.ini или .htaccess file

auto_prepend_file = /var/www/html/phpids.php
или для .htaccess
php_value auto_prepend_file /var/www/html/phpids.php

Перепустите ваш Apache (для случая с модификацией php.ini)

Создайте файл info.php с содержимым

phpinfo();

Напишите в браузере http://192.168.0.100/info.php и вы увидите нормальный вывод команды phpinfo()
теперь добавьте параметры, например http://192.168.0.100/info.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E и вы увидите

PHPIDS запишет эти данные в /var/www/phpids/lib/IDS/tmp/phpids_log.txt

"192.168.0.200",2008-06-04T17:36:08+02:00,54,"xss csrf id rfe lfi","REQUEST.test=%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E GET.test=%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E",
"%2Finfo.php%3Ftest%3D%2522%253EXXX%253Cscript%253Ealert%281%29%253C%2Fscript%253E"

Теперь, просмотрев записи. вы увидите, что хакер пытался что-то сделать с вашим приложением.

Для добавления другого уровня безопасности для вашего приложения вы можете остановить скрипт, если PHPIDS обнаружил атаку:
мы можем добавить что-то похожее на это
die('
Go away!
');
в секцию if (!$result->isEmpty()) {} в файле /var/www/html/phpids.php script

set_include_path(
get_include_path()
. PATH_SEPARATOR
. '/var/www/phpids/lib'
);

require_once 'IDS/Init.php';
$request = array(
'REQUEST' => $_REQUEST,
'GET' => $_GET,
'POST' => $_POST,
'COOKIE' => $_COOKIE
);
$init = IDS_Init::init('/var/www/phpids/lib/IDS/Config/Config.ini');
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();

if (!$result->isEmpty()) {
// Take a look at the result object
echo $result;
require_once 'IDS/Log/File.php';
require_once 'IDS/Log/Composite.php';

$compositeLog = new IDS_Log_Composite();
$compositeLog->addLogger(IDS_Log_File::getInstance($init));
$compositeLog->execute($result);

die('
Go away!
');
}

Если нет атаки скрипт продолжит выполнение, иначе хакер увидит это

коментарий переводчика
Указанные выше примеры можно использовать и на боевых системах. Однако для этого потребуется некое преобразование

$init = IDS_Init::init('/var/www/phpids/lib/IDS/Config/Config.ini');


так как каждый раз незачем загружать файл настроек из файла, а заменить его написанным заранее классом

источник http://habrahabr.ru/blogs/php/31617/

четверг, 18 марта 2010 г.

пятница, 12 марта 2010 г.

Упрощаем скачку с rapidshare и их клонов

если 1 файл - аддон firefox - SkipScreen (scipscreen.com)
файл разбит на части - JDownloader (jdownloader.org) - если не подхватил ссылку значит сервис не поддерживается
вылажывать лучше на "Народ.Диском" yandex - 5 Gb ограничение

вторник, 9 марта 2010 г.

iptables ньюансы настройки

1). Критерий recent iptables позволяет запомнить не более 100 хостов, для увеличения нужно сделать (критерий служит для защиты от сканирования портов)
в /etc/modrobe.conf
для Debian
/sbin/modprobe ipt_recent ip_list_tot=100000
/sbin/modprobe xt_recent ip_list_tot=100000
RedHat, CentOS
options ipt_recent ip_list_tot=100000
Потом перезагрузка
для ядра Linux redhat 2.6.18-164.9.1.el5 есть баг, где это значение не может превысить 5000
2). ограничение количества одновременных соединений (10 штук в примере)
-m connlimit ! --connlimit-above 10 -j ACCEPT
3). борьба с нестандартными видами сканирования (nmap -sN (пакеты без флагов), -sF (FIN установлен) -sX (FIN, PSH и URG установлены))
запрет FIN-сканирования
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -m comment --comment "запрет FIN-сканирования" -j DROP
запрет X-сканирования
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -m comment --comment "запрет X-сканирования" -j DROP
запрет N-сканирования
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m comment --comment "запрет N-сканирования" -j DROP
запрет SYN/ACK- сканирования (nmap -sS - связь разрывается сразу после ответа на запрос открытия соединения) (поддержка только в версии 1.4.6)
iptables -I INPUT -p tcp -m osf --genre NMAP -j DROP
защита от тупого стандартного сканирования (nmap -sT - обычное TCP-сканирование состоящее в открытии соединения на порту и его завершения)
iptables -A INPUT -m recent --rcheck --second 3600 --hitcount 10 --rttl -m comment --comment "проверка на стук в нерабочие порты 10 в час" -j RETURN
iptables -A INPUT -m recent --rcheck --second 60 --hitcount 2 --rttl -m comment --comment "вторая проверка на стук в нерабочие порты 2 в минуту" -j RETURN
# Разрешаем рабочие порты
iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 21,25,53,80,110 -j ACCEPT
iptables -A INPUT -m state --state NEW -p udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -m recent --set -m comment --comment "отбрасываем пакеты всех, кто превысил лимит на количество подключений" /proc/net/ipt_recent/DEFAULT - старые ядра (модуль поддерживает только IPv4) /proc/net/xt_recen/DEFAULT - новые (также IPv6) - если имя списка не задано, если задано тогда вместо дефолтного данное вами имя
Примечания - см. п.1, а также ОБЯЗАТЕЛЬНО УКАЗАТЬ ТОЛЬКО ВНЕШНИЙ ИНТЕРФЕЙС чтобы не попадали тачки из локалки (БУДЕТ ТОРБА ПОСКОЛЬКУ В ЛОКАЛКЕ КУЧА ШИРОКОВЕЩАТЕЛЬНЫХ ЗАПРОСОВ), а только из инета. ТАКЖЕ ДАННЫЕ ПРАВИЛА НУЖНО СТАВИТЬ В КОНЦЕ ЦЕПОЧКИ INPUT ЧТОБЫ ПРИ PING И ДРУГИХ ПОДКЛЮЧЕНИЯХ НЕ ПОПАДАТЬ В ДАННЫЙ ЛИСТ И НЕ БЛОКИРОВАТЬ СЕБЯ САМОГО.
можно установить пакет xtables-addons (содержит наработки проэкта patch-o-matic, получим доступ к модулю PSD (Port Scan Detect)) и 3 строки выше заменить одной
iptables -A INPUT -m psd -j DROP

Безопасность mysql

1). Oтключаем использование команды LOAD DATA LOCAL INFILE. Это предотвратит несанкционированное чтение локальных файлов. Это также подходит против SQL-инъекций в PHP-сценариях.
Листинг 5.2: Отключение LOAD DATA LOCAL INFILE в разделе [mysqld] файла /etc/my.cnf
set-variable=local-infile=0
2). Если вы изменяли пароли в командной строке MySQL, то всегда очищайте ~/.mysql_history и /var/log/mysql/mysql.log, так как они сохраняют список выполненных SQL-команд с открытыми паролями.

Безопасность apache

#Не сообщать информацию о версии сервера
ServerSignature Off
ServerTokens Prod

понедельник, 1 марта 2010 г.

инфа по физике сетевухи (linux)

[root@123 ~]# dmesg | grep -i duplex
bnx2: eth0 NIC Copper Link is Up, 100 Mbps full duplex, receive & transmit flow control ON
e1000e: eth2 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX
e1000e: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None
e1000e: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None

Просмотр установленных драйверов

ethtool -i eth0
driver: bnx2
version: 2.1.11
firmware-version: bc 1.9.6
bus-info: 0000:03:00.0

ethtool -i eth3
driver: e1000e
version: 1.4.4-k
firmware-version: 5.11-2
bus-info: 0000:06:00.1

Просмотр статистики, то чего не должно быть выделено жирным

ethtool -S eth0
NIC statistics:
     rx_bytes: 191166177897
     rx_error_bytes: 0
     tx_bytes: 2285524683461
     tx_error_bytes: 0
     rx_ucast_packets: 1376418747
     rx_mcast_packets: 213363
     rx_bcast_packets: 1205607
     tx_ucast_packets: 1897974881
     tx_mcast_packets: 443
     tx_bcast_packets: 318966
     tx_mac_errors: 0
     tx_carrier_errors: 0
     rx_crc_errors: 0
     rx_align_errors: 0
     tx_single_collisions: 0
     tx_multi_collisions: 0
     tx_deferred: 0
     tx_excess_collisions: 0
     tx_late_collisions: 0
     tx_total_collisions: 0
     rx_fragments: 0
     rx_jabbers: 0
     rx_undersize_packets: 0
     rx_oversize_packets: 0
     rx_64_byte_packets: 564349475
     rx_65_to_127_byte_packets: 582392788
     rx_128_to_255_byte_packets: 170241876
     rx_256_to_511_byte_packets: 12601437
     rx_512_to_1023_byte_packets: 13261490
     rx_1024_to_1522_byte_packets: 34991571
     rx_1523_to_9022_byte_packets: 0
     tx_64_byte_packets: 58522065
     tx_65_to_127_byte_packets: 198585366
     tx_128_to_255_byte_packets: 77001638
     tx_256_to_511_byte_packets: 13877856
     tx_512_to_1023_byte_packets: 9683927
     tx_1024_to_1522_byte_packets: 1540623438
     tx_1523_to_9022_byte_packets: 0
     rx_xon_frames: 460
     rx_xoff_frames: 460
     tx_xon_frames: 0
     tx_xoff_frames: 0
     rx_mac_ctrl_frames: 0
     rx_filtered_packets: 922
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 0

ethtool eth3
Settings for eth3:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000001 (1)
        Link detected: yes

Скорость важна как и duplex режим. Если хотим вырубить avtonegotiation и форсировать режим для сетевухи

mii-tool -F 100baseTx-HD

Прописав

ethtool -s eth0 speed 100 duplex full
в /etc/rc.d/rc.local добьемся того же самого

[root@123 ~]# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
SIOCGMIIREG on eth1 failed: Input/output error
eth1: negotiated 100baseTx-FD, link ok
SIOCGMIIREG on eth2 failed: Input/output error
eth2: negotiated 100baseTx-FD flow-control, link ok

flow-control важен поскольку если его нет то скорость на интерфейсе может быть не ахти

Тестирование (при удаленном доступе лучше не делать)

ethtool -t ethX [offline|online]

offline - вырубает карточку из сетевого обмена

для дебиана тогда прописываем в постапе

sleep 3
ethtool -s eth1 speed 100 duplex full advertise 0x008
ethtool -A eth1 autoneg off rx on tx on


Webalizer + geoip

1. Установка Webalizer со статистикой по странам
Хочется статистику по странам - заодно и установим Webalizer ->
apt-get install webalizer
ln -s /var/www/webalizer /home/sites/plusminus1.com/www/webal
обновляем GeoIP для корректного отображения стран:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
копируем ее в папку /usr/share/GeoIP
раскомментируем в /etc/webalizer 2 строки, связанные с GeoIP
если нужно, настраиваем формат лог apache - "combined" дает например детальную статистику, но плодит километров логов.
Потом пишем скрипт (например webstat):
====
webalizer /home/sites/plusminus1.com/logs/custom_log
======
запускаем наш webstat
по адресу http://plusminus1.com/webal видим нашу статистику
2. Использование GeoIP в Apache
apt-get install libapache2-mod-geoip
/etc/init.d/apache2 restart
скриптик для проверки:
=====

$ip= getenv("REMOTE_ADDR");
$country_code = apache_note("GEOIP_COUNTRY_CODE");
$region = apache_note("GEOIP_REGION");
$country_name = apache_note("GEOIP_COUNTRY_NAME");
$city = apache_note("GEOIP_CITY");
echo "Откуда припёрся: " . $ip . "\n";
echo "Код страны: " . $country_code . "\n";
echo "Регион: " . $region . "\n";
echo "Имя страны: " . $country_name . "\n";
echo "Город: " . $city . "\n";
?>

======
Откуда припёрся: 86.57.220.209
Код страны: BY
Регион:
Имя страны: Belarus
Город:
$region и $city не показывает - для этого нужны другие базы (кроме умолчательной /usr/share/GeoIP/GeoIP.dat)
скачаем базу GeoLiteCity:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
и разархивируем ее в /usr/share/GeoIP.
настройки для apache2 находятся в файле /etc/apache2/mods-available/geoip.conf
напишем там:
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat
после перезагрузки apache2 видим, что город определился, но он - Новолукомль, а не Витебск (база бесплатная, поэтому такие накладочки)
Откуда припёрся: 86.57.220.209
Код страны: BY
Регион: 07 Имя страны: Belarus
Город: Novolukoml
3. PHP и GeoIP
А если уже есть 10000 IP в моей базе юзеров и нужно узнать, откуда они ходили. Для PHP есть extension с аналогичным названием. Для debian-lenny можно установить пакет php5-geoip. Для более ранних версий - компилировать. Но повторимся - используя lite-базу - будем иметь погрешность в определении города.
Можно попользоваться плагином с geoplugin.net - но там вроде-бы есть ограничения на количество запросов - в общем, как тулзину для своих целей, если php-скрипт нужно запускать изредка, то можно, но нет гарантии что будет доступно/ не сделают платным.

источник: http://www.cooldrinking.com/index.php?option=com_content&view=article&id=18:webalizer&catid=5:linux-&Itemid=10

пятница, 26 февраля 2010 г.

wine etersoft problem (виснет при загрузке 1с)

источник http://cgroup.drohobych.com.ua/index.php?option=com_content&task=view&id=113&Itemid=128&limit=1&limitstart=10
При использовании ресурсоёмких win-приложений могут возникать проблемы, связанные с установленными в системе ограничениями.
Лимит на количество открытых файлов

Ещё одна сторона совместной работы: одновременное использование большего количества ресурсов, что может приводить к превышению стандартных лимитов, используемых по умолчанию в различных Unix-системах. Лимиты могут определяться как в момент компиляции ядра, так и настраиваться в любой момент в процессе работы.

В контексте использования WINE наиболее актуален лимит на открытые файлы. Если в приложении не открываются большие файловые базы или невозможно работать более чем 3-м пользователям одновременно, это может означать, что превышен лимит на открытые файлы.

Лимит на открытые файлы двухуровневый: с одной стороны, имеется лимит ядра на общее число всех открытых файлов, с другой стороны, для каждой командной оболочки пользователя также может быть выставлен лимит на число открытых файлов.

Узнать текущее значение лимита ядра можно через команду winediag. Обычно это значение достаточно велико.

Чтобы разово изменить это значение в Linux можно посредством той же proc, для этого нужно просто записать новое значение в файл file-max (потребуются права суперпользователя):

# echo "104854" > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
104854

Пример 19. Изменение лимита на открытые файлы

Чтобы настройка лимитов сохранялась между перезагрузками, необходимо внести нужные значения в файл /etc/sysctl.conf:

# Maximum number of open files permitted
fs.file-max = 104854

Пример 20. Настройка sysctl.conf

Лимит по количеству открытых файлов для командной оболочки пользователя можно контролировать при помощи подсистемы авторизации PAM. Для этого в конфигурационном файле /etc/security/limits.conf выставляются необходимые значения:

* soft nofile 5000
* hard nofile 5000

можно заменить
* - nofile 5000

Пример 21. Указание лимитов в /etc/security/limits.conf

В данном случае указанлимит в 5000 файлов. Чтобы лимит применялся при регистрации пользователей в системе, в файле /etc/pam.d/system-auth должна быть строка:

session required /lib/security/pam_limits.so

Пример 22.

После повторного входа в систему выставленное вами значение лимита должно быть отображено в выводе команды ulimit -n.

GeoIP и ее использование

http://www.find-ip-address.org/ip-country/ - генерит сети (файл .htaccess для apache - вибираешь Allow или Deny) чтобы потом им рубить всякие нехорошие страны откуда рулит спам и т.д.
http://ipinfodb.com - аналог

Ставим:geoip
Переносим тестовый конфиг в рабочий: mv /etc/GeoIP.conf.default /etc/GeoIP.conf (не нужно идентичные)
Теперь пробуем для любого (я делал для своего) определить принадлежность IP адреса стране:
geoiplookup 95.79.205.111
GeoIP Country Edition: RU, Russian Federation
Теперь получим список всех клиентов, подключенных к нашему серверу:
netstat -apnt | awk '{print $5}' | tr ':' ' ' | awk '{print $1}' | sort | uniq > /tmp/ips
А теперь получаем список стран, соответствующих IP адресам наших клиентов:
for ip in `cat /tmp/ips`; do geoiplookup $ip; done | tr ',' ' ' | awk '{print $4}' | sort | uniq -c
лучше $5 - там имя страны полностью !
Теперь, если вы точно уверены, что, например, посетителей с Зимбабве в числе 1500 человек у Вас ну точно нету, то можете написать скрипт, который забанит неугодных ботов :) Кроме этого, есть модуль для iptables, который позволяет отсекать посетителей в зависимости от страны.

Прикручивает скриптом к айпитейблз (не забываем создать цепочку iptables -N drop_nets)
#!/bin/sh
#
# Get lists http://www.find-ip-address.org/ip-country/
# putting prefixes to deny, and output in the CIDR.
# Farewell China!
#
# ps: Do not forget to edit the list in the call zcat.
#
sudo iptables -F drop_nets
for LDENY in $( zcat \
AP_cidr_deny.txt.gz \ # Asia/Pacific region
CN_cidr_deny.txt.gz \ # China
IN_cidr_deny.txt.gz \ # India
KR_cidr_deny.txt.gz \ # Korea
MY_cidr_deny.txt.gz # Malasia
); do
echo $LDENY | grep "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/[0-9]*" >/dev/null&& \
sudo iptables -A drop_nets -s $LDENY -j DROP
done

Если хотим прикрутить как модуль айпитейбл, тогда:

Фильтрация пакетов по географическому признаку с помощью iptables и geoip
Брутфорс-атаки не должны представлять реальной угрозы для хорошонастроенного сервера, но, тем не менее, они отвлекают и засоряютлог-файлы. Существуют различные решения для предотвращения подобныхатак. В этой заметке я расскажу вам о еще одном из них: GeoIP
GeoIP - это модуль для netfilter/iptables, который позволяет фильтровать приходящие пакеты по их географическому местоположению.
Этот модуль может быть использован не только для предотвращениябрутфорса. Например, его можно использовать для так называемой“расистской маршрутизации”, т.е. для ограничения доступа к серверупользователям из определенных стран. Оставим цели использования насовести системных администраторов, а в этой заметке я просто опишуустановку и настройку модуля
Все проверялось на Debian 4.0, но ничего debian-специфичного в процессенет, так что все должно работать и на других дистрибутивах GNU/Linux.Для установки нам понадобятся новый модуля для ядра, библиотеки дляiptables и база соответствия IP-адресов странам. Пересобирать ядро ненужно.
Итак:Подготовка
Первым делом нам понадобятся исходные тексты ядра, которое используется в системе. Для Debian Etch это 2.6.18# apt-get install linux-source-2.6.18Скачанные исходники будут лежать в /usr/src. Распакуем их:# tar xjf /usr/src/linux-source-.tar.bz2 -C /usr/src/Замените на версию вашего ядра. Для распакованного архива понадобится около 300 Мб свободного места.Теперь нам нужны исходные тексты iptables. Нет необходимостипересобирать сам iptables, но исходники понадобятся для сборки модуля.Для работы с ними удобно использовать временную директорию# mkdir ~/geoip
# cd ~/geoip/
# apt-get source iptablesВнимание, для использования apt-get source в вашей системе должен быть установлен пакет dpkg-devТеперь не хватает только самого geoip# wget http://people.netfilter.org/peejix/patchlets/geoip.tar.gzДля дальнейшей работы нам понадобится patch-o-matic-ng, его можно найти на Если у вас старое ядро, то, возможно, вам придется выбрать более старуюверсию, но для нашей заметки актуален последний снапшот:# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2Распакуем полученный архив:# tar xjf patch-o-matic-ng-20070414.tar.bz2И распакуем исходники geoip в поддиректорию patchlets/ пакета patch-o-matic-ng# tar xzf geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets/Наложение патчей
Применим необходимые патчи к ядру и iptables# cd patch-o-matic-ng-20070407/
# KERNEL_DIR=/usr/src/linux-source-/ IPTABLES_DIR=~/geoip/iptables-/iptables/ ./runme geoipНе забудьте заменить на используемые в вашей системе версии ядра и iptables.
Если все прошло успешно, то patch-o-matic-ng предоставит информацию о полученном патче и предложит применить его. Ответьте y.Сборка и установка модуля для ядра
Для сборки нам понадобится пакет build-essential. Если вы работаете нес Debian, то установите средства для разработки: gcc, make и т.д.# apt-get install build-essentialТак как нам потребуется немного переконфигурировать ядро, мы возьмем за основу уже имеющуюся конфигурацию:# cd /usr/src/linux-source-/
# make oldconfigНа вопрос:geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)Ответьте m, чтобы собрать geoip как модуль.Выполните подготовку для сборки модулей:# make modules_prepareЗатем соберите модули.. К сожалению, я не знаю как собрать толькоодин необходимый модуль, так что собираем все модули netfilter, покакто-нибудь не предложит лучший способ :)# make -C $(pwd) M=net/ipv4/netfilter/ modulesЕсли все нормально, то файл ipt_geoip.ko должен появиться в net/ipv4/netfilter/. Скопируем его к остальным модулям системы# cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/И активируем его:# depmod
# modprobe ipt_geoip
# echo “ipt_geoip” >> /etc/modulesСборка и установка библиотек iptables
Соберем библиотеку:# cd ~/geoip/iptables-/iptables/
make KERNEL_DIR=/usr/src/linux-source-/ extensions/libipt_geoip.soНе забывайте заменять !!!Скопируем полученный файл к другим библиотекам iptablescp extensions/libipt_geoip.so /lib/iptables/Создание файла привязок IP-адресов к странам
Мы будем использовать свободно распространяемую базу с MaxMind. Она имеет заявленную точность в 98% и обновляется раз в месяц. Если длявас этого недостаточно, можно купить более точную платную версию тамже. Скачайте и распакуйте базу:# cd ~/geoip/
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# unzip GeoIPCountryCSV.zipВы можете открыть полученный файл в любом редакторе и увидите, чтоэто просто список, со значениями, разделенными запятыми. Поиск в такомфайле будет занимать много времени, поэтому мы преобразуем его вбинарный формат, используя утилиту csv2bin, также предоставленнуюавтором geoip.# wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
# tar xzf csv2bin-20041103.tar.gz
# cd csv2bin/
# make
# ./csv2bin ../GeoIPCountryWhois.csvОна создаст два файла geoipdb.bin и geoipdb.idx, которые необходимо положить в /var/geoip# mkdir /var/geoip
# mv geoipdb.* /var/geoip/Теперь вы можете выполнять фильтрацию по географическому признаку :)# # Блокировка доступа к SSH всем, кроме Афганистана
# iptables -A INPUT -p tcp –dport 22 -m geoip ! –src-cc AF -j REJECT
# # Запрет на пинг хостов, расположенных во Франции, Италии и Испании
# iptables -A OUTPUT -p icmp -m geoip –dst-cc FR,IT,ES -j REJECT
# # Помощь
# iptables -m geoip –help

источник: http://eaglebearsecurity.com/news/filtracija_paketov_po_geograficheskomu_priznaku_s_pomoshhju_iptables_i_geoip/2009-09-27-489

вторник, 26 января 2010 г.

cisco debug and packet logging

Для переключения логирования на виртуальный терминал telnet:
    terminal monitor
Для включения сообщений отладки:
    undebug all
    conf t
    logging monitor debugging
    logging on
    exit
Теперь можно включить вывод отладочных сообщений какой либой функции роутера, к примеру isdn:
    debug isdn events   
    debug ip http url
    debug frame-relay packet interface Serial0/1:1.1 dlci 99 (поинформативней)
Как все вернуть обратно?
    undebug all
    terminal no monitor
    conf t
    no logging monitor
    exit

Важно:
1). no logging console - лучше использовать когда дебуг идет не в консоль
2). Включение msec временных штампов:
           router(config)#service timestamps debug datetime msec
                router(config)#service timestamps log datetime msec
Добавляется временные штампы в debugs в формате MMM DD HH:MM:SS согласно системных часов, если они не
установлены, то (*) будут.
3). Ограничение дебуга ip пакетов создать access-list на debug. Только пакеты попавшие под критерии access-list будут дебужиться. Его не нужно вешать ни на какой интерфейс, но применить на операции дебуга.
Перед debugging ip packet, не забываем за режим роутера по умолчанию CEF (или fast-switching), это означает что пакеты не попадают в процессор и дебуг не покажет ничего. Надо cef вирубить - no ip cef (no ip route-cache (for unicast packets) or no ip mroute-cache (for multicast packets)). Будет применено на интерфейсах где трафик предположительно проходить (flow). Проверте show ip route командой.
Отключение cef на загруженном роутере приведет к почальной ситуации. Не используйте это на роутерах с MPLS, посольку MPLS не работает без CEF.

Пример
access-list 105 permit icmp host 10.10.10.2 host 13.1.1.1
access-list 105 permit icmp host 13.1.1.1 host 10.10.10.2
router_122(config)#interface virtual-template 1
router_122(config-if)#no ip route-cache
router_122(config-if)#end
debug ip packet detail 105
http://www.cisco.com/en/US/tech/tk801/tk379/technologies_tech_note09186a008017874c.shtml
Пример дебуга тригерного
debug serial interface
traxbol#debug interface serial 3
    Condition 1 set
Используйте данну команду для проверки условий дебуга
    traxbol#show debug condition
    Condition 1: interface Se3 (1 flags triggered)
    Flags: Se3
    traxbol#
undebug interface - выключение (лучше undebug all)
http://www.cisco.com/en/US/docs/ios/12_3/debug/command/reference/dbg_02g.html - еще примеры


Включение/выключение режима монитора:
terminal monitor / terminal no monitor
Выключение режима дебуга
no debug all

Одна из опций использовать log или log-input параметры в конце ACL. Основное отличие между ними, что log-input показывает вх. интерфейс принятых пакетов и MAC-адрес источника. (оба этих параметра отключают CEF switching, который серйозно воздествует на производительность. Потому, используйте функцию логирования для to идентифицировать атаку включая жертву и атакующего а потом уберите log или log-input параметры с ACL).
Пример:
Router(config)# access-list 100 deny icmp any any echo reply log-input
Лучше вырубить логированние в консоль и включить логирование в буфер (поскольку консольный интерфейс будет в шоке от количества событий)
Особенности:
1). включение логирования не стоит делать на роутерах с загрузкой процессора >80% особенно при ACL на высокоскоростных интерфейсах.
2). если команда show access-list выводит совпадения в списках ACl и при добавлении log параметра в ACL ничего нет, нужно попробовать очистить route cache (clear arp-cache) для форсирования пакетов process-switched вместо cef (для уменьшения проблем при перестройке кеша на сильно загруженных роутерах используйте девайсы с поддержкой cef)
3). ACL logging не показывает каждый пакет, что подпадает под ACL, по крайнет мере будет виден первый в сессии и через определенные периоды. Cisco IOS испльзует rate limiting для предотвращения перегрузки логированием процессора. То есть вы не будете видеть пакеты подпадающие под ACL при включенном логировании.
4). когда много рефлекторов (атакующих) ACL устанавливается на одного из них и логинг включается для него, поскольку очень много информации.
Будь конкретен в своих ACL листах когда анализируешь DoS атак. Используй log-input для получения информации об интерфейсе с которого идет атака. Если есть несколько интерфейсов эта информация будет включать MAC адреса next-hop маршрутизатора; используй show ip arp MAC_address команду для узнавания IP адреса маршрутизатора.

Поскольку ACL очень грузят роутер можно задействовать механизм netflow
1). включаем его на интерфейсе, где планируется атака
Router(config)# interface type [slot_#/]port_#
Router(config-if)# ip route-cache flow
или при поддержке роутером distributed switching (7500 with RSP and VIP модулями)
Router(config-if)# ip route-cache distributed
2). експорт данных netflow
Router(config)# ip flow-export IP_address UDP_port_# [version 5]
3). проверка
Router# show ip cache [prefix mask] [type number] [verbose] flow
обратите внимание номера портор в 16-тиричной системе
rcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts (4)
Et1 200.1.1.1 Et0 192.1.1.1 01 0000 0800 5
очиста статистики - clear ip flow stats (всегда нужно делать перед исследованием)

источник http://www.informit.com/articles/article.aspx?p=345618

четверг, 21 января 2010 г.

saslauth CENTOS (REDHAT) проблемы авторизации

Добавить в /etc/sysconfig/saslauthd параметр
FLAGS="-r"
Без него saslauthd будет передавать MySQL параметры так
Query SELECT password FROM mailbox WHERE username = 'admin' (то есть не будет передавать "@домен")
Поскольку в базе сохранен полный адресс то нужен ключ -r и тогда будет передавать полный електронный адресс
Query SELECT password FROM mailbox WHERE username = 'admin@example.org'