пятница, 31 января 2014 г.

Узнать имя скрипта по PID и другие полезные мелочи

Узнать имя скрипта по PID
cat /proc/pid/cmdline 
Определить PID процесса по имени скрипта/запущеного файла
#!/bin/sh

STR="perl-fcgi-pm"

PID=`ps aux | grep $STR | grep -v grep | awk '{print $2}'` 

воскресенье, 26 января 2014 г.

Почему PHP скрипты не работают в фоновом режиме консоли

Причиной тому является определенное поведение PHP-интерпретатора когда он теряет связь с запустившим его клиентом, а в данном случае — с вводом командной строки. Если изучить PHP-документацию по работе с соединениями, то оттуда можно узнать что таким поведением можно управлять при помощи директивы конфигурации или же функции вызываемой непосредственно в самом PHP-скрипте — ignore_user_abort. Однако эта функция не всегда помогает.

Итак, решение очень простое — нужно дать PHP-скрипту то, что ему нужно — поток ввода, который он будет считать клиентом и не будет завершать свою работу:
$ php -q script.php < /dev/null > script.log &
Либо воспользоваться утилитой nohup
nohup php -q script.php > script.log 2>&1 &
Еще один альтернативный способ из wikipedia с использованием программы screen:
 $ screen -A -m -d -S somename ./somescript.sh & 

http://www.php.net/manual/ru/features.connection-handling.php

суббота, 25 января 2014 г.

grep

Сбор ip адресов:
egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' all.txt
Сбор ссылок
wget -q http://example.com -O - | \
    tr "\t\r\n'" '   "' | \
    grep -i -o ']\+href[ ]*=[ \t]*"\(ht\|f\)tps\?:[^"]\+"' | \
    sed -e 's/^.*"\([^"]\+\)".*$/\1/g'
Второй вариант:
wget --user-agent="Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14912/812; U; ru) Presto/2.4.15" -T 10 --spider -H --force-html -r -l5 http://start_url.ru 2>&1 | grep '^--' | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' | egrep "^http://[a-zA-Z0-9\._\-]+/$" > urls.txt &
Сбор доменов
wget http://www.who.is/whois_index/index.php  -o /dev/null -O - | grep -oh "index\.[0-9a-zA-Z\-]*\.php" | sed "s/^/http:\/\/www.who.is\/whois_index\//p" | wget -i - -o /dev/null  --user-agent="Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14912/812; U; ru) Presto/2.4.15" -O -  | grep -oh "[a-z0-9\-]*\/domain_list\.[a-z0-9\-]*\.[0-9]*\.php" | sed "s/^/http:\/\/www.who.is\/whois_index\//p"  |wget -i - -o /dev/null  --user-agent="Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14912/812; U; ru) Presto/2.4.15" -O -  | grep -oh "\/whois\-com\/ip\-address\/[a-z0-z\-]*\.[a-z]*" | grep -oh "[a-z0-z\-]*\.[a-z]*" | sort -u

пятница, 24 января 2014 г.

вторник, 14 января 2014 г.

PHP 5.3 cookie and request_order

The default php.ini on your system as of in PHP 5.3.0 may exclude cookies from $_REQUEST. The request_order ini directive specifies what goes in the $_REQUEST array; if that does not exist, then the variables_order directive does. Your distribution's php.ini may exclude cookies by default, so beware.

пятница, 10 января 2014 г.

Protect your server from butforce with Fail2ban

 Простая в использовании утилита, позволяющая блокировать попытки брутфорса.

yum install fail2ban

#Создадим jail.local, который будет переопределять правила jail.conf
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Основной файл настроек: jail.conf
ignoreip - наш ip, не фильтруется.
bantime - длительность бана.
Maxretry - количество попыток авторизации, после которого ip получает бан.
Findtime - время в секундах, в течении которого фиксируется auth error для каждого ip. Т.е. если Findtime=60,Maxretry=3, то после трех попыток в течении 60 сек ip отправляется в бан.
usedns = yes - если вместо ip в логе имя хоста, fail2ban будет разрешать хост в ip.
[ssh-iptables]


enabled  = true

filter   = sshd

action   = iptables[name=SSH, port=ssh, protocol=tcp]

           sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]

logpath  = /var/log/secure

maxretry = 5
filter : This section by default set to sshd and refers the config file (/etc/fail2ban/filter.d/sshd.conf) containing the rules that fail2ban uses to find matches.
action : This action tells the fail2ban to ban a matching IP address once a filter matches in the /etc/fail2ban/action.d/iptables.conf file. If your server have mail setup, you can add email address, where fail2ban sends you a email alerts whenever it bans an IP address. The sender section refers to file /etc/fail2ban/action.d/sendmail-whois.conf file.
С помощью fail2ban можно также блокировать DNS DDoS, для этого необходимо задействовать правила

[named-refused-udp] и [named-refused-tcp] 

Мы можем создавать сои собственные правила с регулярными выражениями. Для их тестирования можно воспользоваться командой:
fail2ban-regex /var/log/auth.log "Failed [-/\w]+ for .* from "
Тестируемые правила необходимо заключать в двойные кавычки иначе получим ошибку. Например, если мы хотим заблокировать тех, кто пытается попасть в директории phpmyadmin|mail|forum|login|cgi-bin|wp-login, то правило будет выглядеть так:
^<host> - - \[.*\] \"(GET|POST) /(phpmyadmin|mail|forum|login|cgi-bin|wp-login|mysql).* HTTP\/.*$
Важная особенность - все правила регистрозависимые. Чтобы сделать их caseisensitive нужно добавить (?i) в начало каждого правила.
^(?i)<host> - - \[.*\] \"(GET|POST) /(phpmyadmin|mail|forum|login|cgi-bin|wp-login).* HTTP\/.*$
Можно добавлять сразу несколько правил в один фильтр, добавляя каждое с новой строки.

Чтобы проверить добавляются ли правила в iptables, запустите
iptables -L
Перезагрузк iptables удалит забаненyые ip.
Все остальное довольно интуитивно понятно.

http://www.fail2ban.org/wiki/index.php/MANUAL_0_8

среда, 8 января 2014 г.

Proftpd CentOS user can only login with a /bin/bash shell

Any shell you want to use with proftpd should be listed in the /etc/shells file (http://www.proftpd.org/docs/directives/linked/config_ref_RequireValidShell.html)

 You should add /bin/false to /etc/shells

or set RequireValidShell off in the proftpd config