Первая помощь при проблемах с сайтом Печать
Добавил(а) microsin   

Здесь разместил памятку по командам Linux/Debian, которые могут понадобиться при диагностике и устранении проблем с сайтом, и полезные ссылки. Команды следует вводить под суперпользователем (root) или от его имени через sudo.

[Логи Apache2]

Логи лежат в следующих папках:

/var/www/httpd-logs/  (старый вариант установки)

либо:

/var/www/имя_пользователя/data/logs/

Здесь имя имя_пользователя, на котором работает apache2/nginx.

Имя файла для доступа обычно состоит из окончания backend.access.log и backend.access.log.1, и содержит имя домена, например:

/var/www/имя_пользователя/data/logs/домен.ru-backend.access.log
/var/www/имя_пользователя/data/logs/домен.ru-backend.access.log.1

[tail]

Просмотр последних 20 строк лога:

tail -20 имя_файла_лога

То же самое, только отфильтровать по IP:

tail -20 /var/www/httpd-logs/мойдомен.ru.access.log | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"

"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"

[Просмотр отфильтрованного лога]

Создание сортированного списка из лога [количество подключений] [IP]:

cat имя_файла_лога | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sort | uniq -c | sort -n >/var/tmp/sorted-list01.txt

Создание сортированного списка по количеству подключений:

cat имя_файла_лога | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sort | uniq -c | sort -n >/var/tmp/sorted-list02.txt

Слежение за логом:

tail -f имя_файла_лога

[Остановка, запуск сервера]

Apache, старый вариант:

/etc/init.d/apache2 stop|start

Apache2, новый вариант:

service apache2 start|stop|restart

MySQL, старый вариант:

/etc/init.d/mysql stop|start

MySQL, новый вариант:

service mysqld start|stop|restart

Сначала надо остановить Apache, потом сервер mySQL. Запускать надо в обратном порядке.

Автозапуск. Автозапуск сервисов в ОС Debian 6 реализован путём создания мягких ссылок (symlink) в директории /etc/rc3.d/ на файлы сервисов из директории /etc/init.d/. Если необходимо отключить запуск apache2 и mysql, то необходимо воспользоваться утилитой update-rc.d.

[Ограничение доступа через iptables]

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

Новые правила необходимо добавлять в цепочку перед запрещающим правилом. Достигается следующей последовательностью действий: удаление запрещающего правила, добавление нового правила, добавление запрещающего правила в конец [15].

iptables -D INPUT -j DROP
iptables -A INPUT мое_новое_правило
iptables -A INPUT -j DROP

Посмотреть правила:

iptables -S

Посмотреть правила с номерами:

iptables -L -n --line-numbers

Для разрешения доступа только с определённого IP-адреса a.b.c.d. Добавлять правила нужно именно в таком порядке:

iptables -I INPUT -s a.b.c.d -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

Удалить правила:

iptables -D INPUT -p tcp --dport 80 -j DROP
iptables -D INPUT -s a.b.c.d -j ACCEPT

Удалить правило по номеру. Будет удалено первое в списке правило:

iptables -D INPUT 1

Добавить правило в 1 позицию списка (если так сделать, то web-сервер перестанет отвечать на порт 80):

iptables -I INPUT 1 -p tcp --dport 80 -j DROP

Также можно добавлять правила с использованием маски подсети:

iptables -I INPUT -s 95.31.169.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

Сброс правил iptables:

iptables -F

Как сделать текущие правила iptables перманентными:

iptables-save > /var/lib/iptables/rules

Правила в файле /var/lib/iptables/rules будут автоматически восстанавливаться автозапуском скрипта /etc/network/if-up.d/iptables.

[Просмотр процессов]

Количество процессов php, apache2:

ps aux | grep -c php
ps aux | grep -c apache2

[Количество подключений]

Количество подключений на 80, 443 порт (если у вас используется SSL-сертификат, то вместо “80” необходимо указывать “443”, оптимально использовать оба варианта):

netstat -na | grep -c ':80 '
netstat -na | grep -c ':443 '

[Перезагрузка сервера]

shutdown -r now

[Скрипты автозапуска]

Посмотреть содержимое каталога /etc/network/if-up.d, там находятся скрипты автозапуска:

ls /etc/network/if-up.d
bind9  iptables  lprng  mountnfs  openssh-server  postfix  sendmail

[Списки IP-адресов]

Список опасных доменов https://www.cloudflare.com/ips-v4

[Конфигурация Apache, nginx]

Конфигурация Apache:

/etc/apache2

Конфигурация nginx:

/etc/nginx

[Операции с учетными записями]

Добавить пользователя:

adduser username

Далее надо указать пароль, на дурацкие вопросы ответить Enter.

Чтобы отключить требование "Current Kerberos password:" нужно выполнить команду pam-auth-update, пробелом запретить Kerberos authentification [11].

