2011-03-10 96 views
0

我现在可能会问错误的问题,但忍受着我。在http端口上禁用telnet?

我有一个Linux守护进程和Web前端的Linux系统。守护进程接受某个端口上的套接字请求并接收命令。通常,这些命令由Web前端发出,它具有安全的登录过程。但是,由于HTTP允许任何人通过远程登录到该端口并发出原始命令,我需要一种保护系统免受滥用的方法。

我其实不认为有一种方法可以将apache配置为不允许telnet,因为那样整个事情可能就不再起作用了。

那么有什么办法只允许从本地主机创建套接字?

ps。我知道有本地版本的套接字,但我想避免它 - 原因是我已经编写了一个自动化测试框架,具体取决于远程连接。

感谢,

回答

4

使用iptables来限制访问端口80只从本地主机

iptables -I INPUT -j ACCEPT -p tcp --destination-port 80 -i lo 
iptables -A INPUT -j DROP -p tcp --destination-port 80 -i eth0 
2

你的守护进程可以继续允许的IP地址列表,最好在一个配置文件,并立即断开不在允许列表上的任何连接。使用getpeername()函数获取连接IP。

struct sockaddr_in sin; 
socklen_t slen = sizeof(sin); 
bzero(&sin, sizeof(sin)); 
if (getpeername(sock, (struct sockaddr *) &sin, &slen) != 0) { 
    /* getpeername failed */ 
    close(sock); 
    return; 
} 
char * c = inet_ntoa(sin.sin_addr); 
/* Now loop through your list of permitted addresses and compare to c */ 

免责声明:代码没有编译或测试,但应该给你如何实现它的想法。

+0

是否有一些您可以共享的示例代码?谢谢, – lang2 2011-03-10 16:36:15

3

将您的守护程序bind()仅限于本地主机(127.0.0.1),并且您的Web服务器调用127.0.0.1。这种方式没有人可以直接连接到它。

struct inaddr_in listen_addr = {0}; 

listen_addr.sin_family = AF_INET; 
listen_addr.sin_port = htons(my_port); 
listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 

或者,添加防火墙/ iptables规则,阻止守护程序端口与localhost之外的任何其他守护程序端口。

1

如果你不想改变你的应用程序,你可以配置防火墙来限制访问到相应的端口号连接,因此只有那台机器和您的测试机器才能连接到端口。