论坛风格切换切换到宽版
  • 2009阅读
  • 2回复

[问题求助]Linux 防火墙与 NAT 主机(轉自鸟哥的 Linux 私房菜) [复制链接]

上一主题 下一主题
离线5842136.
 
发帖
2262
C币
-192932
威望
414
贡献值
1
银元
-2
铜钱
5064
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
推荐鳥哥站點 http://linux.vbird.org/教育


鸟哥的 Linux 私房菜

     
Linux. 防火墙与 NAT 主机    健康


在谈完了基本的网路安全观念之后,这个章.节主要就要针对『防火墙』来进行介绍了!目前的防.火墙机制主要是以 .Linux Kernel 2.6 版的 iptables 為主的,而 iptables 可以使.用指令来下达.,也可以透过编写 shell script 来进行指令的整合。鸟哥本人比较习惯使用 scripts 来进行 iptables 的机制规划呢!除了 iptables 之外,事实上,比较简单的还有 TCP Wrappers 这个玩意儿,他则主要是针对某些服务来进行管理的吶!.本章的内容主要就是在介绍这两个重要的防火墙软体了!  .


1. 本章的行前準备工作
2. 认识防火墙
  2.1 為何需要防火墙
  2..2 Linux 系统上防火墙的主要类别.
 . 2.3 防火墙的一般线路佈线与抵挡技巧           鲜花
  2.4 防火墙的使用限制
3. Linux 的封包过滤.机制: ipta.bles.
  3.1 不同 Li.nux 核心版本的防火墙软体              乙肝
  3.2 iptables 的表.格与封包进入流程    健康
  3.3 本机的 ipt.ables 语法--- 印刷
    规则的清除与观察
    定义预设政策. (policy).
    封包的基础.比对. IP/netmask I/O 装置.
    TCP, .UDP 的规则比对           建材
    状态模组:M.AC 与 RELATED(广告)
    ICMP 封包规则的.比对电脑
  3.4 防火.墙的记录、回復与测试学习
  3.5 IPv4 的核心管理功能:/proc/sys/n.et/ipv4/.*              乙肝
4. 本机防火墙的一个实例
  4.1 规则草拟
  4.2 实际设定
5. NAT 主机的设定
 . 5..1 什麼是 NAT? SNAT? DNAT?教育
  5.2 最阳春 NAT 主机.: IP 分享功能.
  5.3 iptables .的额外核心模组功能.
  5.4 在.防火墙后端之网路伺服器 DNAT 设定.(广告)
6. 重点回顾
7. 课后练习
8. 参考资料
9. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?p=114475域名


----.----.---------------------------------------------------------------------.---[成人用品]
本章的行前準备工作

由於这个章节裡面谈.到非常多的封.包概念,包括 MAC, IP, TCP., UDP, ICMP 等协定, 以及如何抵挡外部 IP 来源的防火墙基础,还有 IP./netmask 的整体网域写法等等。 而鸟哥对於您学习防火墙的建议是希望你可以使用 shell s.cript 来撰写脚本,如此一来可以让你的防火墙规则比较清晰一点。所以在您开始瞭解底下的资料之前, 希望你可以先阅读过相关的资料了:.

已经认识 Shell 以及 S.hell .script; 电脑
已经阅读过网路基础那一个章节的内容; .           女人
已经阅读过前一.篇认识网路安全; 服务器
已.经阅读过 路由器.那一章节的内容,瞭解路由的概念;           婚庆
最好拥有两部主机以上的小型区域网路环境,以方.便测试防火墙.; .
Lin..ux 主机上最好有两张网卡,可以进行多种测试,并架设 NAT 主机; 教育
使用 uname -r 确.认你的.核心是 2.4 或 2.6 版; 电影
若準备妥当了.,赶紧来开始进行吧!域名



-----------------------------.----------.---.--------------------------------------.
认识防火墙

网路安全除了随时注意套件的漏洞,以及网路上的安全通报之外,你最好能够依据自己的环境来订.定防火墙机制, 这样对於你的网路环境,会比较有保障一点喔!那麼什麼是防火墙呢? 其实防火墙就是在管制进入到我们网域内的主机(或者可以说是网域)的资料封包的一种机.制, 例.如我们在前一章节认识网路安全当中提到的 iptables 就是.一种防火墙机制了。当然了,更广义的来说, 只要能够分析与过滤进出我们管理之网.域的封包资料,就可以称為防火墙。              乙肝

而这个防.火墙又可以分為硬体防火墙与本机.的软体防火墙。硬体防火墙是由厂商设计好的主机硬体, 这部硬体防火墙内的作业系统主要以提供封包资料的过滤.机制為主,并将其他的功.能拿掉。因為单纯作為防火墙功能而已, 因此封包过滤的速度与效率较佳。至於软体防火墙呢?那就是我们这个章节要来谈论的啊! 软体防火墙本身就是在保护系统网路安全的.一套软体(或称為机制),例如 iptables 与 TCP Wrappers 都可以称為软体防火墙。.

无论怎麼分,反正防火墙就是用来保护.我们网路安全的咚咚就对啦!呵呵!我们这个章节主要在介绍 Lin.ux 系统本身提供的软体防火墙的功能,那就是 iptables 。至於 TCP Wrappers 请前往.基础篇的 认识系统服务 参考参考喔!教育


--------------------------.------------.---.---------------------------------------域名
為何需要防火墙

基本上,如果你的系统 (1)已经关闭不需要而且危险的服务; (2.)已经将整个系统的所有套件都保持在最新的状态; (3)权限设定妥.当且定时进行备份工作; (4)已经教育使用者具有良好的网路、系统操作习惯。 那麼你的系统实际上已经颇為安全.了!要不要架设防火.墙?那就见仁见智囉!    健康

不.过,毕竟网路的世界是很复杂的,而 Linux 主机也不是一个简单的东西, .说不定哪一天你在进行某个软体的测试时,主机突然间就啟动了一个网路服务, 如果你没.有管制该服务的使用范围,那麼该服务就等於对所有 Internet 开放,. 那就麻烦了!因為该服务可能可以允许任何人登入你的系统,那不是挺危险?域名

所以囉,防火墙能作什麼呢?防火墙最大的功能就是帮助你.『限制某些服务的存取来源』!. 举例来说: (1)你可以限制档.案传输服务 (FTP) 只在子网域内的主机才能够使用,而不对整个 Internet 开放; (2)你可以限制整部 Linux 主机仅可以接受客户端的 WWW 要求,其他的服务都关闭;. (3)你还可以.限制整部主机仅能主动对外连线,对我们主机主动连线的封包状态 (TCP 封包的 SYN flag) 就予以抵挡等等.。 这些就是最主要的防火墙功能了!.

所以鸟哥.认為,防火墙最重要的任务就是在规划出:教育

切割被信任(如子网域).与不被信.任(如 Internet)的网段;              汽车
划分出可提供 I.nternet 的服务与必.须受保护的服务; .
分析出.可接受与不可接受的封包状态; .
当然啦,咱们 Linux 的 iptables .防火墙软体还可以进行更细部深入的 NAT (Network Ad.dress Translation) 的设定,并进行更弹性.的 .IP 封包偽装功能,不过,对於单一主机的防火墙来说, 最简单的任务还是上面那三项就是了!所以,你需不需要防火墙呢?理论.上,当然需要! 而且你必须.要知道『你的系统哪些资料与服务需要保护』,针对需要受保护的服务来设定防火墙的规则吧! 底下我们先来谈一谈,那在 Linux 上头常见的防火墙类型有哪些?服务器



----------------------.---.-----------------------.--------------------------------[成人用品]
Linux 系统上防火墙的主要类.别[成人用品]

除了以软体及硬体作為防火墙的分类之外,我们也可以使用 防火墙.对於资料封包的取.得方式来进行分类。主要可以分為两大类, 分别是代理伺服器 (Prox.y) 以及 IP Filter。在代理伺服器方面, 由名称我们就可以知道,代理伺服器仅是代理 Client 端去向 Internet 要求资料,所以 Proxy 其实已经将可代理的协定限制的很少很少,并且由於内部与.外部电脑的并不能直接互通, 所以可以达到良好的保.护效果;另一种则是上面提到的 IP. fileter 啦!利用封包过滤的方式来达到防火墙的目的!    美容


---------------.-----------------------------.---------.---------------------------.

IP filter (封.包过滤机制)             汽车

直接使用进入本机的 T.CP/IP 上面的封.包协.定来进行过滤分析,例如利用 TCP/IP 封包表头的 IP 来源、 Port number 等资料进行过滤,以判断该封包是否能够进入本机取得本机资源。由於这种方式可以直接分析最底层的封包表头资料, 所以包括硬体位址(MAC), 软体位址 (IP), TCP, UDP, ICMP 等封包的资讯.都可以进行过滤分析的功能, 因此用途.非常的广泛。           建材

在. Linux 上面我们使用核心内建的 iptables 软体来作為防火墙封包过滤的机制, 由於 iptables 是核心内建的功能,因.此他的效率非常的.高!非常适合.於一般小型环境的设定呢! 他利用一些封包过滤的规则设定,来定义出什麼资料可以接收,什麼资料需要剔除,以达到保护主机的目的喔! --- 印刷



------------------------------------------------------------.---------.----.-------.

Proxy (代理伺服器)

其实代理伺服.器是一种网路服务 (servic.e, daemon),他可以『代理』使用者的需求,. 而代為前往伺服器取得相关的资料。就有点像底下这个图示吧:             汽车



图一、Proxy Ser.ver 的运作原理简介.

http://upload.bbs.csuboy.com/Mon_1004/126_7012_186a98ee0011349.png[/img]--------------彩票

以上图為例,当 Client 端想.要前往 Internet 取得 WWW 的资料时,他.取得资料的流程是这样的:            杀毒

他会向 proxy serve.r 要.求资料,请 proxy 帮忙处理; <性病>
Proxy 可以分析使用者的 IP 来源是否合法?使用者想要去的 WWW 伺服器是否合法? 如果这个 client 的要求都.合法的话,那麼 Proxy 就会主动的帮忙 c.lient 前往 WW.W 伺服器取得资料; 外贸
Internet 所回传的资料是传给 P.roxy server 的喔,.所以 WWW 伺服器上面看到的是 Proxy Server 的 IP 囉; <性病>
最后 Proxy 将. cl.ient 的要求传回给 client。 (        游戏          )
这样瞭解了吗?没错, client 并没有直接连上 Internet. ,所以在实线部分(步骤 1, 4)只要 Proxy 与 Client 可以连线就可以了!此时 client 甚至不需要拥有 public .IP 哩!而当有人想要攻击 cl.ient 端的主机时, 除非他能够攻破 Proxy server ,否则是无法与. client 连线的啦!学习

另外,一般 proxy 主机通常仅开放 port. 80, 21, 20 等 WWW 与 FTP 的埠口而已, 而且通常 Proxy 就架设在 Router 上.面,因此可以完整的掌控区域网路内的.对外.连线! 让你的 LAN 变的更安全啊!更详细的 Proxy 设定我们会在后续的 代理伺服器 章节当中提及的!    外汇


在这个章节中,我们先不谈 Proxy. 这个东.西,而是介绍过滤机制的 iptables 囉!教育



---------------.----.-----------.--------------------------------------------------.
防火墙的一般.线路佈线与抵挡技巧电影

由前.面的说明当中,您应该可以瞭解到一件事,那就是防火墙除了可以『 保护防火墙机制 (iptables) 本身所在的.那部主机』之外,还可以『 保护防火墙后面的主机或 PC』。呵呵! 也就是说,防火墙除了可.以防备主机被入侵之外, 他还可.以架设在路由器上面藉以控管进出本地端网域 (LAN) 的网路封包。 这种规划对於内部私有网域的安全也有一定程.度的保护作用呢!底下我们稍微谈一谈目前常见的防火墙配置吧:             汽车


----------------------------------------.------------.--------------------.--------.

单一 Lin.ux 主机兼任防火墙功能:    美容

防火墙除了可以作為 Linux 本机的基本防护之外,他还可.以架设在路由器上.面以管控整个区域网路的封包进出。 因此,在这类的防火墙上头通常至少需要有两个介面,.将可信任的内部与不可信任的. Internet 分开, 所以可以分别设定两块网路介面的防火墙规则啦!整个环境如同下列图二所示。学习

在图二中,由於防火墙是设定在所有网路封包都会经过的路由器上头, 因此这个防火墙可以.很轻易的就掌控到区域网路内的所有封包, 而且你只要管理这部防火墙主机,就可以很轻易的将来自 Internet 的不良网路封包抵挡掉吶。 .只要管理一部主机就能够造福整的 LA.N 裡面的 PC,很划.算的啦。           建材

如果你想要将区域网路控管的更严格的话,那.你甚至可以在这部 Linux 防火墙上面架设更严格的代理伺服器, .让用户端仅能连上你所开放的 WWW 伺服.器.而已,而且还可以透过代理伺服器的登录档分析功能, 明确的查出来那个使用者在某个时间点曾经连上哪些 WWW 伺服器,您瞧瞧!厉害吧! 如果在这个防火墙上面再加装类似. MRTG 的流量监控软体,还能针对整个网域的流量进行监测。 这样配置的优点是:            杀毒

因.為内外网域已经分开,所以安全维护在.内部可以开放的权限较大! .
安全机制的设定可.以针对 Linux 主机来维护即可! .<性病>
对外只看的到 L.in.ux 主机,所以对於内部可以达到有效的安全防护! .

图二、单一 Linux 防.火墙主机--- 印刷


http://upload.bbs.csuboy.com/Mon_1004/126_7012_132f6d7f25dd30c.png[/img].

-----------------------.------------------.------.---------------------------------<性病>

单一 Linux 防火墙,但 LAN 内.另设防火墙电影

一般来说,我们的防火墙对於 LAN 的防备都不会设定的很严格,因為是我们自己的 LAN 嘛!所以是信任网域之一囉!.不过,最常听到的入侵方法也是使用这样的一个信任漏洞! 因為您不能保证所有使用企业内部电脑的使用者都是公司的员工,也无法保证您的员工不会『搞破坏!』 更多时候是由於某些外来访客利用移动式装置 (笔记型电.脑) 连接.到公司内部的无线网路来加以窃.取企业内.部的重要资讯。.

呵呵!所以,如果您有特别重要的部门需要更安全的保护网路环境,那麼将 LAN .裡 面再加设.一个防火墙,将安全等级.分类,那麼将会让您的重要资料获得更佳的保护喔! 整个架构有点像下图三所示。            杀毒



图三、单一 L.inux 防火墙主机,但. LAN 内另设防火墙.


http://upload.bbs.csuboy.com/Mon_1004/126_7012_eb3427cfb271a7e.png[/img].

--------------------.--.---------.-------------------------------------------------学习

在防火墙后端的主机设定

还有一种更有趣的设定,那就是将提供网路服务的伺服器放在防火墙后面,这有什麼好处呢? 如下图四所示,Web, Mail 与 FTP 都是透过防火墙连到 Internet 上面去,所以, 底下这四部主机在 Internet 上面的 Public IP 都是一样的! (这个观.念我们会在.本章.底下的 NAT 主机的时候再次的强调)。 只是透过防火墙的封包分析后,将 WWW 的要求封包转送到 Web 主.机,将 Mail 送给 Mai.l Server 去处理而已(透过 port 的不同来转递)。.外贸

好了,因為四部主机在 Internet 上面看到的 IP 都..相同,但是事实上却是四部不同的主机., 而当有攻击者想要入侵您的 FT.P 主机好了,他使用各种分析方法去进攻的主机,其实是『防火墙』那一部, 攻击者想要攻击您内部的主机,除非他能够成功的搞定您的防火墙,否则就很难入侵您的内部主机呢!              乙肝

而且,.由於.主机放置在两部防火墙中间,内部网路如果发生状况时 (例如某些使用者不良操作导致中毒啊、 被社交工程攻陷导致.内部主机被绑架啊等等的) ,是.不会影响到网路主机的正常运作的。 这种方式适用在比较大型的企业当中,因為对这些企业来说,网路主机能否提供正常稳定的服务是很重要的![成人用品]

不过,这种架构下所进行的设定就得包含 port 的转递,而且要有很强的逻辑概念, 可以釐清封包双向沟通时的流动方式。对於新手来说,设定上有一定的难度, 鸟哥个人.不太建议新手这麼做,还是等以后有经验.之后再来.玩这种架构吧!(        游戏          )



图四、架设在防火墙.后端的主机伺服器              乙肝

http://upload.bbs.csuboy.com/Mon_1004/126_7012_a0f36ed814aaa9e.png[/img]    健康
通常像上图四的环境中,将网路伺服器独立放置在两个防火墙中间的网路, 我们称之為非军事区域 (DMZ)。 DMZ 的目的就如同前面提到的,重点在保护伺服器本身, 所以将 Internet 与 LAN 都隔离开来,如.此一来.不论是伺服器本身,或者是 LAN 被攻.陷时., 另一个区块还是完好无缺的!    健康


好了,那麼我们 Linux 防火墙软体 ip.tables 是可以进行封包过滤的,他可以分析网路封包的 socket pai.r , 还可以分析不同网路协定的状态,例如 TCP 封包的旗标 (flags) ,甚至可以分析..网路卡的卡号呢! 经由分析这些资料后,咱们的 iptables 至少可以有底下这几种抵挡封包的方式:[成人用品]

拒绝让 Internet 的封包进入 Linux 主机的某.些 p.ort          婚庆
这个应该不难瞭解吧!例如您的 port 20-.21 这个 FTP 相关的 port ., 您只要开放给内部网路的话,所以不对 Inter.net 开放,那麼当 Internet 来的封包想要进入您的 port 20-21 的话,就可以将该资料封包丢掉!.因為我们可以分析的到该封包所带有的 port 号码呀!             汽车


拒绝让某些.来源 IP 的封包进入[成人用品]
例如您已经发现某个 IP 主要都是来自攻击行為的主机,那麼只要来自该. IP 的资料封包,就将他丢弃!这样也可以达到基础.的安全呦!             电子


拒绝让带有某些特殊旗标( flag )的.封包进入域名
最常拒.绝的就是带有 SYN 的主动.连线的旗标了!只要一经发现,嘿嘿!您就可以将该封包丢弃呀!    健康


分.析硬体位址(MAC)来提供服务          婚庆
如果您的区域网路裡面有比较捣蛋的但是又具有比较高强的网路功力的高手时,如果您使用 IP 来抵挡他使用网路的权限,而他却懂得反正换一个. IP 就好了,都在同一个网域内嘛! 同样还是在搞破坏~怎麼办?没关係,我们可以锁死他的网路卡硬体位址啊!因.為 .MAC 是銲在网路卡上面的,所以您只要分析到该使用者所使用的 MAC 之后,可以利用防火墙将该 .MAC 锁住,呵呵!除非他能够一换再换他的网路卡来取.得新的 MAC,否则换 IP 是没有用的啦!               乙肝
当然还有更多的使用.技巧,你可以参考本章最后列出的参考资料, 裡头有更多可用的小技巧喔。我们这裡仅会真对简单的本机防火墙,以及作為类似 IP 分享器的 NAT 主机作简单的介绍而.已啦! ^_^!好了,开始来玩一玩那个 iptables 吧.!投资



--------------------------------------------------.----------.------------.--------    美容
防火墙的使用限制

什麼?!设定防火墙之后还不安.全啊?!那当然啦.!谁说设定了防火墙之后您的系统就一定安全? 防火墙虽然可以防止不受欢迎的封包进入我们的网路当中,不过,.某些情况下, 他并不能保证我们的网路一定就很安全。举几个例子来谈一谈:.

防火墙并不能很有效的抵挡病毒.或木马程式<性病>
假设您已经开放了. WWW 的服务,那麼.您的 WWW 主机上面,防火墙一定得要将 WWW 服务的 port 开放给 Clie.nt 端登入才行吧!否则您的 WWW 主机设定了等於没有用对吧!也就是说,只要进入您的主机的封包是要求 WWW 资料的.,就可以通过您的防火墙。那好了,『万一您的 WWW 伺服器软体有漏洞,或者本身向您要求 WWW 服务的该封包就是病毒在侦测您的系统』时,您的防火墙可.是一点办法也没有啊! 因為本来设定的规则就是会让他通过啊。[成人用品]


防火墙对於来自内部 LAN. 的攻击较无承受力服务器
一般来说,我们对於 LAN 裡面的.主机都没有什麼防火墙的设定,因為是我们自己的 LAN 啊,所以当然就设定為信任网域了!不过, LAN 裡面总是可能有些网路.小白啊,虽然他们不是故意要搞破坏, 但是他们就是不懂嘛!所以就乱用网路了。这个时候就很糟糕,因為防火墙对於内部.的规则设.定通常比较少, 所以就容易造成内部员工对於网路误用或滥用的情况。 .
所以啦,在您的 Linux .主机实地上网.之前,还是得先:           女人

关闭几个不安全的服务;
升级几个可能有问题的套件;
架设好最起码的.安全防护--防火墙-- .
其他相关的讯息请到 认识网路安全 裡面去看一看怎麼增加自身的..安全吧!虚拟主机

[ 本.帖最后由 superche.n 于 2006-9-21 13:13 编辑 ].

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线风语.
发帖
2116
C币
-139044
威望
379
贡献值
1
银元
-2
铜钱
4703
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:Linux
--------------------------------------------------------------------------------
Linux 的封包过滤机制:iptables

上面谈了这麼多,主要还是希望您能瞭解到防火墙是什麼这个议题!而且也希望您知道防火墙并非万能的。 好了,那麼底下我们终於可以来瞧一瞧,那目前我们的 2.6 版这个 Linux 核心到底使用什麼核心功能来进行防火墙设定?


--------------------------------------------------------------------------------
不同 Linux 核心版本的防火墙软体

Linux 的防火墙為什麼功能这麼好?这是因為他本身就是由 Linux kernel 所提供, 由於直接经过核心来处理,因此效能非常好!不过,不同核心版本所使用的防火墙软体是不一样的! 因為核心支援的防火墙是逐渐演进来的嘛!

Version 2.0:使用 ipfwadm 这个防火墙机制;
Version 2.2:使用的是 ipchains 这个防火墙机制;
Version 2.4 与 2.6 :主要是使用 iptables 这个防火墙机制,不过在某些早期的 Version 2.4 版本的 distributions 当中,亦同时支援 ipchains (编译成為模组),好让使用者仍然可以使用来自 2.2 版的 ipchains 的防火墙规划。不过,不建议在 2.4 以上的核心版本使用 ipchains 喔!
因為不同的核心使用的防火墙机制不同,且支援的软体指令与语法也不相同, 所以在 Linux 上头设定属於你自己的防火墙规则时,要注意啊,先用 uname -r 追踪一下你的核心版本再说! 如果你是安装 2004 年以后推出的 distributions ,那就不需要担心了,因為这些 distributions 几乎都使用 kernel 2.6 版的核心啊! ^_^



--------------------------------------------------------------------------------
iptables 的表格与封包进入流程

前面的几个小节裡面我们一直谈到:『防火墙规则』,咦!啥是规则啊?因為 iptables 是利用封包过滤的机制, 所以他会分析封包的表头资料。根据表头资料与定义的『规则』来决定该封包是否可以进入主机或者是被丢弃。 意思就是说:『根据封包的分析资料 "比对" 你预先定义的规则内容, 若封包资料与规则内容相同则进行动作,否则就继续下一条规则的比对!』 重点在那个『比对与分析顺序』上。

举个简单的例子,假设我预先定义 10 条防火墙规则好了,那麼当 Internet 来了一个封包想要进入我的主机, 那麼防火墙是如何分析这个封包的呢?我们以底下的图示来说明好了:



图五、封包过滤的规则动作及分析流程


当一个网路封包要进入到主机之前,会先经由 NetFilter 进行检查,那就是 iptables 的规则了。 检查通过则接受 (ACCEPT) 进入本机取得资源,如果检查不通过,则可能予以丢弃 (DROP) ! 上图五主要的目的在告知您:『规则是有顺序的』!例如当网路封包进入 Rule 1 的比对时, 如果比对结果符合 Rule 1 ,此时这个网路封包就会进行 Action 1 的动作,而不会理会后续的 Rule 2, Rule 3.... 等规则的分析了。

而如果这个封包并不符合 Rule 1 的比对,那就会进入 Rule 2 的比对了!如此一个一个规则去进行比对就是了。 那如果所有的规则都不符合怎办?此时就会透过预设动作 (封包政策, Policy) 来决定这个封包的去向。 所以啦,当您的规则顺序排列错误时,就会產生很严重的错误了。 怎麼说呢?让我们看看底下这个例子:

假设您的 Linux 主机提供了 WWW 的服务,那麼自然就要针对 port 80 来啟用通过的封包规则,但是您发现 IP 来源為 192.168.100.100 老是恶意的尝试入侵您的系统,所以您想要将该 IP 拒绝往来,最后,所有的非 WWW 的封包都给他丢弃,就这三个规则来说,您要如何设定防火墙检验顺序呢?

Rule 1 先抵挡 192.168.100.100 ;
Rule 2 再让要求 WWW 服务的封包通过;
Rule 3 将所有的封包丢弃。
这样的排列顺序就能符合您的需求,不过,万一您的顺序排错了,变成:

Rule 1 先让要求 WWW 服务的封包通过;
Rule 2 再抵挡 192.168.100.100 ;
Rule 3 将所有的封包丢弃。
此时,那个 192.168.100.100 『可以使用您的 WWW 服务』喔!因為只要他对您的主机送出 WWW 要求封包,就可以使用您的 WWW 主机功能了,因為您的规则顺序定义第一条就会让他通过, 而不去考虑第二条规则!这样可以理解规则顺序的意义了吗!现在再来想一想,如果 Rule 1 变成了『将所有的封包丢弃』,Rule 2 才设定『WWW 服务封包通过』,请问,我的 client 可以使用我的 WWW 服务吗?呵呵!答案是『否~』想通了吗? ^_^


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

iptables 的表格与链 (chain)

事实上,那个图五所列出的规则仅是 iptables 眾多表格当中的一个链 (chain) 而已。 什麼是链呢?这得由 iptables 的名称说起。為什麼称為 ip"tables" 呢? 因為这个防火墙软体裡面有多个表格 (table) ,每个表格都定义出自己的预设政策与规则, 且每个表格都用途都不相同。我们可以使用底下这张图来稍微瞭解一下:



图六、iptables 的表格示意图


刚刚图五的规则内容仅只是图六内的某个 chain 而已! 而预设的情况下,咱们 Linux 的 iptables 至少就有三个表格,包括管理本机进出的 filter 、管理后端主机 (防火墙内部的其他电脑) 的 nat 、 管理特殊旗标使用的 mangle (较少使用) 。更有甚者,我们还可以自订额外的链呢! 真是很神奇吧!每个表格与其中链的用途分别是这样的:

