Linux 防火墙与NAT服务

防火墙与NAT服务器

Linux的防火墙主要透过Netfilter与TCPWrappers两个机制来管理的,其中Netfilter防火墙机制,可以让我们的私有IP的主机上网(IP分享器功能)

并且也能够让Internet连接到我们内部的私有IP所架设的Linux服务器(DNAT功能),网络安全除了随时注意软件的漏洞以及网络上的安全通报之外,最好能够

依据自己的环境来制定防火墙机制,透过一些有顺序的规则,并管制进入到我们网域内的主机(或者说是网域)数据封包的一种机制,广义的说,就是只能能够

分析与过滤进出我们管理之网域的封包数据,那就是防火墙

防火墙分为硬件防火墙与本机的软件防火墙,硬件防火墙是由厂商设计好的主机硬件,这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主

并将其他不必要的功能拿掉,软件防火墙本身就是在保护系统网络安全的一套软件(或称为机制),例如Netflter与TCP Wrappers都可以称为软件防火墙

反正防火墙就是用来保护我们网络安全的咚咚,Linux系统本身提供的软件防火墙的功能,那就是Netfilter,还有就是TCPWrappers

Netfilter这种封包过滤式的防火墙机制,会用到基础的封包与讯框的概念,例如MAC,IP,ICMP,TCP,UDP等封包表头数据的认识,以及

Network/Netmask的整体网域写法。

虽然Filter机制可以通过iptables指令的方式来进行规则的排序与修改,但是最好还是利用shell script来撰写属于自己的防火墙机制比较好,因为对于规则的排序

与汇整比较包的观察性,可以让防火墙规则比较清晰一点,再写之前需要对一些知识有所了解

已经认识Shell以及Shell script,网络基础知识,网络安全知识,路由器概念,最好拥有两部主机以上的小型局域网络环境,以方便测试,做好区域防火墙

的Linux主机最好有两张实体网卡,可以进行多种测试,并架设NAT服务器

封包进入主机时,会通过防火墙,服务器软件程序,SELinux与文件系统,如果你的系统(1)已经关闭不需要而且危险的服务,(2)已经将整个系统的所有软件都保持在最新的状态

(3)权限设定妥当而且定时进行备份工作 (4) 已经教育用户具有良好的网络,系统操作习惯,那么你的系统实际上已经颇有安全了,最后要不要架设防火墙就要看你自己了

不过,万一哪一天你在进行某个服务的测试时,主机突然就启动了一个网络服务,如果没有管制该服务的使用范围,那么该服务就等于对所有Internet开放,那就麻烦了

因为该服务可能可以允许任何人登录你的系统,那就危险了。

那么防火墙最大的功能就是帮助你【限制某些服务的存取来源】,例如:(1) 你可以限制文件传输服务(FTP)只能在子域内的主机才能够使用,而不对整个Internet开放

(2) 你可以限制整部Linux主机仅可以接受客户端的WWW要求,其他的服务予以关闭 (3) 还可以限制整部主机仅能主动对外联机,反之,若有客户端对我们

的主机发送主动联机的封包状态(TCP 封包的SYN flag)就予以抵挡等等,这些就是最重要的防火墙功能了

防火墙最重要的任务就是在规划出:

1.切割被信任(如子域)与不被信任(如Internet)的网段;

2.划分出可提供Internet的服务与必须受保护的服务;

3.分析出可接受与不可接受的封包状态;

当然Linux的iptables防火墙软件还可以进行更细部深入的NAT的设定,并进行更弹性的IP封包伪装功能,不过,不过对于单一主机的防火墙来说

最简单的任务就是上面的那三项,架设防火墙时你必须要知道那些数据与服务需要保护,针对需要受保护的服务来设定防火墙的规则,那在Linux上头常见的防火墙类型有哪

些? 系统上防火墙的主要类别:基本上依据防火墙管理的范围,可以将防火墙分为网域型与单一主机型的控管,在单一主机型的控管方面,主要的防火墙有封包

