Анализ трафика при помощи tcpdump

В категорії Статьї от 4 Вересня, 2011. Автор admin

Введение

Зачем нужно анализировать трафик? Знание того, как происходит взаимодействие между компьютерами позволяет более быстро обнаружить и решить возможные проблемы, возникшие в работе сети. Приведу простейший пример: один из компьютеров локальной сети перестает отвечать на запросы. Что могло произойти? Были ли он взломан или это ошибки системного администратора? Если в сети присутствует хорошая система управления логами, то можно много информации узнать из этих файлов. Но что если в них нет ничего подозрительного или, что еще хуже, они были скомпрометированы злоумышленником? Тогда на помощь приходит tcpdump. Эта программа, как скрытая камера, которая показывает, что происходит в данный момент в сети. Благодаря ей вы можете создать специальные фильтры, которые будут отображать только нужный вам трафик.

Конечно tcpdump не единственная программа, умеющая анализировать трафик, существует множество подобных программ, например ethereal. Это очень хорошее средство, быстро развивающееся и, несмотря на казалось бы раннюю версию, (последняя на момент написании статьи версия была 0.10.10) является очень надежной и глубоко продуманной программой. Один только список поддерживаемых протоколов перевалил за 500 (последняя версия, насколько я знаю поддерживает 673 протокола www.ethereal.com/introduction.html )! Почему я использовал именно tcpdump, а не эту программу? Во-первых я привык работать с tcpdump, для использования же ethereal необходимо наличие X-сервера, а я больше люблю работать в консоли. Во-вторых, отчеты ethereal трудно отобразить в печатном виде. И все же я планирую подробно рассказать об этой замечательной программе в одной из своих следующих статей.

Создать подобный цикл статей меня заставило почти полное отсутствие в интернете подробного и понятного описания программы tcpdump, а также того, что с помощью нее можно сделать. Понятно, что тема анализа протоколов TCP/IP очень обширна, описать все возможные виды трафика невозможно, да и не нужно, поэтому я постараюсь описать только самое интересное, и, на мой взгляд, необходимое.
Більше »

Теги:

Тестирование хостинга

В категорії Статьї от 3 Вересня, 2011. Автор admin

Переменные среды
Для начала тестирования посмотрим переменные среды (окружения) своего хостинга и список доступных нам программ. Для этого в папке cgi-bin создадим свою папку с именем для примера, test и запаролируем ее, чтобы была только для себя любимого.
Поместим туда небольшой скрипт, установим ему права 755 и запустим его, обратившись к нему из браузера по адресу, например – http://vash_domen/cgi-bin/test/peremennye-sredy.pl
Мы увидим массу всяких сведений, по большей части не очень интересных, в частности о параметрах своего браузера.
Некоторые из переменных действительно нужны, например PATH, где находится список папок исполняемых программ, SCRIPT_FILENAME, содержит полный путь к данному скрипту и т.д. Иногда бывает полезно при отладке своих скриптов взлянуть на переменные среды, поэтому есть смысл скопировать их и сохранить в каком-нибудь текстовом файле на домашнем компьютере.
Взгляните на пример переменных среды хостинга:
пример переменных среды на моем хостинге
В скриптах все «вспомогательные» строки будут по возможности записаны максимально кратко и (или) не будут приведены, но будет подразумеваться, что они есть.
Скрипт, выводящий переменные среды:

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
my $t=’Переменные среды’;
print “Content-type: text/html\n\n<html><head><title>$t</title></head><body><h2>$t</h2><hr><pre>”;
# будет подразумеваться, что строки выше имеются
print “$_\t$ENV{$_}\n” foreach (sort(keys %ENV)); # сам скрипт
# будет подразумеваться, что такая или подобная нижняя строчка имеется
print “<hr></pre></body></html>”;

В скрипте просто перебираются все имеющиеся ключи хеша %ENV и выводятся на дисплей и ключи и их значения.
Переменные среды можно изменять (удалять, дополнять). Так например, для большей безопасности рекомендуется удалять потенциально опасные ключи (если они есть) в начале каждого своего скрипта:
#!/usr/bin/perl
delete @ENV{qw(IFC CDPATH ENV BASH_ENV)};

