Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阻止或允许带有“的网站”/etc/hosts“;真的不赞成吗?用什么来代替?_Java_Linux_Http_Ubuntu_Proxy - Fatal编程技术网

Java 阻止或允许带有“的网站”/etc/hosts“;真的不赞成吗?用什么来代替?

Java 阻止或允许带有“的网站”/etc/hosts“;真的不赞成吗?用什么来代替?,java,linux,http,ubuntu,proxy,Java,Linux,Http,Ubuntu,Proxy,我正在为我的大学创建一个Java项目,我的项目的一个特点是阻止/允许老师设置的网站(这是一个开源的实验室监控软件)实际上我需要更简单的方法:阻止所有站点,但只允许少数站点(允许2或3个站点,所有其他站点都必须被阻止) 我发现它使用了/etc/hosts.allow和/etc/hosts.deny来做我需要的事情。不过 我不认为IPTables是实现我目标的好方法,因为要允许访问单个网站,我需要允许一个IP地址——但请记住,一个主机名可以有多个IP地址(就像任何谷歌服务、Facebook甚至我大学

我正在为我的大学创建一个Java项目,我的项目的一个特点是阻止/允许老师设置的网站(这是一个开源的实验室监控软件)实际上我需要更简单的方法:阻止所有站点,但只允许少数站点(允许2或3个站点,所有其他站点都必须被阻止)

我发现它使用了
/etc/hosts.allow
/etc/hosts.deny
来做我需要的事情。不过

我不认为IPTables是实现我目标的好方法,因为要允许访问单个网站,我需要允许一个IP地址——但请记住,一个主机名可以有多个IP地址(就像任何谷歌服务、Facebook甚至我大学的Moodle)


那么,阻止所有网站并只允许少数网站的最佳方式是什么呢?IPtables使用IP地址而不是DNS地址的原因是坏人相对容易阻止或欺骗DNS服务器,从而规避您设置的阻止

最好的方法是使用iptables(或等效物),因为它们基于IP地址进行阻塞


我不认为IPTables是实现我目标的好方法,因为要允许访问单个网站,我需要允许一个IP地址——但请记住,一个主机名可以有多个IP地址(就像任何谷歌服务、Facebook甚至我大学的Moodle)

IPTables将允许(或阻止)属于单个服务的多个IP地址。您必须告诉它这些IP地址是什么,但一旦您这样做,它将允许/阻止它们

事实上,这是防火墙管理问题的核心。没有办法知道:

  • Facebook将使用什么IP地址,或者
  • 如果Facebook以前使用的IP仍然(名义上)由Facebook使用,或者
  • 如果有人劫持了Facebook的IP地址
不能依靠DNS来回答这些问题。Facebook不需要在DNS中公布他们的IP地址,因为他们不需要依赖DNS查找。他们可能不知道他们的主人是否被劫持了


您还询问是否真的不赞成阻止或允许带有“/etc/hosts.allow”和“/etc/hosts.deny”的网站

嗯,这取决于你所说的“不推荐”是什么意思。当我在我的(Fedora 20)Linux机器上运行“man hosts.allow”时,它没有提到“deprecated”这个词,当我在谷歌上搜索“hosts.allow deprecated”时,我看不到任何可信的东西。(提示:将这些答案视为权威是不明智的。)

我对软件“弃用”的理解是,这意味着供应商建议您停止使用它。我看不到发生这种情况的迹象

然而,“hosts.allow”方法(或者更准确地说,“tcpd(8)”)确实有其局限性。引用

“Hosts.allow是一个非常有趣和有用的工具,可以帮助提高主机的安全性,但是打字错误和编写不好的规则会使主机比没有这些规则时更容易受到攻击。打字错误也可能在你最意想不到的时候把自己锁在盒子外面。如上所述,使用“TCP包装”服务和守护进程的访问控制功能可能会影响主机的性能,并且可能会限制客户端的响应速度。”

“该设施不是一个完整的安全解决方案,也不应被视为一个完整的安全解决方案,相反,它是对现有数据包过滤和防火墙解决方案的补充(无论是免费的、言论自由的还是商业的)。有些功能仅通过使用hosts.allow工具可用,例如将特定客户端重定向到其他服务,或返回特定错误消息,以及特定于服务和/或客户端的横幅。尽管如此,这是一个很好的工具,有些人忽略了它,因为它提供了一种简单的方法来拒绝特定主机访问特定服务。”

值得注意的是,HOWTO的源文章已经相当过时了,它是在2002年写的,从那以后发生了很多变化


最后,请注意,如果您将DNS名称放入“hosts.allow”和“hosts.deny”文件中,您将面临我上面解释的问题。

这与Java或Java应用程序有什么关系?无论如何,您可以查看像NISTNet这样的旧项目。@jdv Java正是我们(我是该项目的成员)的方式将管理阻止列表。使用IPTables,我们可能会使用Java的运行时类调用IPTables。使用/etc/hosts,我们可能会使用Java的文件类编辑/etc/hosts。等等。顺便说一句,感谢链接,我会看看它是否有帮助。IPTables是最好的方法。这不是一个好方法(从您的角度来看),但它仍然是最好的…如果你正在寻找一个免费/主流的解决方案。现在在一个商业世界中,你将开始寻找由“安全解决方案”生产的各种产品“嘿。IPTables无法阻止像Facebook.com和similar这样的高效分布式服务,因为它们是分布式的,并且通过分布式它们有多个ip,如问题中所解释的。您将如何使用IPTables解决类似的问题?(请记住,使用150.162.*.*之类的内容不是一个选项,因为它们会允许访问太多的内容)。感谢您的回答,但正如@FernandoMota所评论的,这并不能解决我在问题中指定的问题。这并不能解决像Facebook、Google等分布式服务的问题。很抱歉,我不能给你最好的答案,因为你提出了一个行不通的建议。但是,如果你能建议一个脚本,用IPTables来满足这些需求(也解决了分布式服务的问题),我会很高兴,当然会给你最好的答案。@FernandoPalad