过滤型的Netfilter与依据服务软件程序作为分析的TCP Wrappers两种,若为区域型的防火墙,由于此防火墙都是当作路由器的角色,因此防火墙类型主要有

封包过滤的Netfilter与利用代理服务器(proxy server)进行存取代理的方式

Netfilter (封包过滤机制)

所谓封包过滤,亦即是分析进入主机的网络封包,将封包的表头数据捉出来进行分析,以决定该联机为放行或抵挡的机制,由于这种方式可以直接分析封包表头数据,包括

硬件地址(MAC), 软件地址 (IP), TCP, UDP, ICMP 等封包的信息都可以进行过滤分析的功能,因此用途广泛(其主要分析的是OSI七层协议的2,3,4层),在Linux上面使用

核心内建的Netfilter这个机制,而Netfilter提供了ipbtales这个软件来作为防火墙封包过滤的指令,由于Netfilter是核心内建的功能,因此他的效率非常的高,非常适合于一般

小型环境的设定,Netfilter利用一些封包过滤的规则设定,来定义出什么资料可以接受,什么资料需要剔除,以达到保护主机的目的

TCP Wrappers(程序控管)

另一种抵挡分包进入的方法,为透过服务器程序的外挂(tcpd)来处置的,与封包过滤不同的是,他主要分析谁对某程序进行存取,然后透过规则去分析该服务器程序谁能够联机

,谁不能联机,由于主要是分析服务器程序来控管,因此与启动的端口无关,只与程序的名称有关,例如FTP启动在21端口进行监听,当你透过Linux内建的TCP Wrappers

限制FTP时,那么你只要知道FTP的软件名称(vsftpd),然后对他作限制,则不管FTP启动在哪个端口,都会被该规则管理的

Proxy (代理服务器)

其实代理服务器是一种网络服务,他可以代理用户的需求,而代为前往服务器取得相关的资料:

1.client 会向 proxy server 要求数据,请 proxy 帮忙处理;

2.proxy 可以分析使用者 IP 来源是否合法?使用者想要去Google 服务器是否合法? 如果这个 client 的要求都合法的话,那么proxy 就会主动的帮忙 client 前往 Google 取得资料

3.Google 所回传的数据是传给 proxy server 的,所以Google服务器上面看到的是proxy server的IP

4.最后proxy将Google回传的数据送给client

其实client并没有直接链接上internet,只要proxy与Client可以联机就可以了,此时client甚至不需要拥有public IP,而当有人想要攻击client端的主机,除非他能攻破proxy

server ,否则是无法与client联机的,一般proxy主机开放port 80, 21, 20 等 WWW 与 FTP 的埠口而已,而且通常Proxy就架设在路由器上面,因此可以完整的掌握局域网

内的对外联机,让你的LAN变的更安全,有兴趣可以参考一下squid这个软件服务

防火墙的布线:前面提到防火墙除了可以保护防火墙机制本身所在的那部主机之外,还可已保护防火墙后面的主机,也就是说,防火墙除了可以防备本机被入侵外,还可以

架设在路由器上面控管进出本地端网域的网络封包,这种规划对于内部私有网域的安全也有一定程度的保护作用:目前常见的防火墙与网络布线的配置:

单一网域,仅有一个路由器:

防火墙可以作为Linux本机的基本保护之外,还可以架设在路由器上面以控管整个局域网络的封包进出,因此这类的防火墙上面通常至少需要两个接口,将可信任的内部与

不可以信任的Internet分开,所以设定两块网络接口的防火墙规则,只要管理一部主机就能够造福整个LAN里面的PC,很划算,如果想要将局域网络控管的更严格的话,可以

在这部Linux防火墙上面架设更严格的代理服务器,让客户端仅能连上你所开放的WWW服务器而已,而且还可以透过代理服务器的登录文件分析功能,明确的查处来那个使用