filter:主要跟 Linux 本机有关,这个是预设的 table 喔!
INPUT:主要与封包想要进入我们 Linux 本机有关;
OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
FORWARD:这个咚咚与 Linux 本机比较没有关係,他可以封包『转递』到后端的电脑中,与 nat 这个 table 相关性很高。


nat:这个表格主要在用作来源与目的之 IP 或 port 的转换, 与 Linux 本机较无关,主要与 Linux 主机后的区域网路内的电脑较有相关。
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT:与发送出去的封包有关


mangle:这个表格主要是与特殊的封包的路由旗标有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。 由於这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。
那麼各个表格与链的相关性可以使用下图来表示:



图七、iptables 内建各表格与链的相关性


上面的图示很复杂喔!不过基本上你依旧可以看出来,我们的 iptables 可以控制两种封包的流向:

如上图的 A ,封包主要是要读取我们 Linux 本机内的资料,会经过 filter 的 INPUT 链, 而资料的输出则是经过 filter 的 OUTPUT 链;
如上图的 B ,封包主要是要透过防火墙而去后端,也就是说,该封包的目标并非我们的 Linux 本机。 主要经过的链是 filter 的 FORWARD 以及 nat 的 POSTROUTING, PREROUTING。
由於 mangle 这个表格很少被使用,如果将图七的 mangle 拿掉的话,那就容易看的多了:



图八、iptables 内建各表格与链的相关性(简图)


透过图八你就可以更轻鬆的瞭解到,事实上与本机最有关的其实是 filter 这个表格内的 INPUT 与 OUTPUT 这两条链,如果你的 iptables 只是用来防备 Linux 主机本身的话,那 nat 的规则根本就不需要理他,直接设定為开放即可。

不过,如果你的防火墙事实上是用来管制 LAN 内的其他主机的话,那麼你就必须要再针对 filter 的 FORWARD 这条链,还有 nat 的 PREROUTING, POSTROUTING 以及 OUTPUT 进行额外的规则订定才行。 nat 表格的使用需要很清晰的路由概念才能够设定的好,建议新手先不要碰! 最多就是先玩一玩最阳春的 nat 功能『IP 分享器的功能』就好了! ^_^! 这部份我们在本章的最后一小节会介绍的啦!


--------------------------------------------------------------------------------
本机的 iptables 语法

理论上,当你安装好 Linux 之后,系统应该会主动的帮你啟动一个阳春的防火墙规则才是。 不过如果您是依照鸟哥的建议来安装 Linux 时,那麼安装完毕后,你的系统应该是没有防火墙的啦。 另外,某些早期的版本 (例如 Red Hat 9) 本身同时提供 iptables 及 ipchains 这两个防火墙模组, 不过这两个模组是无法同时存在的!所以你仅能啟动其中一个,那当然是啟动 iptables 才对啊! 如果不小心啟动了 ipchains 的话 (新版的 Linux 都不会有这个困扰) ,那请使用 rmmod 来移除吧!

不过,在开始进行底下的练习之前,鸟哥这裡有个很重要的事情要告知一下。 因為 iptables 的指令会将网路封包进行过滤及抵挡的动作,所以 请不要在远端主机上进行防火墙的练习,因為您很有可能一不小心将自己关在家门外! 尽量在本机前面登入 tty1-tty6 终端机进行练习,否则常常会发生悲剧啊! 鸟哥以前刚刚在玩 iptables 时,就常常因為不小心规则设定错误,导致常常要请远端的朋友帮忙重新开机...

刚刚提到咱们的 iptables 至少有三个预设的 table (filter, nat, mangle),较常用的是本机的 filter 表格, 这也是预设表格啦。另一个则是后端主机的 nat 表格,至於 mangle 较少使用,所以这个章节我们并不会讨论 mangle。 由於不同的 table 他们的链不一样,导致使用的指令语法或多或少都有点差异。 在这个小节当中,我们主要将针对 filter 这个预设表格的三条链来做介绍。底下就来玩一玩吧!

Tips:
防火墙的设定主要使用的就是 iptables 这个指令而已。而防火墙是系统管理员的主要任务之一, 且对於系统的影响相当的大,因此『只能让 root 使用 iptables 』,不论是设定还是观察防火墙规则喔!  


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

规则的清除与观察

如果你在安装的时候选择没有防火墙的话,那麼 iptables 在一开始的时候应该是没有规则的,不过, 可能因為你在安装的时候就有选择系统自动帮您建立防火墙机制,那系统就会有预设的防火墙规则了! 无论如何,我们先来看看目前本机的防火墙规则是如何吧!
[root@linux ~]# iptables [-t tables] [-L] [-nv]
参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用预设的 filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v :列出更多的资讯,包括通过该规则的封包总位元数、相关的网路介面等

范例:列出 filter table 三条链的规则
[root@linux ~]# iptables -L -n
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

范例:列出更多的资讯
[root@linux ~]# iptables -L -nv
Chain INPUT (policy ACCEPT 5748 packets, 746K bytes)
pkts bytes target     prot opt in     out     source               destination
....底下省略....


仔细看到上面表格的输出,因為没有加上 -t 的参数,所以预设就是 filter 这个表格内的 INPUT, OUTPUT, FORWARD 三条链的规则囉。由於没有规则嘛!所以每个链内部的规则都是空的。 同时注意一下,在每个 chain 后面括号内的 policy 项目,那就是『预设动作(政策)』咯!以上面来看, 虽然我们啟动了 iptables ,但是我们没有设定规则,然后政策又是 ACCEPT, 所以是『任何封包都会接受』的意思喔!至於如果加上 -v 的参数时, 则连同该规则所通过的封包总位元数也会被列出来啊。底下则是 nat 表格的规则项目:
[root@linux ~]# iptables -t nat -L -n
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination


瞧!与 fiter 表格一模一样吧!只是三条链的内容不同囉!要注意啊! ^_^! 以后当你设定每一条防火墙的规则时,记得瞧一瞧设定先!好,那如何清除规则?这样做就对了:
[root@linux ~]# iptables [-t tables] [-FXZ]
参数:
-F :清除所有的已订定的规则;
-X :杀掉所有使用者 "自订" 的 chain (应该说的是 tables )囉;
-Z :将所有的 chain 的计数与流量统计都归零

范例:清除本机防火墙 (filter) 的所有规则
[root@linux ~]# iptables -F
[root@linux ~]# iptables -X
[root@linux ~]# iptables -Z


由於这三个指令会将本机防火墙的所有规则都清除,但却不会改变预设政策 (policy) , 所以如果你不是在本机下达这三行指令时,很可能你会被自己挡在家门外 (若 INPUT 设定為 DROP 时)! 要小心啊!

一般来说,我们在重新定义防火墙的时候,都会先将规则给他清除掉。还记得我们前面谈到的, 防火墙的『规则顺序』是有特殊意义的,所以囉, 当然先清除掉规则,然后一条一条来设定会比较容易一点啦。底下就来谈谈定义预设政策吧!



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

