网络通信 频道

认识网络安全与 iptables 、TCP_Wrappers

TCP/IP 封包进入主机的基本流程:

  好啦!这一章的主要内容是在介绍网络安全与基础防护方面的之事与建议,那么这里就要来讨论一下,嘿嘿!当有一个 TCP/IP 的封包要进入你的系统时,应该会经过哪些关卡呢!?知道这些关卡之后,才会知道有哪些入侵的管道呀!然后才能知道如何去防御他!OK!那么首先自然就要来了解一下,什么是 TCP/IP 啰!

· 认识 TCP/IP:

  由 网络基础 里头我们可以知道目前的网络联机协议以 TCP/IP 为主要的架构,其中:

o 主机的 IP 可以当成是地址;

o 而主机激活的 port 可以想成是窗口或楼层;

o 至于在两个 IP 之间传送资料的 TCP 封包则可以被想成是包裹。

好了,既然 TCP 是个包裹,那么想当然尔,真正的资料是在包裹里面的 Messages/Data ,但是由于要将包裹传送到最正确的地点去,所以就有个表头,亦即在包裹不是都需要有填写资料的那一面吗?在这一面上面必须要填写正确的来源与目的之地址以及该地址的楼层,才能够正确的将这个包裹传送到正确的地方!当然啰,由于可能会收到回信,所以自然那个包裹上面,寄信的地址与楼层也需要填写正确啰!^_^。所以呢,你可以简单的将 TCP 封包想成有两个主要的地方,一个是放置资料的 Messages/Data ,另一个则是表头( Header )资料填写区,在这个 Header 区域中,有相当多的资料,这里不谈怎么去认识所有的 TCP/IP 架构资料,仅提出最重要的两个信息,那就是来源与目的之 IP 及传送的 port !基本的 TCP 封包可以由下图来表示啰。



  由上图我们可以清楚的发现到,你的主机能不能接收这个 TCP 封包,就需要合乎 TCP 封包的 IP 与 port 的规定啰!

· 简易 TCP/IP 进入主机之流程:

  好了,现在我们知道主机收不收的到资料跟 TCP 上面的表头资料( Header )是有关系的!那么假如这个 TCP 封包已经正确的送到你的主机上面了呢?你的主机要怎样来接收这个 TCP 封包?基本上,由 Linux 主机的一些基本设定项目,可以将整个程序简化成如下图:




1. 首先, TCP 封包会先经过所谓的 IP 过滤机制( IP Filtering ),这是 Linux 提供的第一层保护,他可以将你不想要的来源 IP (经由 TCP 封包的 Head 资料)先挡掉再说!如果可以通过的话,就进入下一关;

2. 再来则是 Super daemons 及 TCP_Wrappers 的功能啰!他可以将经过 IP filter 的封包资料再加以进一步的分析滤除;

3. 经过了上两道基本的防火设施之后,在接下来则是每一项服务的个别设定功能!举例来说,如果是以 FTP 联机的话,那么在 ftp 的设定档案当中,可能会经由 PAM 模块( 未来在网络安全当中会提及)来抵挡特殊的 users ,当然也会以特别的设定来抵挡某些 TCP 封包!另外,以 WWW 来看,在 httpd.conf 里头也有类似的 deny 功能呦!

4. 假使上面的几道火墙都通过了,那么才能进入主机来登入!此时,一经登入就会被系统记录在『登录文件』当中,藉以了解主机的历史历程!

  OK!那么底下我们就经由这一串流程来讨论一下,该如何抵挡有问题的 TCP 封包呢?

· 封包过滤( IP Filter ):

  封包过滤是 Linux 提供的第一道防火墙呦!但是不同的核心版本会有不一样的封包过滤机制!以 2.2.xx 为核心的 Linux 主要以 ipchains 作为过滤机制,至于目前新版的 2.4.xx 则以 iptables 为机制!OK!既然我们的 Red Hat 7.1, 7.2, 7.3 为 kernel 2.4.xx ,所以自然以 iptables 来进行 IP 抵挡的工作啦!那么由于 TCP 封包里头有 IP 及 port 嘛!所以要抵挡来源 IP 或者是自身的 port ,嘿嘿!自然就很容易来进行啦!您目前只要晓得, iptables 可以经由 TCP 的封包表投资料来进行分析的工作,并设定『特殊动作』,例如:符合我们 iptables 的设定规则,就让他可以经过防火墙,若是该 TCP 封包在我们的不欢迎 IP 的行列,那就将他丢弃,他就没有办法进入 Linux 主机啦!

· Super daemons 与 TCP_Wrappers:


  Red Hat 7.x 以后的 super daemons 则是以 xinet 为主,至于抵挡封包的工作则可以让 TCP_Wrappers 来进行!Wrappers 是垃圾、废弃物的含意,那么 TCP_Wrappers 自然就是『 TCP 的丢弃者 』嘿嘿!没错,他可以丢弃 TCP 的封包啊!利用每个服务的特色,来将 TCP 封包抵挡,这个 TCP_Wrappers 主要以『 服务 』为主的抵挡方针,例如 FTP, Telnet, SSH 都可以经由他来进行 IP 分析的动作呦!