者在某个时间点曾经连上哪些WWW服务器,如果在防火墙上面再加装类似MRTG的流量控制软件,还能针对整个网域的流量进行监测,这样配置的优点:

1. 内外网域已经分开,所以安全维护在内部可以开放的权限较大。

2.安全机制的设定可以针对LInux防火墙主机来维护即可。

3.对外只看的到Linux防火墙主机,所以对于内部可以达到有效的安全防护

内部网络包含安全性更高的子网,需内部防火墙切开子网:

一般来说,我们的防火墙对于LAN的防备都不会设定的很严格,因此是我们自己的LAN,所以是信任网域之一,不过,最常听到的入侵方法也是使用这样的一个信任漏洞,因为

你不能保证所有使用企业内部计算机的用户都是公司的员工,也不能保证员工不会搞破坏,更多时候是由于某些外来访客利用用笔记本电脑连接到公司内部网络来加以窃取

企业内部的重要信息,所以,将特别重要的部门需要更安全的保护网络环境,那么将LAN里面再加设一个防火墙,将安全等级分类,那么将会让你的重要数据获得更佳的保护

在防火墙的后面假设网络服务器主机

将提供网络服务的服务器放在防火墙后面,好处:WEB,MAIL与FTP都是透过防火墙连到Internet上面去,在internet上面的Public IP都是一样的(这个观念会在底下de NAT

服务器的时候再次的强调),只是透过防火墙的封包分析后,将WWW的要求封包送到WEB主机,将MAIL送给MAIL Server去处理而已(透过端口的不同来传递),因为这几部

服务器在Internet上面看到的IP相同,但是事实上却是不同的主机,当有攻击者想要入侵你的FTP主机时,他使用各种分析方法去进攻的主机其实是防火墙那一部主机,攻击者

想要攻击内部的服务器主机,除了他能成功的搞定你的防火墙,否则很难入侵你的内部主机

而且,由于主机放置在两部防火墙中间,内部网络发生状况时,是不会影响到网络服务器的正常工作的,这种方式适用与比较大型的企业当中,对企业来说,网络主机能否提供

正常稳定的服务是很重要的。不过,这种架构下所进行的设定就得包含端口的转递,而且要有很强的网络逻辑概念,可以理清封包双向沟通时的流动方式,

将网络服务器独立放置在两个防火墙中间的网络,我们称为非军事区域 (DMZ),DMZ的目的就是保护服务器本身,所以将Internet与LAN都隔离开来,如此一来不论是服务器

本身,或者LAN被攻陷,另一个区块还是完好无缺的。

防火墙的使用限制

我们知道防火墙主要在分析OSI七层协议当中的2,3,4层,既然如此,Linux的Netfilter机制到底做了些什么事情?其实可以进行的分析工作主要有:

拒绝让Internet的封包进入主机的某些端口:例如你的port 21这个FTP相关端口,若只想要开放给内部网络的话,那么当Internet来的封包想要进入你的port 21时,就可以将

该数据封包丢掉,因此我们可以分析的到该封包表头的端口号码

拒绝让某些来源IP的封包进入:例如你已经发现某个IP主要都是来自攻击行为的主机,那么只要将来自该IP的数据封包,将他丢弃,可以达到基础的安全

拒绝让带有某些特殊旗标(flag) 的封包进入:最常拒绝的就是带有SYN的主动联机的旗标,只要一经发现,就可以将该封包丢弃

分析硬件地址 (MAC) 来决定联机与否:如果你使用IP抵挡攻击者时,他会更换一个IP,此时就需要死锁他的网络卡硬件地址,因为MAC是焊在网络卡上面的,所以你只要分析

到该使用者使用的MAC之后,可以利用防火墙将该MAC锁住,除非他能够一换再换他的网络卡来取得新的MAC,否则换IP是没有用的

虽然 Netfilter 防火墙已经可以做到这么多的事情,不过,还是有很多事情没有办法透过Netfilter来完成,防火墙虽然可以防止不受欢迎的封包进入我们的网络中,不过,某些

