Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

讓 pure-ftpd 在使用 PAM 認證時, 不要記錄遠端的主機名稱, 而是記錄 IP 位址
post by tommy @ 12 九月, 2006 22:01
我想利用 auth.log 的內容, 來檢查是否有人嘗試使用 ftp 來非法存取, 而對該 IP 利用 iptables 來暫停一段時間的連線. 不過, 由於 pure-ftpd 會在 rhost 這個欄位上頭, 使用遠端的主機名稱, 而不是 IP 位址. 這會造成我在處理 auth.log 上頭的困擾.

所以, 試著修改一下 pure-ftpd 的程式, 在 rhost 欄位上頭, 只記錄 IP 位址就可以.

diff -Nur src.orig/ftpd.h src/ftpd.h
--- src.orig/ftpd.h 2006-02-15 22:05:54.000000000 +0800
+++ src/ftpd.h 2006-09-12 21:48:00.629546818 +0800
@@ -557,6 +557,7 @@
#define STORAGE_PORT6(X) (((struct sockaddr_in6 *) &(X))->sin6_port)
#define STORAGE_SIN_ADDR(X) ((((struct sockaddr_in *) &(X))->sin_addr).s_addr)
#define STORAGE_SIN_ADDR6(X) ((((struct sockaddr_in6 *) &(X))->sin6_addr).s6_addr)
+#define STORAGE_SIN_ADDR_NF(X) (((struct sockaddr_in *) &(X))->sin_addr)
#define STORAGE_SIN_ADDR6_NF(X) (((struct sockaddr_in6 *) &(X))->sin6_addr)

#ifdef HAVE_SS_LEN
diff -Nur src.orig/log_pam.c src/log_pam.c
--- src.orig/log_pam.c 2006-06-12 18:44:25.000000000 +0800
+++ src/log_pam.c 2006-09-12 21:48:12.161475481 +0800
@@ -168,16 +168,19 @@
logfile(LOG_INFO, "PAM_RHOST enabled. Getting the peer address");
switch (STORAGE_FAMILY(*peer)) {
case AF_INET:
- hent = gethostbyaddr(&STORAGE_SIN_ADDR(*peer), sizeof(STORAGE_SIN_ADDR(*peer)), AF_INET);
+ //hent = gethostbyaddr(&STORAGE_SIN_ADDR(*peer), sizeof(STORAGE_SIN_ADDR(*peer)), AF_INET);
+ hent = NULL;
+ host = inet_ntoa(STORAGE_SIN_ADDR_NF(*peer));
break;

case AF_INET6:
+ host = NULL;
hent = gethostbyaddr(&STORAGE_SIN_ADDR6(*peer), sizeof(STORAGE_SIN_ADDR6(*peer)), AF_INET6);
break;
}

if (!hent)
- (void)pam_set_item(pamh, PAM_RHOST, NULL);
+ (void)pam_set_item(pamh, PAM_RHOST, host);
else
(void)pam_set_item(pamh, PAM_RHOST, hent->h_name);
#endif
 

這個 patch 可以由這兒抓取: http://www.teatime.com.tw/~tommy/mypatch/pureftpd_pam_ip.patch

經由上頭的 patch 處理後, 就可以在 rhost 上頭記錄 IP 了.

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 97 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS