Autofaucets.ru - автоматический сборщик криптовалюты с кранов!

ЗОМБИ ПРОЦЕССЫ В ЛИНУКС. Что это значит, как с этим бороться и стоит ли.

Posted by Cooper Tue, 24 Feb 2009 20:09:00 GMT

Наверняка хоть раз многие задавали себе вопрос, глядя на выдачу команды ps ax, что это загадочные zombie процессы. Их пытаешься удалить (буквально убить) командой kill, но они остаются целыми и невредимыми.

10310 ?        Z      0:00 [php <defunct>]
10316 ?        Z      0:00 [php <defunct>]
10352 ?        Z      0:00 [php <defunct>]

На самом деле зомби уже уничтоженные процессы. А, как известно, нельзя убить дважды :). Ранее для них уже была выполнена команда kill, но, по разным причинам, она не смогла завершиться завершением процесса. Он остается формально существующим, но ресурсы, отведенные для него, на самом деле, освобождаются. Причина существования zombie процессов заключается в том, что родительский процесс может запросить статус завершения или затребовать статистику использования ресурсов порожденного зомби. В случае, если процесс-родитель не нуждается больше в зомби, он сигнализирует об этом операционной системе с помощью вызова системной функции wait(). В нормальной ситуации, когда процесс завершается, все его child processes становятся наследниками init, PID которого равен 1. Init всегда ждёт завершения child processes, для того, чтобы избежать порождения зомби. Если всё же в вашей системе завелись зомби, это означает, что они не обслуживают более свои родительские процессы (определить, кстати, которые можно командой ps -lax, колонка PPID):

[user1@www user1]$ ps -lax
F   UID   PID  PPID PRI  NI   VSZ  RSS WCHAN  STAT TTY        TIME COMMAND
0     0 10302     1  15   0 29420 8132 -      S    ?          0:06 /usr/local/bin/ruby /var/www/site/public/dispatch.fcgi
0     0 10310 10302  15   0     0    0 -      Z    ?          0:00 [php <defunct>]
0     0 10316 10301  15   0     0    0 -      Z    ?          0:00 [php <defunct>]

В этом случае у вас есть три варианта: (1) исправить процесс родитель; (2) убить его; (3) или продолжать жить с этим. Надо заметить, что жить с этим не так уж и сложно, поскольку зомби - это всего лишь дополнительная строчка в выдаче команды ps .

Posted in  | Tags , , , , , ,  | 3 comments

Изменение часового пояса (timezone) в ОС Linux через терминальный режим.

Posted by Cooper Tue, 17 Feb 2009 12:32:00 GMT

Многие современные Linux дистрибутивы имеют в своем составе программы с довольно дружественным интерфейсом для установки часового пояса. Часто эта функция доступна через программное меню или простым нажатием правой кнопки мыши на иконке с изображением часов в известных графических средах, таких как KDE или GNOME. Но зачастую, приходится работать в режиме терминала, где нет доступа к удобной функциональности графического интерфейса. В этом случае часовой пояс устанавливается с помощью команд Linux и весь процесс состоит из нескольких простых шагов:

1. Заходим в систему как root, проверяем текущий часовой пояс, установленный на машине. Для этого выполняем команду date. На экране появится что-то типа:

Tue Feb 17 23:31:00 CST 2009
В данном случае CST и есть наш текущий часовой пояс.

2. Зайдя в директорию /usr/share/zoneinfo мы увидим список регионов, из которых можно выбрать наиболее подходящий для нас. Допустим, мы хотим переключиться на часовой пояс Москвы. Для этого нам нужно использовать файл Moscow, находящийся в поддиректории Europe.

3. На всякий случай делаем резервную копию файла с текущими настройками:

mv /etc/localtime  /etc/localtime-old

4. Создаем символическую ссылку на нужный нам timezone:

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

5. Прописываем значение параметра ZONE в файле /etc/sysconfig/clock В нашем случае оно должно быть “Europe/Moscow”.

6. Устанавливаем аппаратные часы, выполнив команду:

/sbin/hwclock --systohc

7. В принципе, на этом все необходимые изменения можно считать законченными. Правда вместе с изменением часового пояса у нас «съехало» и текущее время:

Wed Feb 18 08:32:05 MSK 2009

Установим правильные значения для даты и времени, используя команду date:
date -s "02/17/2009 23:32:00"

Posted in  | Tags , ,  | 9 comments

НАСТРОЙКА IPTABLES. Защита от паразитного трафика

Posted by Cooper Tue, 28 Nov 2006 16:14:00 GMT

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

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

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

  1. Блокировать “плохие” хосты на уровне приложения;

  2. Использовать стандартные средства вэб-сервера Apache или lighttpd;

  3. Настроить правила утилиты iptables, которая присутствует во всех LINUX дистрибутивах, базирующихся на ядрах 2.4.x или 2.6.x

    Первые два способа были исключены из рассмотрения, поскольку здесь существует определённая привязка к приложению или к конкретному web-серверу. И если, например, Apache будет заменён на ngnix, придется заново прописывать блокирующие правила. К тому же, паразитные пакеты будут доходить до вэб сервера и приложения, дополнительно загружая их.

    Используя утилиту iptables достаточно просто можно настроить набор правил для блокирования, а также получить средство для накопления и просмотра статистики по созданным правилам.

Настройка правил iptables

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

Итак, у нас есть конкретный хост (crawler.bloglines.com, IP=65.214.44.29) и целая подсеть (84.110.0.0), которые надо забанить. Правила выглядят так:

#Crawler bloglines 
/sbin/iptables -A INPUT -s 65.214.44.29 -p tcp -m multiport --dports 80 -j DROP

#bzq-*.red.bezeqint.net
/sbin/iptables -A INPUT -s 84.110.0.0/255.255.0.0 -p tcp -m multiport --dports 80 -j DROP

