# [apache] /usr/sbin/ports 100% cpu (résolu)

## ibasaw

Salut,

J'ai un load cpu exccesif sur ce process /usr/sbin/ports

C'est lié à apache, que j'ai arrêter, tuer tout ces processus et j'ai restart, mais après ça j'ai encore 100% cpu sur un proc.

Je ne trouve pas de docs à ce sujet sur le net, j'ai regardé tout mes logs, rien de suspect.

Je ne sais plus ou chercher pour que ce proc arrête de bouffer à 100% un cpu de mon serveur.

Merci pour votre aide

++Last edited by ibasaw on Tue Jan 28, 2014 4:19 pm; edited 2 times in total

----------

## ibasaw

je ne sais pas pourquoi, j'ai fais un gdb httpd PID et le process à disparu, donc mon serveur n'est plus chargé

Je ne comprend pas, quelqu'un peu m'expliquer ?

```

gdb httpd 18239

GNU gdb (Gentoo 7.5.1 p2) 7.5.1

Copyright (C) 2012 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-pc-linux-gnu".

For bug reporting instructions, please see:

<http://bugs.gentoo.org/>...

httpd: No such file or directory.

Attaching to process 18239

/var/tmp/portage/dev-lang/perl-5.12.4-r1/image/usr/bin/perl5.12.4 (deleted): No such file or directory.

A program is being debugged already.  Kill it? (y or n) y

/root/18239: No such file or directory.

(gdb)

exit

```

----------

## ibasaw

c'est revenu, je ne comprend pas ...

y'a un soucis avec apache

----------

## ibasaw

voici mon fichier de conf

```
# Server-Pool Management (MPM specific)

# PidFile: The file in which the server should record its process

# identification number when it starts.

#

# DO NOT CHANGE UNLESS YOU KNOW WHAT YOU ARE DOING

PidFile /var/run/apache2.pid

# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.

#LockFile /var/run/apache2.lock

# Only one of the below sections will be relevant on your

# installed httpd.  Use "/usr/sbin/apache2 -l" to find out the

# active mpm.

# common MPM configuration

# These configuration directives apply to all MPMs

#

# StartServers: Number of child server processes created at startup

# MaxClients: Maximum number of child processes to serve requests

# MaxRequestsPerChild: Limit on the number of requests that an individual child

#                      server will handle during its life

# prefork MPM

# This is the default MPM if USE=-threads

#

# MinSpareServers: Minimum number of idle child server processes

# MaxSpareServers: Maximum number of idle child server processes

<IfModule mpm_prefork_module>

   StartServers      5

   MinSpareServers      5

   MaxSpareServers      10

   MaxClients         150

   MaxRequestsPerChild   10000

</IfModule>

# worker MPM

# This is the default MPM if USE=threads

#

# MinSpareThreads: Minimum number of idle threads available to handle request spikes

# MaxSpareThreads: Maximum number of idle threads

# ThreadsPerChild: Number of threads created by each child process

<IfModule mpm_worker_module>

   StartServers      2

   MinSpareThreads      25

   MaxSpareThreads      75

   ThreadsPerChild      25

   MaxClients         150

   MaxRequestsPerChild   10000

</IfModule>

# event MPM

#

# MinSpareThreads: Minimum number of idle threads available to handle request spikes

# MaxSpareThreads: Maximum number of idle threads

# ThreadsPerChild: Number of threads created by each child process

<IfModule mpm_event_module>

   StartServers      2

   MinSpareThreads      25

   MaxSpareThreads      75

   ThreadsPerChild      25

   MaxClients         150

   MaxRequestsPerChild   10000

</IfModule>

# peruser MPM

#

# MinSpareProcessors: Minimum number of idle child server processes

# MinProcessors: Minimum number of processors per virtual host

# MaxProcessors: Maximum number of processors per virtual host

# ExpireTimeout: Maximum idle time before a child is killed, 0 to disable

# Multiplexer: Specify a Multiplexer child configuration.

# Processor: Specify a user and group for a specific child process

<IfModule mpm_peruser_module>

   MinSpareProcessors   2

   MinProcessors      2

   MaxProcessors      10

   MaxClients         150

   MaxRequestsPerChild   1000

   ExpireTimeout      1800

   Multiplexer nobody nobody

   Processor apache apache

</IfModule>

# itk MPM

#

# MinSpareServers: Minimum number of idle child server processes

# MaxSpareServers: Maximum number of idle child server processes

<IfModule mpm_itk_module>

   StartServers      5

   MinSpareServers      5

   MaxSpareServers      10

   MaxClients         150

   MaxRequestsPerChild   10000

</IfModule>

# vim: ts=4 filetype=apache

```