и если Вы не используете каких-то программ, кроме скажем Perl, можно также удалить и переменную PATH:
#!/usr/bin/perl
delete $ENV{‘PATH’};
# или добавить к ней значение, например:
$ENV{‘PATH’} .=’:/usr/sbin’;
# или установить новое значение:
$ENV{‘PATH’} =’/usr/bin’;

Список ПО
Получим список установленных и доступных нам программ (команд) на хостинге. Все эти программы располагаются в папках, которые перечислены в переменной PATH. На самом деле программ и команд гораздо больше, но именно в этих папках ОС ищет команды для запуска и именно их Вам предоставляет хостинг.
Какая-то часть установленных программ наверняка приведена на сайте хостера, но указать их все просто нереально.
Маленький скрипт выведет на дисплей содержимое каждой папки, указанной в PATH:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
my $t=’Список установленных программ’;
print “Content-type: text/html\n\n<html><head><title>$t</title></head><body><h2>$t</h2><hr><pre>”;
my @d = split ‘:’, $ENV{‘PATH’};
# при желании Вы можете добавить и другие папки для просмотра содержимого:
push @d, ‘/usr/sbin’;
# или сами укажите другие папки @d = qw(/home/papka /public_html); и т.д.
use File::Find;
find sub { print $File::Find::name, -d && ‘/’, “\n”; }, @d;
print “<hr></pre></body></html>”;

Программ в этих папках довольно много, лично у меня на хостинге свыше 1200 (без содержимого папки /usr/sbin). Большая часть навряд ли пригодится, но все-таки неплохо сохранить этот список у себя на домашнем компьютере.
Привожу маленькие фрагменты списков программ:
Фрагмент списка программ в папке /bin     Фрагмент списка программ в папке /usr/bin     Фрагмент списка программ в папке /usr/local/bin
В большинстве случаев можно узнать, что делает та или иная программа, запустив ее с такими ключами –help -h -?, а можно просто “сказать” man команда.
Некоторые из этих программ могут пригодится для получения более полной информации о системе, поэтому имеет смысл присмотреться к программам, содержащим в названии stat, info, conf и т.п. А запустить программу (команду) можно например из скрипта “командной строки”.

Список модулей Perl
Можно получить и список модулей Perl, установленных на хостинге, хотя такой список как правило приведен на сайте хостера. Для этого достаточно вместо переменной массива @d указать встроенный массив @INC:
find sub { print $File::Find::name, -d && ‘/’, “\n”; }, @INC;

Заметим, что полученный таким образом список модулей содержит не только список “главных” или “основных” модулей, но и файлы документации к модулям, файлы примеров использования модулей и файлы для их тестирования. Бывает любопытно взглянуть.
А посмотреть содержимое любого файла можно простой командой: cat (путь)файл, например используя скрипт “своего шелла”.
Конфигурация системы и Perl на хостинге
На момент установки Perl в систему собирается масса данных о ее (и Perl) конфигурации в модуле Config.pm, которая доступна для нас через простой скрипт:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use Config qw(config_sh myconfig);
my $t=’Конфигурация системы и Perl’;
print “Content-type: text/html\n\n<html><head><title>$t</title></head><body><h2>$t</h2><hr>”;
print ‘Конфигурация системы:<br><pre>’, config_sh(), ‘</pre>’;
print ‘<hr>Конфигурация Perl:<br><pre>’, myconfig(), ‘</pre>’;
print “<hr></body></html>”;

Всего доступно около 900 различных параметров системы, таких как местоположение различных программ, модулей, указание их версий, разрядности некоторых переменных, флаги, описание сигналов прерываний, их коды и прочее.
И что немаловажно – каждое возможное значение описано в документации к модулю Config, правда на «простом английском языке». Заметим, что далеко не каждый параметр установлен, многие имеют значение undef или define.

Теги: , ,