· 服务过滤:

  每个服务还有特别的自订的防火机制,例如 Apache 这个 WWW 的套件里头,就含有『 deny from IP 』来抵挡某些不受欢迎的 IP 机制,而 ssh 也可以在设定档里头决定是否要开放 root 的登入权限!FTP 当然也可以制定一些规则来挡掉不受欢迎的 IP 啦!不过,到这一步时,该封包已经进入主机的服务之内啰,是经由服务来关闭该 IP 的联机的呦!而由于某些服务天生就有些小漏洞,呵呵, Cracker 相当的容易利用这些漏洞来进行破坏的行为!由于该封包已经进入主机了,万一服务真的有漏洞,那可就惨了......

· 登入主机:

  上面提到的大多是在某些服务里头来取用我们主机系统的资源,那么如果该封包是想要直接登入我们的主机呢( login )?这个时候就需要取得我们主机的『帐号与密码』的权限啦!如果通过 ID & pass word 的验证之后,就可以进入我们的主机啦!

· 登录文件记录:

  『为了防止世界的破坏.....』喔!不!那个是皮卡丘的里头坏人的台词....这里要谈的是,『为了防止主机的破坏....可爱又迷人的角色...』那就是 登录档 啦!为了记录历史历程,以方便管理者在未来的错误查询与入侵侦测,良好的分析登录档的习惯是一定要建立的,尤其是 /var/log/messages 与 /var/log/secure 这些个档案!

 


----------------------------------------------------------------------------------

主机防护 A 计画:


  在网络上面( 尤其是 BBS )最常听到的就是这样的哀嚎声音:『阿!!救命哪!我被入侵了!要怎么办?』真是伤脑筋的很!我也不知道要怎么帮助你呢!因为这真是......『自作自受』吶!一些老人家常常在讲,架设一个『网站』很容易,因为目前的线上教学实在是太多了,市面上的『教战手册』之类的书籍也真是多如过江之鲫,然而,大家都只知道『我要架设网站』却不知到『我要架设的是一个安全的网站』,这就是我们老人家的心声哪!因为『架设一个安全的网站,真的很难....』!其中,维护的心力更难哪!为什么呢?由上面的 TCP/IP 的封包路线图,我们可以发现,嘿嘿!目前的入侵你的主机的管道实在是太多了!而一个良好的防火系统又不是只要上述的其中一层就可以做好的!而是复合式的整体规划,并且要『持续不断的』监测你的主机系统,才能够较为完善的保护好你的主机呢!唉~还真是不容易吶!底下我们来谈一谈,如果由主机内部到外部来规划,要怎样来加强主机的安全性呢?

1. 建立完善的登入密码规则限制:

  要做好主机的防护,第一步就是要建立完善的密码规则啦!因为这个咚咚常常是 cracker 尝试入侵的第一步!你必须要建立好主机的密码规则,请参考 帐号管理 那一篇文章,里头提到的 /etc/shadow 档案格式,还有 /etc/login.defs 这个档案的内容,以及未来会再提到的 PAM 模块,都是相当重要的密码规则订定的所在!另外,可以尝试以 chattr 来将 /etc/passwd 及 /etc/shadow 做成不可变更的档案!较为安全啦!
 
2. 升级与修补套件漏洞、及移除危险套件:

  这个真的相当的重要的!那就是因为你的服务套件的安全性啦!例如有名的 wu-ftpd 这个 ftp 套件,被说了很多次,好象不怎么安全哩!那么就好就不要激活他,或者是虽然激活,但是限制他的使用网域,这样最起码可以达到一点保护的效果!此外,定时的升级与不定时上网查看危险通告,是很重要的态度呢!
 
3. 每项系统服务的安全设定项目:

  举个例子来说, ftp 就不要让 root 登入嘛!而 SSH 也可以考虑不开放 root 登入才好呢!这些都是基础的安全设定项目说!要好好爱护自己的主机呦!
 
4. TCP_Wrappers 的基础防火设定:

  再来则是 TCP_Wrappers 的咚咚啦!请针对你的需求来订定规则啦!这是最起码的防火墙安全!尤其是开启了 FTP, Telnet 的朋友,要更小心在意这个咚咚,此外,他也可以用来记录尝试入侵我们主机的 IP 地址呦!
 
5. iptables 的防火规则设定:

  这个是 Linux 核心支持的工作咯!可以利用一行一行的规则订定,来设定防火墙的安全规则,如此则可以抵挡掉大部分的不受欢迎的 TCP 封包啰!
 