----------

## guilc

Si tu fais un « strace » du process qui fait du 100% cpu, ça sort quoi ?

Ps: peux-tu mettre ton titre du topic en conformité avec les conventions de notre forum s'il te plaît ? Merci  :Smile: 

----------

## ibasaw

il y en a plusieurs que je ne comprend pas trop

```
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4

connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0

poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

sendto(4, "\374\264\1\0\0\1\0\0\0\0\0\0\6search\5yippy\3com\7ki"..., 46, MSG_NOSIGNAL, NULL, 0) = 46

poll([{fd=4, events=POLLIN}], 1, 5000)  = 1 ([{fd=4, revents=POLLIN}])

ioctl(4, FIONREAD, [98])                = 0

recvfrom(4, "\374\264\201\203\0\1\0\0\0\1\0\0\6search\5yippy\3com\7ki"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 98

close(4)                                = 0

open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4

fstat(4, {st_mode=S_IFREG|0644, st_size=1271, ...}) = 0

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4213e0b000

read(4, "# /etc/hosts: Local Host Databas"..., 4096) = 1271

read(4, "", 4096)                       = 0

close(4)                                = 0

munmap(0x7f4213e0b000, 4096)            = 0

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4

connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0

poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

sendto(4, "\253\231\1\0\0\1\0\0\0\0\0\0\6search\5yippy\3com\0\0\1"..., 34, MSG_NOSIGNAL, NULL, 0) = 34

poll([{fd=4, events=POLLIN}], 1, 5000)  = 1 ([{fd=4, revents=POLLIN}])

ioctl(4, FIONREAD, [102])               = 0

recvfrom(4, "\253\231\201\203\0\1\0\0\0\1\0\0\6search\5yippy\3com\0\0\1"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 102

close(4)  

```

```
recvmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(49099), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"\305\266\1\0\0\1\0\0\0\0\0\0\6search\5yippy\3com\7ki"..., 4096}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 46

sendmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(49099), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"\305\266\201\203\0\1\0\0\0\1\0\0\6search\5yippy\3com\7ki"..., 98}], msg_controllen=0, msg_flags=0}, 0) = 98

recvmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(33798), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"K\213\1\0\0\1\0\0\0\0\0\0\6search\5yippy\3com\7ki"..., 4096}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 46

sendmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(33798), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"K\213\201\203\0\1\0\0\0\1\0\0\6search\5yippy\3com\7ki"..., 98}], msg_controllen=0, msg_flags=0}, 0) = 98

recvmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(54318), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"'\247\1\0\0\1\0\0\0\0\0\0\6search\5yippy\3com\0\0\1"..., 4096}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 34

epoll_wait(5, {}, 64, 0)                = 0

sendmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(54318), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"'\247\201\203\0\1\0\0\0\1\0\0\6search\5yippy\3com\0\0\1"..., 102}], msg_controllen=0, msg_flags=0}, 0) = 102

recvmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(49208), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"pg\1\0\0\1\0\0\0\0\0\0\6search\5yippy\3com\0\0\1"..., 4096}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 34

sendmsg(512, {msg_name(16)={sa_family=AF_INET, sin_port=htons(49208), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"pg\201\203\0\1\0\0\0\1\0\0\6search\5yippy\3com\0\0\1"..., 102}], msg_controllen=0, msg_flags=0}, 0) = 102

```

c'est du chinois pour moi tout ca...

----------

## ibasaw

j'ai trouvé ca dans mon /log/messages

```
Jan 27 16:34:35 ns264652 named[3543]: error (network unreachable) resolving 'ns-1767.awsdns-28.co.uk/AAAA/IN': 2001:630:181:35::83#53

Jan 27 16:34:35 ns264652 named[3543]: error (network unreachable) resolving 'ns1.otenet.gr/AAAA/IN': 2001:678:7::4:10#53

Jan 27 16:34:35 ns264652 named[3543]: error (network unreachable) resolving 'ns-1767.awsdns-28.co.uk/AAAA/IN': 2a01:40:1001:35::2#53
```

Je pense que ça n'a rien à voir, mais il y en a des tonnes comme ça

----------

## El_Goretto