Ошибка "is not in the sudoers file": открыть файл /etc/sudoers, в конец добавить строчку:

username ALL = (ALL) ALL

Как удалить пользователя:

deluser username

Если вы хотите удалить пользователя, его домашний каталог и почтовый ящик, используйте флаг --remove-home :

deluser --remove-home username

Как запретить пользователю вход, без удаления:

passwd -l username

[zip]

Архивирование /etc:

zip /var/www/username/data/www/мойдомен.ru/tmp/файлархива.zip -r /etc/

[Поиск файла по имени]

Найти файл, который начинается на fail2ban:

find / -name 'fail2ban*'

[musql]

1. Команда /etc/init.d/mysql stop не срабатывает. Как прибить процессы mysql?

Команда top или ps aux | grep mysql позволит узнать имена процессов. Далее используйте команды:

killall -9 mysqld
killall -9 mysqld_safe
killall -9 mysqld

2. Сервер mysql запускается с ошибкой:

# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

Выполните друг за другом команды:

mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
mysql_upgrade --force -u root -p

Для ввода этой команды понадобится пароль root для MySQL (не путайте пароль root MySQL с паролем root системы).

3. Database Error: Unable to connect to the database:Could not connect to MySQL

Что надо сделать:

(a) Остановить Apache.

/etc/init.d/apache2 stop

(b) Остановить mysql, убедиться что он не работает командой top.

/etc/init.d/mysql stop
ps aux | grep mysql
killall -9 mysqld

killall -9 mysqld_safe

(c) Проверить, что не забита папка /tmp.

du -sm * | sort -n

Если забита, то очистить её от файлов с расширениями MYD и MYI.

rm /tmp/*.MYD
rm /tmp/*.MYI

(d) Восстановить целостность таблиц.

mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
mysql_upgrade --force -u root -p

(e) Запустить Apache.

/etc/init.d/apache2 start

4. Каталог /tmp забит файлами с расширениями *.MYD и *.MYI. Что это значит?

Пример вывода команды ls:

user:/tmp# ls
#sql_339f_0.MYD  #sql_339f_2.MYI  ispmgr.adm.sock
#sql_339f_0.MYI  #sql_339f_3.MYD  ispmgr.sock
#sql_339f_1.MYD  #sql_339f_3.MYI  mc-root
#sql_339f_1.MYI  #sql_339f_4.MYD
#sql_339f_2.MYD  #sql_339f_4.MYI

Это временные файлы, которые образуются от запросов к базе MySQL. Необычно большое количество этих файлов говорит о том, что на сайт ведется атака. После корректной остановки сервера MySQL эти файлы автоматически удаляются.

[Файловая система]

1. Как узнать, на что расходуется место на диске?

du -sm * | sort -n

См. также [13].

2. Как безопасно очистить файл лога? На примере очистки файла лога ispmgr.log:

truncate -s0 ispmgr.log

или:

> ispmgr.log

[IP-адреса]

1. Чтобы рассортировать список IP-адресов в текстовом файле file.txt, нужно ввести команду:

sort -t . -k 1,1n -k2,2n -k 3,3n -k 4,4n file.txt

Здесь опция -t задает разделитель полей строк (.), а четыре опции -k задают сортировать по 1, 2, 3 и 4 полю, n определяет, что поля числовые.

2. Чтобы удалить из списка file.txt дубликаты IP-адресов, используйте команду uniq:

uniq file.txt

Если для uniq указать опцию -u, то будут удалены все дубликаты, т. е. не останется ни одной строки, для которой был дубликат.

[Ссылки]

1. Краткое руководство по борьбе с DDOS-атаками на веб-сервер site:firstvds.ru.
2. Защита от DDOS атак site:stackoverflow.com.
3. Автоматическая загрузка правил для iptables.
4. Joomla: Fatal error Allowed memory size of ... bytes exhausted.
5. systemintegra.ru - помощь в администрировании сервера, подавлении DDoS и т. п.
6. Плагин mmleoni для защиты от атак SQL Injection и LFI (plg_marcosinterceptor11j15.zip, plg_marcosinterceptor11j16.zip).
7. Marco's SQL Injection site:extensions.joomla.org.
8. КАК СМЕНИТЬ ПАРОЛЬ В LINUX site:losst.ru.
9. Как добавлять и удалять пользователей в Debian site:routerus.com.
10. ОШИБКА USER IS NOT IN THE SUDOERS FILE site:losst.ru.
11. How could I eliminate Kerberos for passwd? site:stackexchange.com.
12. Защита от DDoS с помощью Fail2Ban.
13. Чем занято место на диске Linux site:codernotes.ru.
14Как правильно отменить бан IP-адреса в Fail2Ban.
15. Базовая настройка iptables site:ruvds.com.