让关闭的Linux操作系统实现防火墙功能

北京电视台阿强

北京电视台阿强

2016-01-29 19:46

让关闭的Linux操作系统实现防火墙功能,让关闭的Linux操作系统实现防火墙功能
 

  一次在网上闲逛,突然看到论坛有一条消息说有一种方法,可以让已经关闭的Linux机器继续运行ipchains,并且让这台机器继续实现防火墙的功能。当时我的第一反映是不屑一顾,难道一个防火墙还可以在关机的状态下工作?依照论坛中所指的链接,我找到了一个帖子,上面说在2.0.x内核中,使用Shutdown ?h(关机)命令可以使防火墙仍处于激活状态,而此时没有挂载驱动器,也没有进程在运行。也就是说防火墙将在Level 0下运行,但仍然可以进行包过滤。不过,贴子说该功能在2.2.x系统的内核中已经不具备了。

  看到这儿,我有些坐不住了,我决定在内核为2.2.x的机器上也实现类似的功能,并且我希望不在内核中增加任何补丁。事实证明,我做到了。

  安全的防火墙

  我认为安全意味着这样一种可能性,也就是假设防火墙已经被完全关闭,并且已经清除了所有进程空间和文件系统,这样就不会有任何黑客可以对该系统进行访问。因为该机器上已经完全没有了进程空间,也没有挂载驱动器。因此,黑客就无法在系统外使代码运行在内核空间中。因为这需要写解释代码来产生所需要的结果,而这是一项非常艰苦的工作。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/linux/)

  不过需要提请注意的是,该防火墙并不能避免“拒绝服务式”的攻击。事实上,对于“拒绝服务式”攻击以及其它的专门耗尽资源的攻击,该防火墙并不比任何其它的防火墙有效。当然,现实中,一般来说系统并不容易受到这种攻击。

  因为这种方法可以确保没有一个用户可以控制该机器,因此可以使安全性大大的提高。这正好应了IT业安全领域常说的一句话,要想让一台机器绝对安全,就应该把它关机,然后将其锁在一间屋子里。

  开始实施

  我用于测试的是一台基于x86的Red Hat 6.2机器,它安装有两个网卡。整个过程无需特殊的系统或者对内核进行增改。开始,我尝试着在控制运行的脚本中搜索,希望能找到一点相关的线索。最后,我把焦点定格在rc0(该脚本在机器关闭时运行)脚本上。事实证明,这正是我要找的地方。于是我开始从中删除一些脚本,并且进行了一系列测试。

  经过一段相对较短的时间,我得出结论,对于Red Hat Linux 6.2,删除以下脚本就可以实现上述的功能:

  /etc/rc.d/rc0.d/S00killall

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/linux/)

  /etc/rc.d/rc0.d/K90network

  /etc/rc.d/rc0.d/K92ipchains

  删除这三个脚本以后,我们就可以使网络仍然可以工作,并且使ipchains仍然运行。切记,一定要把killall脚本删除,因为它的任务是寻找/etc/rc.d/rc0.d/中所有的目录,并且运行所有以K为开头的脚本。也就是说该脚本会运行K90网络和K92ipchains脚本,而这两个脚本会删除网络和ipchains。

  一些解释

  实际上,我们是把Linux设置成了一个内核子集。当机器暂停时,甚至是机器运行了Shutdown以后,这一部分内核仍驻留在内存中。这种方法可以避免在关机的过程中,机器会中止所有的进程,关闭所有网卡以及卸载所有的文件系统。此外,这种方法使得机器在关闭以后,不能再执行任何内部的任务。然而,内核仍然在运行,内存管理器也还在运行。

  由于内核仍然在运行,所以在关机以后,所有我们运行的,基于内核的任务都可以被运行。当然,由于大部分的任务都需要进行一些I/O操作(正如本例一样)。因此,我们必须让机器关闭以后,仍然使这些端口存在。这是通过K90network来实现。它使得网卡在关机以后也不会停止工作。

  此外,任何需要使用到的基于内核的服务都必须要处于运行状态(比如ipchains)。在缺省情况下,当系统关闭时,会把所有的ipchains规则都中止。如果这样的话,在本例中,防火墙将无法工作,所以必须要把清除ipchains规则的脚本删除。在本例中即要删除K92ipchains脚本。

  局限性

  在关闭系统以后,只让部分程序运行,这显然会有一些局限性。在本例中,最明显的局限性就是如果客户端的IP地址是通过后台程序(比如PPP、DHCP)等获得的,那么就将无法实现该功能。这就限制了那些使用动态连接用户的使用。此外,由于在关系系统过程中,所有的用户代理空间(比如Socks5)都将被关闭,因此在本例的设置中,只能实现包过虑和NAT功能。

  此外要考虑的一点是,由于所有的驱动器都被卸载了,所有的交换空间都从机器上被删除,所以如果机器的内存足够大的话,那么在处理的信息量很大时也不会有问题。但是如果使用的是一台性能比较差的老机器,那么在传输的信息量过大时就会出现一些问题。

  总结

  作为一个Linux爱好者,我觉得这一小发现很有意思。此外,在我们完成特定的安全任务时,这也给了我们一种特定的解决模式。目前,我最想知道的,是否其它的自由Unix(比如OpenBSD)也可以做成功类似的实验。此外,虽然我是在家中做的实验,但是如果将其用于中小型公司的话,我想可以为公司提供安全极高的数据包过滤功能。此外,也可以为一些大的商业任务提供一个非常安全的、高带宽的防火墙或者路由器。

 
展开更多 50%)
分享

猜你喜欢

让关闭的Linux操作系统实现防火墙功能

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
让关闭的Linux操作系统实现防火墙功能

XP操作系统防火墙经典使用指南

windows 操作系统
XP操作系统防火墙经典使用指南

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

怎么关闭防火墙 教你简单关闭防火墙方法

计算机应用技术
怎么关闭防火墙 教你简单关闭防火墙方法

Linux手动关闭防火墙的步骤

电脑入门
Linux手动关闭防火墙的步骤

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Windows XP操作系统防火墙经典使用指南

电脑网络
Windows XP操作系统防火墙经典使用指南

防火墙在哪里设置 怎样关闭防火墙

计算机应用技术
防火墙在哪里设置 怎样关闭防火墙

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

在 RedHat 环境如何手工建立tunnel(IPV6)?

在 RedHat 环境如何手工建立tunnel(IPV6)?

用ASP编写的俄罗斯方块游戏

用ASP编写的俄罗斯方块游戏
下拉加载更多内容 ↓