Ton serveur DNS est accessible au public en temps normal? Est-ce que tu peux voir d'où viennent ces requêtes (un coup de tcpdump?)?

Un processus qui s'arrête quand on lui accroche un debugger... mmmm... ça sent pas bon, mais on va dire que je suis parano ^^

----------

## ibasaw

je viens de toruver ca: ca sent pas bon

c99 injektor sur 2 sites heberge sur mon dedié

J'ai effacé les scripts, relancer apache.

Mais comment me protéger contre ce genre d'attaques ?

Comment ils ont réussi à écrire dans un répertoire sur mon DD, un site utilise wordpress et l'autre un joomla ?

Vos avis, conseils ?

----------

## ibasaw

intrusion avec un fichier .gif qui contenait du code php qui contenait un eval + base64_decode

...

----------

## Leander256

 *ibasaw wrote:*   

> je viens de toruver ca: ca sent pas bon
> 
> c99 injektor sur 2 sites heberge sur mon dedié
> 
> J'ai effacé les scripts, relancer apache.

 

Je vais faire court à ce sujet: ta machine a été compromise. Tu DOIS formater le(s) disque(s) dur(s) et réinstaller. C'est la seule manière d'être certain que ton système est sain. Mais surtout ne remet pas en ligne les services que tu proposes actuellement, jusqu'à ce que tu aies identifié la(les) faiblesse(s) de ton système, sinon tu vas te refaire trouer illico.

 *ibasaw wrote:*   

> Mais comment me protéger contre ce genre d'attaques ?
> 
> Comment ils ont réussi à écrire dans un répertoire sur mon DD, un site utilise wordpress et l'autre un joomla ?
> 
> Vos avis, conseils ?

 

La sécurité ce n'est malheureusement pas une section "trucs et astuces" au fin fond d'un manuel d'utilisation, c'est une composante essentielle (mais trop négligée) de tout système, et encore plus si ce système est connecté sur un réseau. Vu que tu as l'air étonné de t'être fait trouer par un serveur PHP (le point d'entrée le plus probable), mon premier conseil brut de décoffrage c'est: arrête d'héberger des sites sur ton dédié. Prends le temps de lire de la documentation sur la sécurité, les failles de sécurité, les moyens de limiter les dégâts... Je n'ai pas connaissance d'une "bible" de la sécurité donc si quelqu'un passe par ici qu'il n'hésite pas à compléter ma réponse. Et je n'ai pas envie d'écrire un roman sur ce forum!

----------

## DuF

Comme Leander256 je dirai qu'avant d'ouvrir des services il faut que la sécurité soit mise en place "AVANT", jamais après.

Sur ton dédié, je ne sais pas quelles possibilités tu as mais ce qui est sûr, c'est que la seule démarche à avoir est de repartir de zéro avec des disques nouveaux et tout remonter depuis le début sans rien récupérer du dédié actuel.

Avant d'ouvrir tes services joomla et wordpress à minima il te faut que des services du type : 

- rkhunter

- fail2ban (ssh, wootwoot, etc.)

- integrit

Une page que j'aime bien (même si c'est pour debian) : http://www.vogelweith.com/debian_server/01_security.php

et celle-ci aussi : http://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html

Bon forcément en voulant me connecter à mon serveur un peu vite j'ai réussi à me bannir mon IP  :Smile:  Heureusement il reste la console....

Mais sur 24h rien que pour les tentatives de connexion SSH fail2ban me retournent : 

```
root@debduf:~# fail2ban-client status ssh

Status for the jail: ssh

|- filter

|  |- File list:   /var/log/auth.log 

|  |- Currently failed:   0

|  `- Total failed:   1144

`- action

   |- Currently banned:   13

   |  `- IP list:   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

   `- Total banned:   278

```

et pour apache wootwoot :

```
Status for the jail: apache-w00tw00t

|- filter

|  |- File list:   /var/log/apache2/error.log 

|  |- Currently failed:   0

|  `- Total failed:   88

`- action

   |- Currently banned:   3

   |  `- IP list:   XXXXXXXXXXXXXXX 

   `- Total banned:   88

```

Et ça c'est juste pour se prémunir des trucs les plus basiques qui tentent en mode robot. Donc tout ça juste pour indiquer qu'il faut être conscient de la sécurité et qu'il ne faut surtout pas la négliger.

Avec rkhunter par exemple, il faut être conscient qu'une fois configuré il faut suivre les changements sinon ça ne sert à rien et toutes les mises à jours systèmes seront marqués comme modifications là où il n'y a aucun risque. Un exemple de ce qu'indique rkhunter : 

