Здесь разместил памятку по командам Linux/Debian, которые могут понадобиться при диагностике и устранении проблем с сайтом, и полезные ссылки. Команды следует вводить под суперпользователем (root) или от его имени через sudo.
[Логи Apache2]
Логи лежат в /var/www/httpd-logs/, к серверу можно подключиться по SFTP с использованием учетных данных пользователя root, чтобы скачать логи.
Просмотр последних 20 строк лога:
tail -20 /var/www/httpd-logs/мойдомен.ru.access.log
То же самое, только отфильтровать по IP:
tail -20 /var/www/httpd-logs/мойдомен.ru.access.log | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
Регулярное выражение для правильных IPv4 адресов: "(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 /var/www/httpd-logs/мойдомен.ru.access.log | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sort | uniq -c | sort -n >/var/tmp/sorted-list01.txt
Создание сортированного списка по количеству подключений:
cat /var/www/httpd-logs/мойдомен.ru.access.log | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sort | uniq -c | sort -n >/var/tmp/sorted-list02.txt
Слежение за логом:
tail -f /var/www/httpd-logs/мойдомен.ru.access.log
[Остановка, запуск сервера]
Apache:
/etc/init.d/apache2 stop /etc/init.d/apache2 start
MySQL:
/etc/init.d/mysql stop /etc/init.d/mysql start
Сначала надо остановить Apache, потом сервер mySQL. Запускать надо в обратном порядке.
Автозапуск. Автозапуск сервисов в ОС Debian 6 реализован путём создания мягких ссылок (symlink) в директории /etc/rc3.d/ на файлы сервисов из директории /etc/init.d/. Если необходимо отключить запуск apache2 и mysql, то необходимо воспользоваться утилитой update-rc.d.
[Ограничение доступа через iptables]
Этот инструмент используется как быстрое лекарство для починки сервера, когда происходит атака, и надо временно ограничить к нему доступ, чтобы спокойно проанализировать логи.
Посмотреть правила:
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, в конец добавить строчку:
Как удалить пользователя:
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. |