定义预设政策 (policy)

清除规则之后,再接下来就是要设定规则的政策啦!还记得政策指的是什麼吗?『 当您的封包不在您设定的规则之内时,则该封包的通过与否,以 Policy 的设定為準』,在本机方面的预设政策中,假设您对於内部的使用用者有信心的话, 那麼 filter 内的 INPUT 链方面可以定义的比较严格一点,而 FORWARD 与 OUTPUT 则可以订定的鬆一些!通常鸟哥都是将 INPUT 的 policy 定义為 DROP 啦,其他两个则定义為 ACCEPT。 至於 nat table 则暂时不理会他。
[root@linux ~]# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
参数:
-P :定义政策( Policy )。注意,这个 P 為大写啊!
ACCEPT :该封包可接受
DROP   :该封包直接丢弃,不会让 client 端知道為何被丢弃。

范例:将本机的 INPUT 设定為 DROP ,其他设定為 ACCEPT
[root@linux ~]# iptables -P   INPUT DROP
[root@linux ~]# iptables -P  OUTPUT ACCEPT
[root@linux ~]# iptables -P FORWARD ACCEPT
[root@linux ~]# iptables -L -n
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
# 由於 INPUT 设定為 DROP 而又尚未有任何规则,所以上面的输出结果显示:
# 所有的封包都无法进入你的主机!是不通的防火墙设定!(网路连线是双向的)


看到输出的结果了吧?INPUT 被修改设定了喔!其他的 nat table 三条链的设定也是一样的,例如:『 iptables -t nat -P PREROUTING ACCEPT 』就设定了 nat table 的 PREROUTING 链為可接受的意思!预设政策设定完毕后,来谈一谈关於封包的基础比对设定吧。



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

封包的基础比对 IP/netmask I/O 装置

开始来进行封包的比对设定吧!我们先由最基础的 IP 与网域的特徵谈起,再谈装置 (网路卡) 的限制等等。
[root@linux ~]# iptables [-AI 链] [-io 网路介面] [-p 协定] \
> [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP]
参数:
-AI 链:针对某的链进行规则的 "插入" 或 "累加"
    -A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,
         使用 -A 就可以加上第五条规则!
    -I :插入一条规则。如果没有指定此规则的顺序,预设是插入变成第一条规则。
         例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号
    链 :有 INPUT, OUTPUT, FORWARD 等,此链名称又与 -io 有关,请看底下。

-io 网路介面:设定封包进出的介面规范
    -i :封包所进入的那个网路介面,例如 eth0, lo 等介面。需与 INPUT 链配合;
    -o :封包所传出的那个网路介面,需与 OUTPUT 链配合;

-p 协定:设定此规则适用於哪种封包格式
   主要的封包格式有: tcp, udp, icmp 及 all 。

-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:
   IP  :192.168.0.100
   网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
   若规范為『不许』时,则加上 ! 即可,例如:
   -s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;

-d 目标 IP/网域:同 -s ,只不过这裡指的是目标的 IP 或网域。

-j :后面接动作,主要的动作有接受 (ACCEPT)、丢弃 (DROP) 及记录 (LOG)


iptables 的基本参数就如同上面所示的,仅只谈到 IP 、网域与装置等等的资讯, 至於 TCP, UDP 封包特有的埠口 (port number) 与状态 (如 SYN 旗标) 则在下小节才会谈到。 好,先让我们来看看最基础的几个规则,例如开放 lo 这个本机的介面以及某个 IP 来源吧!
范例一:所有的来自 lo 这个介面的封包,都予以接受
[root@linux ~]# iptables -A INPUT -i lo -j ACCEPT
# 仔细看上面并没有列出 -s, -d 等等的规则,这表示:不论封包来自何处或去到哪裡,
# 只要是来自 lo 这个介面,就予以接受!这个观念挺重要的,就是
#『没有设定的规定,则表示该规定完全接受』的意思!例如这个案例当中,
# 关於 -s, -d...等等的参数没有规定时

范例二:目标来自 192.168.0.1 这个 IP 的封包都予以接受
[root@linux ~]# iptables -A INPUT -i eth0 -s 192.168.0.1 -j ACCEPT
# 不管什麼封包格式,只要来自 192.168.0.1 就予以接受。

范例三:目标来自 192.168.1.0/24 可接受,但 192.168.1.10 丢弃
[root@linux ~]# iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP
[root@linux ~]# iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
# 上述这两个范例很重要啊!因為有点关係!要先丢弃 192.168.1.10 才能接受该网域。

[root@linux ~]# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  192.168.0.1          0.0.0.0/0
DROP       all  --  192.168.1.100        0.0.0.0/0
ACCEPT     all  --  192.168.1.0/24       0.0.0.0/0
# 瞧!刚刚的设定在这裡已经生效囉!


这就是最单纯、简单的防火墙规则的设定与观察方式。你在设定完毕后,都可以利用 iptables -L -n 或 iptables -L -v 来简单的查阅一下。而如果你想要记录某个规则的纪录怎麼办?可以这样做:
[root@linux ~]# iptables -A INPUT -s 192.168.2.200 -j LOG
[root@linux ~]# iptables -L -n
target prot opt source         destination
LOG    all  --  192.168.2.200  0.0.0.0/0   LOG flags 0 level 4


看到输出结果的最左边,会出现的是 LOG 喔!只要有封包来自 192.168.2.200 这个 IP 时, 那麼该封包的相关资讯就会被写入到核心讯息,亦即是 /var/log/messages 这个档案当中。 然后该封包会继续进行后续的规则比对。所以说, LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其他规则比对的。 好了,接下来我们分别来看看 TCP,UDP 以及 ICMP 封包的其他规则比对吧!

[ 本帖最后由 superchen 于 2006-9-21 13:15 编辑 ]

离线妖童.
发帖
2015
C币
-235496
威望
383
贡献值
1
银元
-2
铜钱
4444
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:Linux
--------------------------------------------------------------------------------

TCP, UDP 的规则比对

我们在网路基础谈过各种不同的封包格式, 在谈到 TCP 与 UDP 时,比较特殊的就是那个埠口 (port number),在 TCP 方面则另外有所谓的连线封包状态, 包括最常见的 SYN 主动连线的封包格式。那麼如何针对这两种封包格式进行防火墙规则的设定呢?你可以这样看:
[root@linux ~]# iptables [-AI 链] [-io 网路介面] [-p tcp,udp] \
> [-s 来源IP/网域] [--sport 埠口范围] \
> [-d 目标IP/网域] [--dport 埠口范围] -j [ACCEPT|DROP]
参数:
--sport 埠口范围:限制来源的埠口号码,埠口号码可以是连续的,例如 1024:65535
--dport 埠口范围:限制目标的埠口号码。