```
Warning: The O/S name or version has changed since the last run:

         Old O/S value: Debian 7.1    New value: Debian 7.2

         Because of the change(s) the file properties checks may give some false-positive results.

         You may need to re-run rkhunter with the '--propupd' option.

Warning: WARNING! It is the users responsibility to ensure that when the '--propupd' option

         is used, all the files on their system are known to be genuine, and installed from a

         reliable source. The rkhunter '--check' option will compare the current file properties

         against previously stored values, and report if any values differ. However, rkhunter

         cannot determine what has caused the change, that is for the user to do.

Warning: The file properties have changed:

         File: /sbin/init

         Current hash: 64d54a652c64c261742017d86599971de6e4effd

         Stored hash : 8fb700b047b7d9921ccdc55da5390f5106d6917b

         Current inode: 9782    Stored inode: 1116

         Current file modification time: 1374117056 (18-juil.-2013 05:10:56)

         Stored file modification time : 1360285189 (08-févr.-2013 01:59:49)

Warning: The file properties have changed:

         File: /sbin/runlevel

         Current hash: bda9ae712c01ac5e4e70c615b767dab918f7444d

         Stored hash : 1377af7a0a57782163e65277e06949db2c471f89

         Current inode: 9787    Stored inode: 1110

         Current file modification time: 1374117056 (18-juil.-2013 05:10:56)

         Stored file modification time : 1360285189 (08-févr.-2013 01:59:49)

Warning: The file properties have changed:

         File: /sbin/sulogin

         Current hash: 31abf98f5cb9eaef52666fdf24d9bc9fe00c0c7f

         Stored hash : 88c9eedf7f8c96e6f1cbc6bb90f81a7c1d169370

         Current inode: 1127    Stored inode: 2017

         Current file modification time: 1374117056 (18-juil.-2013 05:10:56)

         Stored file modification time : 1360285189 (08-févr.-2013 01:59:49)

Warning: The file properties have changed:

         File: /usr/bin/curl

         Current hash: 9d8b0b97bc944825fa6b8328a4a566814847ba59

         Stored hash : 1f0e6a9df7caee3e2e94e0c4a29e5270d40b03b4

         Current inode: 1145    Stored inode: 4500

         Current file modification time: 1376624646 (16-août-2013 05:44:06)

         Stored file modification time : 1365866914 (13-avril-2013 17:28:34)

```

Du coup vu qu'il s'agit d'une mise à jour de l'OS il faut penser à remettre les bases de référence à jour.

Tout ça pour dire que la sécurité, même une fois mise en place il est difficile de tout automatiser et il faut assurer un suivi régulier. Ce n'est pas facile, contraignant, après j'en connais qui ne se prennent pas la tête :

- installation from scratch

- réplication pour obtenir une sauvegarde à froid

- si problème, ils repartent de la sauvegarde initiale et se retape toute la customisation qu'il y a eu entre temps

ça évite le suivi régulier mais ça contraint à de grosses opérations lors des restaurations.

Pour en revenir à ton cas particulier, si tu as juste jommla et wordpress, je ne vois pas pourquoi un serveur DNS tourne. 

Après avoir mis la sécurité "AVANT" de démarrer tes services, il faut enlever tous les services inutiles sur ton serveur (dns, mail, cups, etc.).

Après seulement tu démarres ce qui t'es utile.

----------

## GentooUser@Clubic

Et bien sur avant d'utiliser des outils palliatifs genre rkhunter, penser à bien sécuriser son application PHP, la plupart des failles de PHP (ou des application genre wordpress) sont simplement inopérantes si php ou apache n'a que des droits limités.

- Bien identifier les dossiers où apache et php ont besoin d'écrire.

- Mettre ces dossiers sur une partition montée noexec,nodev.

- Si php doit écrire dans un dossier accessible dans le DocumentsRoot (typiquement le cache js et css) désactiver l’interprétation des fichiers php dans ce répertoire au niveau du serveur web.

- Exécuter PHP et le serveur Web avec des users différents (quitte à utiliser php-fpm plutot que mod_php)

- Ne pas compter que sur les .htaccess, utilisez aussi les droits unix pour définir les droits d'accès à l’intérieur du DocumentsRoot, Apache n'a PAS besoin de pouvoir lire les fichiers .php.

Et plein d'autres choses, n'hésite pas à demander conseil.

----------