6. 主机资源侦测系统( MRTG ):

  当主机受到不明原因的攻击时,通常会有一些端倪可以瞧出来,例如最明显的是 CPU 的 loading 会飙到 90 ~ 100% 左右!还有,当有内部无聊人士在大量下载资料时,网络流量频宽被他占光了!这个时候主机的资源侦测系统就显的重要了,我们也可以用简易的 snmp 配合 MRTG 来捉取资料,以实时的角度来观察主机的现况!
 
7. 登录档案分析系统:

  还是要再说一遍,登录档的良好的分析习惯,对于系统管理员来说,是真的很重要的一件事情!

 


------------------------------------------------------------------------------------------------

防火墙:

  我想,你应该常常会听到防火墙这个东西吧!他是什么咚咚呀!?刚刚上面也提到很多了,所以你可以约略的了解到『防火墙的功能就在于杜绝一些不受欢迎的 TCP 封包,并进而保障主机或者是主机内部网域的安全』,那么既然要杜绝一些不受欢迎的封包,则最少就有两种基本的方式啦,一种是利用代理服务器,将所有可行的协议限制的很少很少,并且由于内部与外部计算机的 IP 并不能互通,而达到良好的保护效果;另一种则是上面提到的 IP fileter 啦!利用封包过滤的方式来达到防火墙的目的!

· Proxy :

  这是属于网络『应用层』的咚咚了,这个 Proxy ( 代理服务器 ) 基本上就是一种『服务』喔!他的功能可以如下图来表示:



  当 Client 有要求的时候, Proxy Server 会帮 Client 去外面捉取资料,然后再将资料丢回给 Client 端!请注意,此时真正出去 Internet 的,其实是 Proxy Server ,而不是 Client 端呦!( 这个跟 NAT 并不一样,会在下一章 NAT主机设定时再提到。) 由于 Client 端并不是直接出去,加上 Proxy Server 一般仅开放 80 及 21, 20 port 而已,因此可以较为安全!相对的,对于 Client 端的限制自然就较多了!

· IP fileter :

  直接以 IP filter 例如 iptables 来进行封包的过滤!这个时候会由 TCP 的 header 分析起来,再决定是否可以让该 TCP 封包进入主机。这个时候, iptables 的『规则』就显的很重要啦!

  底下我们先不谈 Proxy 这个东西,仅来分析一下最基础的两个防火墙设备,一个是 iptables ,另一个则是 TCP_Wrappers !

 


------------------------------------------------------------------------------------------------

iptables:

  iptables 是 Linux Kernel 2.4.xx 版本以上的主要 IP 过滤机制!他最大的功能就是可以过滤掉不要的 TCP 封包啦!当然功能还不止于此,他还可以用来进行 IP 伪装,以达成 NAT 的主机功能呢! iptables 的工作方向,必须要依规则的顺序来分析,底下我们简单的谈一谈 iptables 的几个概念吧:

· 有几个 tables :

  跟之前版本的 ipchains 不同的地方是, iptables 可以自行定义一些 tables 的新规定!将可以让防火墙规则变的更为便于管理呢!基本上,原本的 iptable 至少有两个 table ,一个是 filter ( 预设的,没有填写 tables 时,就是 filter 这个 table 啦 ),一个则是相当重要的 nat table 。其中, filter 可以用来管理主机的安全,至于 nat 则是用来处理 NAT 的功能啦!

· 清除规则:

  iptables 的订定方法其实很简单,就是使用指令列的方式来订定而已,他的基础语法在清除规则时,是这样的:



定义政策( Policy ):

  清除规则之后,再接下来就是要设定规则的政策啦!这个所谓的政策指的是『当你的封包不在你的规则之内时,则该封包的通过与否,以 Policy 的设定为准』,例如:你设定了十条规则,但有一个封包来的时候,这十条规则都不适用,这个时候此一封包就会依据 Policy 的规定为准,来决定是否可以通过防火墙啰。通常这个政策在 INPUT 方面可以定义的比较严格一点,而 FORWARD 与 OUTPUT 则可以订定的松一些?



增加、插入规则:

  接下来则要定义规则啦!我们底下先完全以主机的角度来观察!可以这样来设定啦?




  请注意:防火墙的规则是『一行一行依序来检查的,若符合任何一条规则,则予以动作(接受或丢弃),否则继续往下检查到最后一条』上面的范例只是一些小规则而已!不要太紧张!后面还会再提到呦!

------------------------------------------------------------------------------------------------

TCP_Wrappers:

  这个 TCP_Wrappers 实在是很简单的一个设定工作,因为他只要设定 /etc/hosts.allow 及 /etc/hosts.deny 就可以啦!基本上,他是经由 /usr/sbin/tcpd 这个程序来进行 TCP 的检验工作!而检验的方式则是以 /etc/hosts.allow 及 /etc/hosts.deny 来设定的啦!检验的流程是先以 /etc/hosts.allow 这个档案,检验完之后,在到 /etc/hosts.deny 去搜寻!好了,那么 hosts.allow 要怎样设定呢?



  大致上就是这样,其它的相关技巧,我们会在后续在持续的说明呦!

0
相关文章