トップ «前の日記(Sat Oct 11 2003) 最新 次の日記(Mon Oct 20 2003)» 編集

よこいまさる日記



Wed Oct 15 2003 [長年日記]

[Computer] hosts.allow/deny の設定を確認するコマンド

libwrap(tcp_wrapper) の設定を確認するコマンドを書いてみた。 /etc/hosts.allow や /etc/hosts.deny の試し書きをして、それが正しく接続を許可・拒否するかを調べるのに便利かもしれない。 例えば、ホスト hogefuga.masaruyokoi.com から SSH connection が張れるかどうかを検査するには 「check_hosts_access.c -d sshd -n hogefuga.masaruyokoi.com」なんていうふうに実行してみてください。

/* check_host_access.c : evaluate hosts.allow/hosts.deny condition.
 *
 * Requires:
 *	libwrap (tcp_wrappers)
 *
 * How to compile:
 *	cc check_hosts_access.c -o check_hosts_access -lwrap
 *
 * How to use:
 *
 *  When check connection will be accepted/denied from a host
 *  addressed as 192.168.1.2 to the daemon in.telnetd, execcute it as
 *  following:
 *
 *	./check_hosts_access -d in.telnetd -a 192.168.1.2
 *
 *  When check with remote host name, specify with -n option. 
 *
 *	./check_hosts_access -d in.telnetd -n a-host-name
 *
 *
 */
#include <stdio.h>
#include <tcpd.h>
extern char *optarg;
extern int optind, opterr, optopt;
#define printusage()   { \
 printf("%s -d <daemon name> [-n hostname|-a addr] [-u user]\n", argv[0]); \
 exit(0); }
int main (int argc, char ** argv) {
    struct request_info req;
    char *addr = NULL, *daemon = NULL, *name = NULL, *user = NULL;
    int c, result;
    opterr = 0;
    while ((c = getopt(argc, argv, "a:d:n:u:h")) != -1) {
      switch(c) {
      case 'a':
	addr = optarg;
        break;
      case 'd':
	daemon = optarg;
        break;
      case 'n':
	name = optarg;
        break;
      case 'u':
	user = optarg;
        break;
      case '?':
        if (isprint(optopt))
	  errx("Unknown option : -%c.\n", optopt);
	else
	  errx("Unknown option character : \\x%x.\n", optopt);
      	break;
      case 'h':
      default:
	printusage();
      }
    }
    if (daemon == NULL && name == NULL && addr == NULL)
      printusage();
    if (daemon == NULL) {
      printf("daemon name (-d) is not specified.\n");
      exit(1);
    }
    if (name == NULL && addr == NULL) {
      printf("client name (-n) and addr (-a) is not specified.\n");
      exit(1);
    }
    request_init(&req, RQ_DAEMON, daemon, 0);
    if (name != NULL) 
      request_set(&req, RQ_CLIENT_NAME, name, 0);
    if (addr != NULL)
      request_set(&req, RQ_CLIENT_ADDR, addr, 0);
    if (user != NULL)
      request_set(&req, RQ_USER, user, 0);
    result = hosts_access(&req);
    printf("daemon=\"%s\" addr=\"%s\" name=\"%s\" user=\"%s\" : %s (%d)\n",
    	daemon, addr, name, user, result ? "accept" : "deny", result);
}
本日のツッコミ(全1件) [ツッコミを入れる]
name (Mon Mar 08 2010 03:24)

5S0YG0 この間も俊太郎の詩をお,


2000|10|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|