在关闭的Linux机器上实现防火墙功能

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

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

安全的防火墙

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

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

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

开始实施

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

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

/etc/rc.d/rc0.d/S00killall
/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)也可以做成功类似的实验。此外,虽然我是在家中做的实验,但是如果将其用于中小型公司的话,我想可以为公司提供安全极高的数据包过滤功能。此外,也可以为一些大的商业任务提供一个非常安全的、高带宽的防火墙或者路由器。

时间: 2024-11-01 20:56:26

在关闭的Linux机器上实现防火墙功能的相关文章

如何在你的Linux机器上安装运行Oracle jdbc:thin with java (OAS) DBA

oracle  如何在你的Linux机器上安装运行Oracle 开始行动 在RedHat上安装Oracle可以是相当轻而易举的,但要是完全跟着Oracle公司的文档走就未必那么容易了 .最快的捷径是Tom Bisset的主页:http://jordan.fortwayne.com/oracle. 如果您看了Tom的主页,那么您会注意到他漏了JDBC的安装.如果您准备使用JDBC(对于跨平台的Oracle应用十分方便),只需在安装屏幕要求您选择组件(components)时,加上该选项即可.当然,

利用ganymed-ssh2远程执行其它Linux机器上的shell命令

实际应用中,有时候需要从web管理界面上,远程去启动其它linux主机上的程序,利用ssh协议可以方便的满足这一需求.事实上hadoop架构中,从nn上启动dn时,就是利用了免密码ssh登录.ganymed-ssh2是一个实现了ssh协议的开源项目,项目地址为:http://ganymed-ssh-2.googlecode.com/ (下载源码要翻强,众所周知的原因),如果只是使用的话,pom.xml添加以下依赖项就行了: 1 <dependency> 2 <groupId>ch.

在Linux系统上实现IP转发的方法

  大家好,今天我们学习一下在 Linux 上用 iptables 实现从一个网络接口到另一个接口的IP转发(数据包转发).IP转发的概念是,使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络.所以,它能作为一个路由器或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器. 这是一些启用IP转发或网络包转发方法的简单步骤. 1. 启用 IPv4 转发 首先,我们需要在我们的 Linux 操作系统上启用 IPv4 转发.要做到这点,我们需要用 sudo 模式在 she

一台Linux或UNIX机器上设置多个DB2系统

在DB2 for Linux, UNIX,和Windows Version 8之前,SAP客户只能在一台物理机器上安装每个DB2 版本的一个拷贝,因为安装路径是硬编码的.尽管 DB2 Version 8 提供了替换的修订包映像,但是这些映像只用于测试,在生产环境中 SAP 不支持它们. 对于 DB2 9,客户可以在一台物理机器上安装多个 DB2 软件拷贝.数据库的安装是相互独立的.它们可以是不同级别的,可以安装在任何有效路径上.每个拷贝可以独立更新,而不会相互影响.所有装有 DB2 9 的 SA

linux操作系统 硬盘-硬盘里安装好的centos7放到别的机器上能正常工作吗?

问题描述 硬盘里安装好的centos7放到别的机器上能正常工作吗? 我有一个10年前的机器,想装个linux让他焕发青春,我把原本机器上的硬盘拆下来装到老机器上能用吗? 解决方案 10年前的比较难说.如果你的centos是x64的系统,而你的老机器是P4时代的电脑,CPU就不兼容. 解决方案二: 硬盘兼容的话, 可以的应该... 解决方案三: 工作环境搭建(1) - CentOS7虚拟机的最小化安装工作环境搭建(7) - CentOS7安装Jenkins(稳定版)

在一台Linux或UNIX机器上设置多个DB2系统

在 DB2 for Linux, UNIX, and Windows Version 8 之前,SAP 客户只能在一台物理机器上安装每个 DB2 版本的一个拷贝,因为http://www.aliyun.com/zixun/aggregation/17166.html">安装路径是硬编码的.尽管 DB2 Version 8 提供了替换的修订包映像,但是这些映像只用于测试,在生产环境中 SAP 不支持它们. 对于 DB2 9,客户可以在一台物理机器上安装多个 DB2 软件拷贝.数据库的安装是相

如何在Ubuntu和Linux Mint上启用桌面共享

桌面共享是指通过图形终端仿真器在计算机桌面上实现远程访问和远程协作的技术.桌面共享允许两个或多个连接到网络的计算机用户在不同位置对同一个文件进行操作. 在这篇文章中,我将向你展示如何在 Ubuntu 和 Linux Mint 中启用桌面共享,并展示一些重要的安全特性. 在 Ubuntu 和 Linux Mint 上启用桌面共享 1.在 Ubuntu Dash 或 Linux Mint 菜单中,像下面的截图这样搜索 desktop sharing,搜索到以后,打开它. 在 Ubuntu 中搜索 D

如何在 Ubuntu 和 Linux Mint 上启用桌面共享

桌面共享是指通过图形终端仿真器在计算机桌面上实现远程访问和远程协作的技术.桌面共享允许两个或多个连接到网络的计算机用户在不同位置对同一个文件进行操作. 在这篇文章中,我将向你展示如何在 Ubuntu 和 Linux Mint 中启用桌面共享,并展示一些重要的安全特性. 在 Ubuntu 和 Linux Mint 上启用桌面共享 1.在 Ubuntu Dash 或 Linux Mint 菜单中,像下面的截图这样搜索 desktop sharing,搜索到以后,打开它. 在 Ubuntu 中搜索 D

在 Linux x86 上安装 Oracle 数据库 10g_3

  启动 Oracle 通用安装程序. $ ./runInstaller 1.      欢迎 o        单击 Next. 2.      指定清单目录和证书 o        如果您一直在依循本指南中的步骤,则使用默认值即可.否则,编辑清单目录的路径,以指向正确目录. o        操作系统组名称应为 oinstall. 3.      如果这是首次在此机器上安装 Oracle,则您将收到一个弹出窗口,提示需要以 root 用户身份运行 orainstRoot.sh 脚本.以 ro