事实上就是多了那个 --sport 及 --dport 这两个玩意儿,重点在那个 port number 上面啦! 底下让我们来进行几个小测试:
范例一:想要连线进入本机 port 21 的封包都抵挡掉:
[root@linux ~]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

范例二:想连到我这部主机的网芳 (upd port 137,138 tcp port 139,445) 就放行
[root@linux ~]# iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
[root@linux ~]# iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
[root@linux ~]# iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT


瞧!你可以利用 UDP 与 TCP 协定所拥有的埠口号码来进行某些服务的开放或关闭喔! 你还可以综合处理呢!例如:只要来自 192.168.1.0/24 的 1024:65535 埠口的封包, 只要想要连线到本机的 ssh port 就予以抵挡,可以这样做:
[root@linux ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 \
> --sport 1024:65534 --dport ssh -j DROP


注意啊!如果你有使用到 --sport 及 --dport 的参数时,就必须指定 udp 或 tcp 的封包格式才行!否则的话, iptables 的指令就会出现如下的错误:
[root@linux ~]# iptables -A INPUT -i eth0 --dport 21 -j DROP
iptables v1.2.11: Unknown arg `--dport'
Try `iptables -h' or 'iptables --help' for more information.


你应该会觉得很奇怪,怎麼『 --dport 』会是未知的参数 (arg) 呢?这是因為你没有加上 -p tcp 或 -p udp 的缘故啊!因為 port 是 TCP,UDP 特有的,其他类似 ICMP 则没有这种类的埠口资料啊! 这样说,您可以理解吧! ^_^

除了埠口之外,在 TCP 还有特殊的旗标啊!最常见的就是那个主动连线的 SYN 旗标了。 我们在 iptables 裡面还支援『 --syn 』的处理方式,我们以底下的例子来说明好了:
范例:将来自任何地方来源 port 1:1023 的主动连线到本机端的 1:1023 连线丢弃
[root@linux ~]# iptables -A INPUT -i eth0 -p tcp --sport 1:1023 \
> --dport 1:1023 --syn -j DROP


一般来说,client 端啟用的 port 都是大於 1024 以上的埠口,而 server 端则是啟用小於 1023 以下的埠口在监听的。所以我们可以让来自远端的小於 1023 以下的埠口资料的主动连线都给他丢弃! 但不适用在 FTP 的主动连线中!这部份我们未来在 FTP 章节当中再来谈吧!



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

状态模组:MAC 与 RELATED

在早期的 kernel 2.2 以前使用 ipchains 管理防火墙时,通常会让系统管理员相当头痛! 因為 ipchains 没有所谓的封包状态模组,因此我们必须要针对封包的进、出方向进行管控。 举例来说,如果你想要连线到远端主机的 port 22 时,你必须要针对两条规则来设定:

本机端的 1024:65535 到远端的 port 22 必须要放行 (OUTPUT 链);
远端主机 port 22 到本机的 1024:65535 必须放行 (INPUT 链);
这会很麻烦!因為如果你要连线到 10 部主机的 port 22 时,假设 OUTPUT 為预设开啟 (ACCEPT), 你依旧需要填写十行规则,让那十部远端主机的 port 22 可以连线到你的本地端主机上。 那如果开啟全部的 port 22 呢?又担心某些恶意主机会主动以 port 22 连线到你的机器上! 同样的道理,如果你要让本地端主机可以连到外部的 port 80 (WWW 服务),那就更不得了~ 这就是网路连线是双向的一个很重要的概念!

好在我们的 iptables 免除了这个困扰!他可以透过一个状态模组来分析 『这个想要进入的封包是否為刚刚我发出去的回应?』 如果是刚刚我发出去的回应,那麼就可以予以接受放行!哇!真棒!这样就不用管远端主机是否连线进来的问题了! 那如何达到呢?看看底下的语法:
[root@linux ~]# iptables -A INPUT -m state --state 状态
参数:
-m :一些 iptables 的模组,主要常见的有:
     state :状态模组
     mac   :网路卡硬体位址 (hardware address)
--state :一些封包的状态,主要有:
     INVALID    :无效的封包,例如资料破损的封包状态
     ESTABLISHED:已经连线成功的连线状态;
     NEW        :想要新建立连线的封包状态;
     RELATED    :这个最常用!表示这个封包是与我们主机发送出去的封包有关

范例:只要已建立或相关封包就予以通过,只要是不合法封包就丢弃
[root@linux ~]# iptables -A INPUT -m state \
> --state RELATED,ESTABLISHED -j ACCEPT
[root@linux ~]# iptables -A INPUT -m state --state INVALID -j DROP


所以说,如果你的 Linux 主机只想要作為 client 的用途,不许所有主动对你连线的来源, 那麼你可以这样做即可:

清除所有已经存在的规则 (iptables -F...)
设定预设政策,除了 INPUT 预设為 DROP 其他為预设 ACCEPT;
开放本机的 lo 可以自由放行;
设定有相关的封包状态可以连线进入本机。
这就是最最阳春的防火墙,你可以透过第二步骤抵挡所有远端的来源封包, 而透过第四步骤让你要求的远端主机回应封包可以进入, 加上让本机的 lo 这个内部迴圈装置可以放行,嘿嘿!一部 client 专用的防火墙规则就 OK 了! 你可以在某个 script 上面这样做即可:
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
iptables -F
iptables -X
iptables -Z
iptables -P   INPUT DROP
iptables -P  OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT


那如果区域网路内有其他的主机时,再将上表最后一行的 # 取消,就可以接受来自本地 LAN 的其他主机的连线了。 而如果你担心某些 LAN 内的恶意来源主机会主动的对你连线时,那你还可以针对信任的本地端主机的 MAC 进行过滤! 同样是使用状态模组!这次的状态则是 MAC 的比对。举例来说:
范例一:针对区域网路内的 aa:bb:cc:dd:ee:ff 主机开放其连线
[root@linux ~]# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff \
>  -j ACCEPT
参数:
--mac-source :就是来源主机的 MAC 啦!


透过这个玩意儿,你就可以定义更严格的 LAN 内的其他主机能否连线到你的主机的权限了!



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

ICMP 封包规则的比对

在网路基础的 ICMP 协定当中我们知道 ICMP 的格式相当的多,而且很多 ICMP 封包的类型格式都是為了要用来进行网路检测用的! 所以最好不要将所有的 ICMP 封包都丢弃!通常我们会把 ICMP type 8 (echo request) 拿掉而已, 让远端主机不知道我们是否存在,也不会接受 ping 的回应就是了。ICMP 封包格式的处理是这样的:
[root@linux ~]# iptables -A INPUT -p icmp --icmp-type 类型 -j ACCEPT
参数:
--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,
              例如 8  代表 echo request 的意思。

范例:让 0,3,4,11,12,14,16,18 的 ICMP type 可以进入本机:
[root@linux ~]# vi somefile
#!/bin/bash
icmp_type="0 3 4 11 12 14 16 18"
for typeicmp in $icmp_type
do
   iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
done

[root@linux ~]# sh  somefile


这样就能够开放部分的 ICMP 封包格式进入本机进行网路检测的工作了!真好!不是嘛!^_^

--------------------------------------------------------------------------------
防火墙的记录、回復与测试

刚刚上面我们谈了很多的设定了,那麼我该如何观察目前主机上面的防火墙规则呢? 我们可以使用『iptables -L -n 』来观察,不过,该指令所显示的资讯其实还是不太足够的。 这个时候,我们其实可以使用底下的两个指令来将目前主机上面的防火墙机制『储存』下来, 在下次想要将这个规则『回復』的时候,就能够直接利用指令将规则直接回復喔!
[root@linux ~]# iptables-save > filename
[root@linux ~]# iptables-restore < filename


一个是储存一个是回復!而在 Red Hat 系统的 RHEL,CentOS,Fedora 当中,如果你将那个 filename 档案存成『 /etc/sysconfig/iptables 』,并且利用 chkconfig 将 iptables 在开机时预设啟动的话,那麼一开机系统就会主动的帮你把防火墙的规则给载入了就是! 那麼使用 iptables-save 所得到的结果会是如何呢?让我们来看看:
[root@linux ~]# iptables-save
# Generated by iptables-save v1.2.11 on Mon Sep 11 17:47:35 2006
*filter    <==使用的 table
:INPUT DROP [7335:859454] <==三条预设的链与预设政策
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16992:13134791]
-A INPUT -i lo -j ACCEPT  <==开始各个规则的设定
-A INPUT -m state --state RELATED -j ACCEPT
-A INPUT -m mac --mac-source 00:04:750:A2:58 -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type 3 -j ACCEPT
....中间省略....
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
# Completed on Mon Sep 11 17:47:35 2006
# 井号 (#) 是註解,星号 (*) 代表预设的 table,而冒号 ( 代表各条链的预设政策;
# 后续的动作则是各个规则啦!


