LINUX.ORG.RU
ФорумAdmin

vsftpd и резолвинг в DNS.


0

0

Здравствуйте!

CentOS 5.1, vsftpd. Когда происходит авторизация идёт обращение к DNS, по этой причине есть задержки при автаризации. Как я понял происходит резолвинг IP адреса в имя. Как это убрать, в конфигурации ничего похожего на отключения этого не нашёл? :-(

Спасибо.

anonymous
Ответ на: комментарий от wfrr

Нет... Listener.

Резолвинг как при логине происходит так и при отключении.
У меня даже подозрение что это делает не vsftpd, а pam.
Вот что strace-ом видно при отключении, задержка отмечена несколькими пробелами:

17:53:41 sendto(3, "<86>Apr  6 17:53:41 vsftpd: pam_"..., 90, MSG_NOSIGNAL, NULL, 0) = 90
17:53:41 socket(PF_NETLINK, SOCK_RAW, 9) = 8
17:53:41 fcntl(8, F_SETFD, FD_CLOEXEC)  = 0
17:53:41 socket(PF_NETLINK, SOCK_RAW, 0) = 9
17:53:41 bind(9, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
17:53:41 getsockname(9, {sa_family=AF_NETLINK, pid=7541, groups=00000000}, [12]) = 0
17:53:41 sendto(9, "\24\0\0\0\"..., 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
17:53:41 recvmsg(9, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"<\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 188
17:53:41 recvmsg(9, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"@\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 64
17:53:41 recvmsg(9, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
17:53:41 close(9)                       = 0
17:53:41 open("/etc/hosts", O_RDONLY)   = 9
17:53:41 fcntl(9, F_GETFD)              = 0
17:53:41 fcntl(9, F_SETFD, FD_CLOEXEC)  = 0
17:53:41 fstat(9, {st_mode=S_IFREG|0644, st_size=463, ...}) = 0
17:53:41 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x1aaaaaac4000
17:53:41 read(9, "127.0.0.1 localhost.localdomain "..., 4096) = 463
17:53:41 read(9, "", 4096)              = 0
17:53:41 close(9)                       = 0
17:53:41 munmap(0x1aaaaaac4000, 4096)   = 0
17:53:41 open("/etc/hosts", O_RDONLY)   = 9
17:53:41 fcntl(9, F_GETFD)              = 0
17:53:41 fcntl(9, F_SETFD, FD_CLOEXEC)  = 0
17:53:41 fstat(9, {st_mode=S_IFREG|0644, st_size=463, ...}) = 0
17:53:41 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x1aaaaaac4000
17:53:41 read(9, "127.0.0.1 localhost.localdomain "..., 4096) = 463
17:53:41 read(9, "", 4096)              = 0
17:53:41 close(9)                       = 0
17:53:41 munmap(0x1aaaaaac4000, 4096)   = 0
17:53:41 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 9
17:53:41 connect(9, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.10.51")}, 28) = 0
17:53:41 fcntl(9, F_GETFL)              = 0x2 (flags O_RDWR)
17:53:41 fcntl(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
17:53:41 poll([{fd=9, events=POLLOUT, revents=POLLOUT}], 1, 0) = 1
17:53:41 sendto(9, "\270J\1\0\0\1\0\0\0\0\0\0\22user-85-28-xxx-80\10"..., 49, MSG_NOSIGNAL, NULL, 0) = 49
17:53:41 poll(

========= тут был несколько раз нажат enter чтобы увидеть задержку


[{fd=9, events=POLLIN, revents=POLLIN}], 1, 5000) = 1
17:53:45 ioctl(9, FIONREAD, [98])       = 0
17:53:45 recvfrom(9, "\270J\201\200\0\1\0\0\0\1\0\0\22user-85-28-xxx-80\10"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.10.51")}, [16]) = 98
17:53:45 close(9)                       = 0
17:53:45 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 9
17:53:45 connect(9, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.10.51")}, 28) = 0
17:53:45 fcntl(9, F_GETFL)              = 0x2 (flags O_RDWR)
17:53:45 fcntl(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
17:53:45 poll([{fd=9, events=POLLOUT, revents=POLLOUT}], 1, 0) = 1
17:53:45 sendto(9, "+\224\1\0\0\1\0\0\0\0\0\0\22user-85-28-xxx-80\10"..., 64, MSG_NOSIGNAL, NULL, 0) = 64
17:53:45 poll([{fd=9, events=POLLIN, revents=POLLIN}], 1, 5000) = 1
17:53:45 ioctl(9, FIONREAD, [119])      = 0
17:53:45 recvfrom(9, "+\224\205\203\0\1\0\0\0\1\0\0\22user-85-28-xxx-80\10"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.10.51")}, [16]) = 119
17:53:45 close(9)                       = 0

anonymous
()
Ответ на: комментарий от anonymous

>У меня даже подозрение что это делает не vsftpd, а pam.

Если судить по исходникам vsftpd, то резолвинг делает pam, но "просит" его об это vsftpd :

sysdeputil.c:308: retval = pam_set_item(s_pamh, PAM_RHOST, str_getbuf(p_remote_host));

Наверное, проще всего, перкомпилировать vsftpd... хотя может можно настроить selinux, так, чтобы запретить коннекты от vsftpd на 53 порт upd (DNS)...

mky ★★★★★
()
Ответ на: комментарий от mky

Спасибо... Видимо эту проблему не устранить, кроме как пересобрать без PAM. selinux отключен.

Изучая запросы, понял где происходят основные тормоза - это запросы AAAA записей для имени хоста. Как бы запретить резолверу отсылать запросы AAAA, в конфигурации /etc/resolv.conf не найдено парметра для такого запрета. Глянул, оказывается для всех запросов что делается через resolver, сначала ищется IP через AAAA, даже для ping mail.ru (к примеру), хотя IPV6 у меня отключен.

anonymous
()
Ответ на: комментарий от mky

Спасибо mky, благодоря вашей наводке, я нашёл где именно проблема.
Вы немного не правы, но еслиб не Вы, я б точно ещё долго гадал в чём дело.

А дело всё вот в этом патче от RedHat-а:

@@ -302,7 +310,12 @@
     return 0;
   }
 #ifdef PAM_RHOST
-  retval = pam_set_item(s_pamh, PAM_RHOST, str_getbuf(p_remote_host));
+  sin.sin_addr.s_addr = inet_addr(str_getbuf(p_remote_host));
+  host = gethostbyaddr((char*)&sin.sin_addr.s_addr,sizeof(struct in_addr),AF_INET);
+  if (host != (struct hostent*)0)
+    retval = pam_set_item(s_pamh, PAM_RHOST, host->h_name);
+  else
+    retval = pam_set_item(s_pamh, PAM_RHOST, str_getbuf(p_remote_host));
   if (retval != PAM_SUCCESS)
   {
     (void) pam_end(s_pamh, 0);

Убрав этот патч функция pam_set_item(s_pamh, PAM_RHOST, str_getbuf(p_remote_host)); 
никаких запросов в DNS не делает. Единственное, не понимаю,
зачем redhat определяет по IP hostname, чтобы потом опять pam из hostname-а получал IP?

P.S. Вопрос об отключении запросов AAAA остаётся в силе. Так как они для других приложений,
оказывается создают задержки, небольшие, но создают.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.