Для других хостов или подсетей в правилах iptables, меняется только IP источника (параметр -s).

Просмотр статистики iptables

Запускаем iptables с параметрами -L и -v для просмотра статистики. Опция -L определяет вывод статистики для цепочки (chain). Если конкретная цепочка не задана, то для всех.

Опция -v задает расширенный вывод, включающий в себя счетчики пакетов и байт.

Очень часто добавляется параметр -n, который говорит команде iptables о том, что не надо обращаться к DNS для разрешения IP адресов и вывода их в виде доменных имен. Это значительно уменьшает время на выдачу результатов и позволяет уменьшить нагрузку на сервер.

Для дополнительного удобства список правил может быть пронумерован. Для этого используется опция –line-numbers.

/sbin/iptables -L -v --line-numbers

Сохранение правил и статистики

Если перезагрузить компьютер или удалить iptables kernel modules вся информация о собранной статистике и добавленных правилах будет утеряна. Чтобы предотвратить потерю данных необходимо делать бэкап после каждого изменения в списке правил. Для этого служить утилита iptables-save. Например:

iptables-save -c > /root/iptables-backup.txt

Восстановить данные из бэкапа можно используя команду iptables-restore. Обычно это делается после перезагрузки в одном из скриптов инициализации, например в /etc/rc.d/rc.local для Red Hat Linux.

iptables-restore -c < /root/iptables-backup.txt


Библиография:

Posted in  | Tags , , , , , ,  | 4 comments

HowTo Install typo on Red Hat EL3

Posted by Cooper Tue, 04 Jul 2006 10:52:00 GMT

Here is a typo installation guide based on the folowing: http://www.typosphere.org/trac/wiki/TypoOnFreebsd

1. Install Ruby 1.8.4

Download and install ruby from the stable release 1.8.4 http://www.ruby-lang.org/en/20020102.html

2. Install gems

$cd
$wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz
$tar xvzf rubygems-0.8.11.tgz
$cd rubygems-0.8.11
$ruby setup.rb

3. Install Rails

$gem update
$gem install rails --include-dependencies 

4. Download and install FastCGI Development Kit

$ wget fastcgi.com/dist/fcgi-2.4.0.tar.gz | tar xfz -
$ copy fcgi-2.4.0 /usr/local/src/fcgi-2.4.0
$ cd /usr/local/src/fcgi-2.4.0
$ ./configure
$ make
$ sudo make install

5. Install FCGI bindings for Ruby

$ sudo gem install fcgi

6. Download and Install typo

# /usr/sbin/adduser typo_user
# passwd typo_user 
$ svn checkout svn://leetsoft.com/typo/trunk typo
$ cp -R typo /home/typo_user/websites/www.mysite.com

7. Configuring Typo

Replace

/usr/bin/env ruby 

with

/usr/local/bin/ruby 

in

public/dispatch.fcgi
and
public/dispatch.rb
.

8. Database

8.1 Install Ruby/MySQL

(http://www.tmtm.org/en/mysql/ruby/)

8.2 Create database in MySQL

mysql -p
create database typo_user_typo CHARACTER SET utf8;
grant all on typo_user_typo.* to 'typo_user'@'localhost' \
identified by 'typo_password';
flush privileges;
use typo_user_typo;
source /home/typo_user/websites/www.mysite.com/db/schema.mysql.sql;

Edit config/database.yml:

login: &login
  adapter: mysql
  host: localhost
  username: typo_user
  password: typo_password
  socket: /var/lib/mysql/mysql.sock
  encoding: utf8

development:
  database: typo_user_typo
  <<: *login

test:
  database: typo_user_typo
  <<: *login

production:
  database: typo_user_typo
  <<: *login

8.3 Update the database-schema

$rake migrate

9. Lighttpd

Download from http://www.lighttpd.net/download/lighttpd-1.4.11.tar.gz Extract to /usr/local/src/lighttpd-1.4.11

$ cd /usr/local/src/lighttpd-1.4.11
$ ./configure
$ make
$ su -
# make install
# exit

Copy config-file from /home/typo_user/websites/www.mysite.com/config to /etc/lighttpd/lighttpd.conf and then edit:

server.pid-file             = "/var/run/typo-typo_user.pid"
server.port                 = 3000
server.bind                 = "127.0.0.1"
#server.event-handler        = "freebsd-kqueue"
server.name                 = "www.mysite.com"

server.modules              = ( "mod_rewrite", "mod_fastcgi", "mod_accesslog" )
server.indexfiles           = ( "dispatch.fcgi" )
server.document-root        = "/home/typo_user/websites/www.mysite.com/public"
server.error-handler-404    = "/dispatch.fcgi"
server.errorlog             = "/home/typo_user/websites/www.mysite.com/log/error.log"
accesslog.filename          = "/home/typo_user/websites/www.mysite.com/log/access.log"

url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )

#### fastcgi module
fastcgi.server =  (
   ".fcgi" => (
        "typo" => (
               "min-procs" => 4,
               "max-procs" => 4,
               "socket" => "/home/typo_user/websites/www.mysite.com/tmp/typo-typo_user.socket",
               "bin-path" => "/home/typo_user/websites/www.mysite.com/public/dispatch.fcgi",
               "bin-environment" => ("RAILS_ENV" => "production" ),
               "idle-timeout" => 120
                )
           )

Copy /usr/local/src/lighttpd-1.4.11/doc/rc.lighttpd.redhat to /etc/rc.d/init.d/lighttpd. Replace the line

lighttpd=”/usr/sbin/lighttpd”

with

lighttpd=”/usr/local/sbin/lighttpd”

Start lighttpd server /etc/rc.d/init.d/lighttpd start

Posted in , ,  | Tags , , ,