你瞧到输出的结果啦!整个资料几乎就是类似手动在指令列模式输入的指令! 比起 iptables -L -n 所得到的资讯要仔细的多。这也是 iptables 的特殊格式, 可以用在 iptables-restore 的指令读入呢! 比起这种方式,鸟哥还是比较喜欢使用 script 来撰写自己的防火墙规则啦。 制订好规则后当然就是要测试囉!那麼如何测试呢?

先由主机向外面主动连线试看看;
再由私有网域内的 PC 向外面主动连线试看看;
最后,由 Internet 上面的主机,主动连线到您的 Linux 主机试看看;
一步一步作下来,看看问题出在哪裡,然后多多的去改进、改良!基本上, 网路上目前很多的资料可以提供您不错的参考了!这一篇的设定写的是很简单, 大部分都还在介绍阶段而已!希望对大家有帮助! 鸟哥在参考资料当中列出几个有用的防火墙网页, 希望大家有空真的要多多的去看看!会很有帮助的!



--------------------------------------------------------------------------------
IPv4 的核心管理功能: /proc/sys/net/ipv4/*

除了 iptables 这个防火墙软体之外,其实咱们 Linux kernel 2.6 提供很多核心预设的攻击抵挡机制喔! 由於是核心的网路功能,所以相关的设定资料都是放置在 /proc/sys/net/ipv4/ 这个目录当中。 至於该目录下各个档案的详细资料,可以参考核心的说明文件:

/usr/src/linux-{version}/networking/ip-sysctl.txt
上面的这个说明资料可以由 http://www.kernel.org 这个网站下载任何一个核心原始码后,解压缩就能够看到。 鸟哥这裡也放一份备份:

http:/linux.vbird.org/linux_server/0250simple_firewall/ip-sysctl.txt
有兴趣的话应该要自行去查一查比较好的喔!我们底下就拿几个简单的档案来作说明吧!


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

/proc/sys/net/ipv4/tcp_syncookies

我们在前一章谈到所谓的阻断式服务 (DoS) 攻击法当中的一种方式,就是利用 TCP 封包的 SYN 三向交握原理所达成的, 这种方式称為 SYN Flooding 。那如何预防这种方式的攻击呢?我们可以啟用核心的 SYN Cookie 模组啊! 这个 SYN Cookie 模组可以在系统用来啟动随机连线的埠口 (1024:65535) 即将用完时自动啟动。

当啟动 SYN Cookie 时,主机在发送 SYN/ACK 确认封包前,会要求 Client 端在短时间内回覆一个序号, 这个序号包含许多原本 SYN 封包内的资讯,包括 IP、port 等。若 Client 端可以回覆正确的序号, 那麼主机就确定该封包為可信的,因此会发送 SYN/ACK 封包,否则就不理会此一封包。

透过此一机制可以大大的降低无效的 SYN 等待埠口,而避免 SYN Flooding 的 DoS 攻击说! 那麼如何啟动这个模组呢?很简单,这样做即可:
[root@linux ~]# echo "1" > /proc/sys/net/ipv4/tcp_syncookies


但是这个设定值由於违反 TCP 的三向交握 (因為主机在发送 SYN/ACK 之前需要先等待 client 的序号回应), 所以可能会造成某些服务的延迟现象,例如 SMTP (mail server)。 不过总的来说,这个设定值还是不错用的! 只是不适合用在负载已经很高的伺服器内喔! 因為负载太高的主机有时会让核心误判遭受 SYN Flooding 的攻击呢。

如果是為了系统的 TCP 封包连线最佳化,则可以参考 tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow 这几个设定值的意义。



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

/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

阻断式服务常见的是 SYN Flooding ,不过,我们知道系统其实可以接受使用 ping 的回应, 而 ping 的封包是可以给很大的!想像一个状况, 如果有个搞破坏的人使用 1000 台主机传送 ping 给你的主机,而且每个 ping 都高达数百 K bytes时, 你的网路频宽会怎样?要嘛就是频宽被吃光,要嘛可能系统会当机! 这种方式分别被称為 ping flooding (不断发 ping) 及 ping of death (发送大的 ping 封包)。

那如何避免呢?取消 ICMP 类型 8 的 ICMP 封包回应就是了。我们可以透过防火墙来抵挡, 这也是比较建议的方式。当然也可以让核心自动取消 ping 的回应。不过您必须要瞭解, 某些区域网路内常见的服务 (例如动态 IP 分配 DHCP 协定) 会使用 ping 的方式来侦测是否有重复的 IP ,所以你最好不要取消所有的 ping 回应比较好。

核心取消 ping 回应的设定值有两个,分别是:/proc/sys/net/ipv4 内的 icmp_echo_ignore_broadcasts (仅有 ping broadcast 位址时才取消 ping 的回应) 及 icmp_echo_ignore_all (全部的 ping 都不回应)。鸟哥建议设定 icmp_echo_ignore_broadcasts 就好了。 你可以这麼做:
[root@linux ~]# echo "1" >  \
> /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个