情况下,他并不能保证我们的网络一定就很安全,例如:

防火器并不能很有效的抵挡病毒或木马程序:假设你开放了WWW的服务,那么你的WWW主机上面,防火墙一定得要将WWW服务的port开放给client端登录才行,否则WWW

主机设定等于没有,也就是说:只要进入你的主机的封包是WWW数据的,就可以通过你的防火墙,万一你的WWW服务器软件有漏洞,或者本身向你要求WWW服务的封包

就是病毒在侦测你的系统时,你的防火墙一点办法也没有,因为本来设定的规则就是会让他通过的

防火墙对于内部LAN的攻击较无承受力:我们对于LAN里面的主机没有什么防火墙的设定,因为是自己的LAN,当然设定为信任网域了,不过,LAN里面总是可能有些网络

破坏者,这个时候就很糟糕,因为防火墙对于内部的规则设定通常比较少,所以就容易造成内部员工对于网络误用或滥用的情况

所以在你的 Linux 主机实地上网之前,还是得先: 关闭几个不安全的服务,升级几个可能有问题的套件,架设好最起码的安全保护--防火墙--

TCP Wrappers

TCP Wrappers是透过客户端想要链接的程序文件名,然后分析客户端IP,看看是否放行的,哪些程序支持 TCP wrappers 的功能,TCP Wrappers如何设定:

TCP wrappers 就是透过 /etc/hosts.allow, /etc/hosts.deny 这两个文件来管理一个类似防火墙的机制,但并非所有的软件都可以透过这两个档案来控管,只有底下的软件才

能够透过这两个档案来管理防火墙规则,分别是:

由 super daemon (xinetd) 所管理的服务;经由xinted管理的服务,配置文件在/etc/xinted.d/里面的服务就是xinted所管理的,通过chkconfig xinetd on来查看xinetd下的服务

有支援 libwrap.so 模块的服务,查看rsyslogd, sshd, xinetd, httpd这四个程rsyslogd, sshd, xinetd, httpd

序有没有支持tcp wrappers的抵挡功能?

由于支持tcp wrappers的服务必定包含libwrap这个动态函式库,因此可以使用ldd来观察该服务即可,使用方式:

ldd $(which rsyslogd sshd xinetd httpd)这个方式可以将所有的动态函式库取出来查阅

for name in rsyslogd sshd xinetd httpd;  do echo $name;  ldd $(which $name) | grep libwrap; done 透过这个方式来处理更快更直观

上述的结果中,在该档名下有出现libwrap的,代表有找到该函式库,才有支持tcp wrappers ,所以sshd xinetd有支持,但是rsyslogd,httpd这两支程序

则不支持,也就是说,httpd与rsyslogd不能够使用/etc/hosts.{allow|deny}来进行防火墙机制的控管

/etc/hosts.{allow|deny} 的设定方式

那如何透过这两个档案来抵挡有问题的IP来源? 这两个档案的语法都一样:

service(program_name)              IP, domain, hostname                

服务(亦即程序名称)                   IP 或领域 或主机名

之前说过Netfilter的规则是有顺序的,那么这两个档案与规则的顺序优先是如何的? 基本上如下:

先以 /etc/hosts.allow 为优先比对,该规则符合就予以放行;

再以 /etc/hosts.deny 比对,规则符合就予以抵挡;

若不在这两个档案内,亦即规则都不符合,最终则予以放行。

例题:先开放本机的127.0.0.1可以进行任何本机的服务,然后,让区网(192.168.1.0/24) 可以使用 rsync,同时 10.0.0.100 也能够使用 rsync

,但是其他来源则不允许使用rsync的,我们先要知道rsync的服务启动的档名为何,因为tcp wrappers是透过启动服务的档名来管理的,当我们观察rsync的配置文件时

cat /etc/xinetd.d/rsyn

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值