Linux防火墙

 

9.1 认识防火墙

 
只要可以分析与过滤进出咱们管理之网域的封包数据, 就能够称为防火墙。
  • 硬件防火墙
    • 由厂商设计好的主机硬件, 这部硬件防火墙内的操做系统主要以提供封包数据的过滤机制为主,并将其余没必要要的功能拿掉。由于单纯做为防火墙功能而已, 所以封包过滤的效率较佳
  • 软件防火墙
    • 软件防火墙自己就是在保护系统网络安全的一套软件(或称为机制),例如 Netfilter 与 TCP Wrappers 均可以称为软件防火墙。
9.1.2 为什么须要防火墙
 
做用
防火墙最大的功能就是帮助你『限制某些服务的存取来源』
举例:
  1. 你能够限制文件传输服务 (FTP) 只在子域内的主机才可以使用,而不对整个 Internet 开放;
  2. 你能够限制整部 Linux 主机仅能够接受客户端的 WWW 要求,其余的服务都关闭;
  3. 你还能够限制整部主机仅能主动对外联机。
 
防火墙最重要的任务就是在规划出:
  • 切割被信任(如子域)与不被信任(如 Internet)的网段;
  • 划分出可提供 Internet 的服务与必须受保护的服务;
  • 分析出可接受与不可接受的封包状态;
 
防火墙种类
  • Netfilter (封包过滤机制)
    • 分析进入主机的网络封包,将封包的表头数据捉出来进行分析,以决定该联机为放行或抵挡的机制
    • 因为这种方式能够直接分析封包表头数据,因此包括硬件地址(MAC), 软件地址 (IP), TCP, UDP, ICMP 等封包的信息均可以进行过滤分析的功能,所以用途很是的普遍
  • TCP Wrappers (程序控管)
    • 这种机制主要是分析谁对某程序进行存取,而后透过规则去分析该服务器程序谁可以联机、谁不能联机。
    • 举例来讲,咱们知道 FTP能够启动在非正规的 port 21 进行监听,当你透过 Linux 内建的 TCP wrappers限制 FTP 时, 那么你只要知道 FTP 的软件名称 (vsftpd) ,而后对他做限制,则无论 FTP 启动在哪一个端口,都会被该规则管理的
  • Proxy (代理服务器)
    • 其实代理服务器是一种网络服务,它能够『代理』用户的需求,而代为前往服务器取得相关的资料。
 

 

9.1.4 防火墙的通常网络布线示意
 
单一网域,仅有一个路由器

 

 
优势:
  • 由于内外网域已经分开,因此安全维护在内部能够开放的权限较大!
  • 安全机制的设定能够针对 Linux 防火墙主机来维护便可!
  • 对外只看的到 Linux 防火墙主机,因此对于内部能够达到有效的安全防御!
 
内部网络包含安全性更高的子网,需内部防火墙切开子网:
 

 

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

 

     由于四部主机在 Internet 上面看到的 IP 都相同,可是事实上倒是四部不一样的主机, 而当有攻击者想要入侵你的 FTP 主机好了,他使用各类分析方法去进攻的主机,实际上是『防火墙』那一部, 攻击者想要攻击你内部的主机,除非他可以成功的搞定你的防火墙,不然就很难入侵你的内部主机呢
 
     因为主机放置在两部防火墙中间,内部网络若是发生情况时 (例如某些使用者不良操做致使中毒啊、 被社交工程攻陷致使内部主机被绑架啊等等的) ,是不会影响到网络服务器的正常运做的。 这种方式适用在比较大型的企业当中,由于对这些企业来讲,网络主机可否提供正常稳定的服务是很重要的
 
9.1.5 防火墙的使用限制
 
Linux 的 Netfilter 机制的主要分析工做
  • 拒绝让 Internet 的封包进入主机的某些端口号
    • 例如:你的 port 21 这个 FTP 相关的端口,若只想要开放给内部网络的话,那么当 Internet 来的封包想要进入你的 port 21 时,就能够将该数据封包丢掉!由于咱们能够分析的到该封包表头的端口口号码
  • 拒绝让某些来源 IP 的封包进入
    • 例如你已经发现某个 IP 主要都是来自攻击行为的主机,那么只要来自该 IP 的数据封包,就将他丢弃!这样也能够达到基础的安全呦
  • 拒绝让带有某些特殊旗标 (flag) 的封包进入
    • 最常拒绝的就是带有 SYN 的主动联机的旗标了!只要一经发现,嘿嘿!你就能够将该封包丢弃呀
  • 分析硬件地址 (MAC) 来决定联机与否
    • MAC 是焊在网络卡上面的,因此你只要分析到该使用者所使用的 MAC 以后,能够利用防火墙将该 MAC 锁住
 
防火墙不是万能
举例:
  • 防火墙并不能颇有效的抵挡病毒或木马程序
    • www服务主机,必需要容许www封包经过,若此时www服务器软件有漏洞,或者自己向你要求www服务的该封包就是病毒在侦测你的系统。这时防火墙但是一点办法也没有
  • 防火墙对于来自内部LAN的攻击较无承受力
    • 防火墙对于内部的规则设定一般比较少,因此容易形成内部员工对于网路误用;
主机实地上网前:
  • 关闭几个不安全的服务
  • 升级几个可能有问题的套件
  • 架设好最起码的安全防御---防火墙
 
 
9.2  TCP Wrappers

 
TCP wrappers 是透过客户端想要连接的程序文件名,而后分析客户端的 IP ,看看是否须要放行;
 
那么哪些程序支持 TCP wrappers 的功能?这个TCP wrappers 又该如何设定?
 
9.2.1 哪些服务有支持
 
TCP wrappers 就是透过 /etc/hosts.allow, /etc/hosts.deny 这两个宝贝蛋来管理的一个相似防火墙的机制,
但并不是全部的软件均可以透过这两个档案来控管,只有底下的软件才可以透过这两个档案来管理防火墙规则,分别是:
  • 由 super daemon (xinetd) 所管理的服务;
    • 经由 xinetd 管理的服务还好理解,就是配置文件在 /etc/xinetd.d/ 里面的服务就是 xinetd 所管理的啊!
  • 有支援 libwrap.so 模块的服务。
那什么是有支持libwrap.so模块。
 
例:
请查出你的系统有没有安装 xinetd ,若没有请安装。安装完毕后,请查询
xinetd 管理的服务有哪些?
[root@www ~]# yum install xinetd
Setting up Install Process
Package 2:xinetd-2.3.14-29.el6.x86_64 already installed and latest  version  Nothing to do
# 画面中显示,已是最新的 xinetd !因此,已经有安装啰!
# 接下来找出 xinetd 所管理的服务群!

[root@www
~]# chkconfig xinetd on <==要先让 xinetd on 后才能看到底 下的 [root@www ~]# chkconfig --list ....(前面省略).... xinetd based services: chargen-dgram: off chargen-stream: off ....(中间省略).... rsync: off     <==下一小节的范例就用这玩意儿来解释 tcpmux-server: off telnet: on 上述结果最终输出的部分就是 xinetd 所管理的服务群啰!上述的服务之防火墙简 易设定,均可以透过 TCP wrappers 来管理的

 

例题:请问, rsyslogd, sshd, xinetd, httpd (若该服务不存在,请自行安装软件),这四个程序有没有支持 tcp wrappers 的抵挡功能?
答:因为支持 tcp wrappers 的服务一定包含 libwrap 这一个动态函式库,所以可使用 ldd 来观察该服务便可。简单的使用方式为:
[root@www ~]# ldd $(which rsyslogd sshd xinetd httpd)
# 这个方式能够将全部的动态函式库取出来查阅,不过须要眼睛搜寻。
# 能够透过底下的方式来处理更快!
[root@www ~]# for name in rsyslogd sshd xinetd httpd; do echo $name;
\
> ldd $(which $name) | grep libwrap; done
rsyslogd
sshd
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb41d3c9000)
xinetd
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f6314821000)
httpd上述的结果中,在该档名档下有出现 libwrap 的,表明有找到该函式库,才有支持tcp wrappers。因此, sshd, xinetd 有支持,
可是 rsyslogd, httpd 这两支程序则不支持。也就是说, httpd 与 rsyslogd 不可以使用
/etc/hosts.{allow|deny}来进行防火墙

 

9.2.2 /etc/hosts.{allow|deny} 的设定方式
 
比较规则
  • 先以 /etc/hosts.allow 为优先比对,该规则符合就予以放行;
  • 再以 /etc/hosts.deny 比对,规则符合就予以抵挡;
  • 若不在这两个档案内,亦即规则都不符合,最终则予以放行。
 
 
9.3 Linux的分包过滤软件:iptables

 
9.3.1 不一样Linux核心版本的防火墙软件
 
不过,不一样核心版本所使用的防火墙软件是不同的!由于核心支持的防火墙是逐渐演进而来的!
 
  • Version 2.0:使用 ipfwadm 这个防火墙机制;
  • Version 2.2:使用的是 ipchains 这个防火墙机制;
  • Version 2.4 与 2.6 :主要是使用 iptables 这个防火墙机制,不过在某些早期的 Version 2.4 版本的 distributions 当中,亦同时支持 ipchains (编译成为模块),好让用户仍然可使用来自 2.2 版的 ipchains 的防火墙规划。
 
          由于不一样的核心使用的防火墙机制不一样,且支持的软件指令与语法也不相同,因此在 Linux 上头设定属于你本身的防火墙规则时,要注意啊,先用 uname -r 追踪一下你的核心版本再说!若是你是安装 2004 年之后推出的 distributions ,那就不须要担忧了,由于这些 distributions 几乎都使用 kernel 2.6 版的核心。
 
 
9.3.2 封包进入流程:规则顺序的重要性
 
比对与分析顺序是很重要的
 
例子:
假设我预先定义 10 条防火墙规则好了,那么当 Internet 来了一个封包想要进入个人主机, 那么防火墙是如何分析这个封包的呢?

 

上图中主要的目的在告知你:『规则是有顺序的
 
若是全部的规则,此时就会透过预设动做 (封包政策, Policy) 来决定这个封包的去向。
 
9.3.3 iptables的表格(table)与链(chain)
 

 

刚刚图 9.3-1 的规则内容仅只是图 9.3-2 内的某个 chain 而已! 而预设的状况下,我们 Linux 的 iptables 至少就有三个表,
包括管理本机进出的 filter 、管理后端主机 (防火墙内部的其余计算机) 的 nat 、管理特殊旗标使用的 mangle (较少使用) 。 更有甚者,咱们还能够自定义额外的链;
 
  • filter (过滤器):主要跟进入 Linux 本机的封包有关,这个是预设的table;与如下链对应
    • INPUT: 主要与想要进入咱们 Linux 本机的封包有关;
    • OUTPUT:主要与咱们 Linux 本机所要送出的封包有关;
    • FORWARD:这个咚咚与 Linux 本机比较没有关系, 他能够『转递封包』到后端的计算机中,与下列 nat table 相关性较高。
  • nat (地址转换): 是 Network Address Translation 的缩写, 这个table主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与Linux 主机后的局域网络内计算机较有相关;与如下链对应
    • PREROUTING:在进行路由判断以前所要进行的规则(DNAT/REDIRECT)
    • POSTROUTING:在进行路由判断以后所要进行的规则(SNAT/MASQUERADE)
    • OUTPUT:与发送出去的封包有关
  • mangle (破坏者):这个table主要是与特殊的封包的路由旗标有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 以后加入了 INPUT 及FORWARD 链。 因为这个表格与特殊旗标相关性较高,因此像我们这种单纯的环境当中,较少使用 mangle 这个表格。
 
     因此说,若是你的 Linux 是做为 www 服务,那么要开放客户端对你的 www 要求有响应, 就得要处理 filter 的 INPUT 链; 而若是你的 Linux 是做为局域网络的路由器,那么就得要分析 nat 的各个链以及 filter 的 FORWARD 链才行。也就是说, 其实各个表格的链结之间是有关系的,
 
table与chain简单的关系能够由下图这么看:

 

咱们的 iptables 能够控制三种封包的流向:
  • 封包进入 Linux 主机使用资源 (路径 A):
    • 在路由判断后肯定是向 Linux主机要求数据的封包,主要就会透过 filter 的 INPUT 链来进行控管;
  • 封包经由 Linux 主机的转递,没有使用主机资源,而是向后端主机流动 (路径 B):
    • 在路由判断以前进行封包表头的修订做业后,发现到封包主要是要透过防火墙而去后端,此时封包就会透过路径 B 来跑动。 也就是说,该封包的目标并不是咱们的 Linux 本机。主要通过的链是 filter 的 FORWARD 以及 nat 的POSTROUTING, PREROUTING。
  • 封包由 Linux 本机发送出去 (路径 C):
    • 例如响应客户端的要求,或者是Linux 本机主动送出的封包,都是透过路径 C 来跑的。先是透过路由判断, 决定了输出
 
因为 mangle 这个表格不多被使用,若是将图 9.3-3 的 mangle 拿掉的话,那就容易看的多了:

 

 
透过图 9.3-4 你就能够更轻松的了解到,事实上与本机最有关的实际上是 filter这个表格内的 INPUT 与 OUTPUT 这两条链,
  • 若是你的 iptables 只是用来保护 Linux主机自己的话,那 nat 的规则根本就不须要理他,直接设定为开放便可;
  • 若是你的防火墙事实上是用来管制 LAN 内的其余主机的话,那么你就必需要再针对 filter 的 FORWARD 这条链,
    • 还有 nat 的 PREROUTING, POSTROUTING 以及OUTPUT 进行额外的规则订定才行。
 
iptables包含4个表,5个链。其中表是按照对数据包的操做区分的,链是按照不一样的Hook点来区分的,表和链其实是netfilter的两个维度。
iptables中表和链的对应关系以下:

 

9.3.4 本机的iptables语法

 
注意: 防火墙的设定主要使用的就是 iptables 这个指令而已
 
iptables 至少有三个预设的 table (filter, nat, mangle),较经常使用的是本机的 filter 表格, 这也是默认表格啦。 另外一个则是后端主机的 nat 表格,至于 mangle 较少使用 因为不一样的 table 他们的链不同,致使使用的指令语法或多或少都有点差别。
 
9.3.4-1 规则的观察与清除
 
iptables用法
[root@www ~]# iptables [-t tables] [-L] [-nv]
选项与参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快不少!
-v :列出更多的信息,包括经过该规则的封包总位数、相关的网络接口等
 
范例一:列出 filter table 三条链的规则
[root@www ~]# iptables -L -n
Chain INPUT (policy ACCEPT)        <==针对 INPUT 链,且预设政策为可接受
target prot opt source destination <==说明栏
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED<==第 1 条规则
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0               <==第 2 条规则
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0                <==第 3 条规则
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22    <==第 4 条规则
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with             <==第 5 条规则
icmp-host-prohibited
Chain FORWARD (policy ACCEPT)      <==针对 FORWARD 链,且预设政策为可接受
target prot opt source destination <==说明栏
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
<==针对 OUTPUT 链,且预设政策为可接受
target prot opt source destination

 

范例二:列出 nat table 三条链的规则
[root@www ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
在上面,每个 Chain 就是前面提到的每一个链,Chain 那一行里面括号的policy 就是预设的政策, 那底下的 target, prot 表明什么呢?
 
  •  target:表明进行的动做, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!
  •  prot:表明使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
  •  opt:额外的选项说明
  •  source :表明此规则是针对哪一个『来源 IP』进行限制?
  •  destination :表明此规则是针对哪一个『目标 IP』进行限制?
 
范例一的INPUT的5条规则依据输出结果说明:
  • ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED<==第 1 条规则
    • 只要是封包状态为 RELATED,ESTABLISHED 就予以接受
  • ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 <==第 2 条规则
    • 只要封包协议是 icmp 类型的,就予以放行
  • ACCEPT all -- 0.0.0.0/0 0.0.0.0/0  <==第 3 条规则
    • 不管任何来源 (0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式(prot 为 all),统统都接受
  • ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 <==第 4 条规则
    • 只要是传给 port 22 的主动式联机 tcp 封包就接受
  • REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with          <==第 5 条规则
    • 所有的封包信息统统拒绝
 
最有趣的应该是第 3 条规则了,怎么会全部的封包信息都予以接受?若是都接受的话,那么后续的规则根本就不会有用!
其实那条规则是仅针对每部主机都有的内部循环测试网络 (lo) 接口啦!若是没有列出接口,那么咱们就很容易搞错,所以iptables-save,则是一个不错的选择;
 
iptables-save 用法
查看规则
[root@www ~]# iptables-save [-t table]
选项与参数:
-t :能够仅针对某些表格来输出,例如仅针对 nat 或 filter 等等
 
[root@www ~]# iptables-save
# Generated by iptables-save v1.4.7 on Fri Jul 22 15:51:52 2011
*filter                       <==星号开头的指的是表格,这里为 filter
:INPUT ACCEPT [0:0]           <==冒号开头的指的是链,三条内建的链
:FORWARD ACCEPT [0:0]         <==三条内建链的政策都是 ACCEPT 啰!
:OUTPUT ACCEPT [680:100461]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   <==针对 INPUT的规则
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT                          <==这条很重要!针对本机内部接口开放!
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited   <==针对FORWARD 的规则
COMMIT
# Completed on Fri Jul 22 15:51:52 2011
由上面的输出来看,有底线且内容含有 lo 的那条规则当中,『 -i lo 』指的就是由 lo适配卡进来的封包! 这样看就清楚多了
 
清除规则
[root@www ~]# iptables [-t tables] [-FXZ]
选项与参数:
-F :清除全部的已订定的规则;
-X :杀掉全部使用者 "自定义" 的 chain (应该说的是 tables )啰;
-Z :将全部的 chain 的计数与流量统计都归零
 
范例一:清除本机防火墙 (filter) 的全部规则
[root@www ~]# iptables -F
[root@www ~]# iptables -X
[root@www ~]# iptables -Z

 

因为这三个指令会将本机防火墙的全部规则都清除,但却不会改变预设政策 (policy) , 因此若是你不是在本机下达这三行指令时,极可能你会被本身挡在家门外 (若 INPUT 设定为 DROP 时)!要当心啊!
 
9.3.4-2 定义预设政策(policy)
什么是政策
当你的封包不在你设定的规则以内时,则该封包的经过与否,是以 Policy 的设定为准
 
政策用法:
[root@www ~]# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
选项与参数:
-P :定义政策( Policy )。注意,这个 P 为大写啊!
ACCEPT :该封包可接受
DROP   :该封包直接丢弃,不会让 client 端知道为什么被丢弃。
 
范例一:将本机的 INPUT 设定为 DROP ,其余设定为 ACCEPT
[root@www ~]# iptables -P INPUT DROP
[root@www ~]# iptables -P OUTPUT ACCEPT
[root@www ~]# iptables -P FORWARD ACCEPT
[root@www ~]# iptables-save
# Generated by iptables-save v1.4.7 on Fri Jul 22 15:56:34 2011
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Fri Jul 22 15:56:34 2011
# 因为 INPUT 设定为 DROP 而又还没有有任何规则,因此上面的输出结果显示:
# 全部的封包都没法进入你的主机!是不通的防火墙设定! (网络联机是双向 的)

 

9.3.4-3 规则设定
 
 
[root@www ~]# iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源 IP/网域] [-d 目标 IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
选项与参数:
-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)、拒绝(REJECT),及记录(LOG)
 
iptables 的基本参数就如同上面所示的,仅只谈到 IP 、网域与装置等等的信息, 至于 TCP, UDP 封包特有的埠口 (port number) 与状态 (如 SYN 旗标) 则在下小节才会谈到。
 
范例一:设定 lo 成为受信任的装置,亦即进出 lo 的封包都予以接受
[root@www ~]# iptables -A INPUT -i lo -j ACCEPT
上面并无列出 -s, -d 等等的规则,这表示:不论封包来自何处或去到哪里,只要是来自 lo 这个界面,就予以接受!
这个观念挺重要的,就是『没有指定的项目,则表示该项目彻底接受
 
范例二:只要是来自内网的 (192.168.100.0/24) 的封包统统接受
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT
# 因为是内网就接受,所以也能够称之为『信任网域』啰。

 

范例三:只要是来自 192.168.100.10 就接受,但 192.168.100.230 这个恶意来源就丢弃
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP
# 针对单一 IP 来源,可视为信任主机或者是不信任的恶意来源喔
查看刚刚所设置的
[root@www ~]# iptables-save
# Generated by iptables-save v1.4.7 on Fri Jul 22 16:00:43 2011
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1724]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.100.0/24 -i eth1 -j ACCEPT
-A INPUT -s 192.168.100.10/32 -i eth1 -j ACCEPT
-A INPUT -s 192.168.100.230/32 -i eth1 -j DROP
COMMIT
# Completed on Fri Jul 22 16:00:43 2011

 

范例四:记录某个端口
[root@www ~]# iptables -A INPUT -s 192.168.2.200 -j LOG
[root@www ~]# iptables -L -n
target prot opt source destination
LOG all -- 192.168.2.200 0.0.0.0/0 LOG flags 0 level 4
只要有封包来自 192.168.2.200 这个 IP时, 那么该封包的相关信息就会被写入到核心讯息,亦便是 /var/log/messages 这个档案当中

 

9.3.4-4 TCP, UDP 的规则比对:针对端口设定
 
在谈到 TCP 与 UDP 时,比较特殊的就是那个端口 (port),在 TCP 方面则另外有所谓的联机封包状态,
包括最多见的 SYN 主动联机的封包格式。那么如何针对这两种封包格式进行防火墙规则的设定呢?
 
[root@www ~]# iptables [-AI 链] [-io 网络接口] [-p tcp,udp]  [-s 来源 IP/网域] [--sport 埠口范围]  [-d 目标 IP/网域] [--dport 埠口范围] -j [ACCEPT|DROP|REJECT]
选项与参数:
--sport 端口范围:限制来源的端口号码,端口号码能够是连续的,例如1024:65535
--dport 埠口范围:限制目标的端口号码。
 
事实上就是多了那个 --sport 及 --dport 这两个玩意儿,重点在那个 port 上面啦!不过你得要特别注意,由于仅有 tcp 与 udp 封包具备端口,所以你想要使用 --dport,--sport 时,得要加上 -p tcp 或 -p udp 的参数才会成功
 
范例一:想要联机进入本机 port 21 的封包都抵挡掉:
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

 

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

 

范例三:只要来自192.168.1.0/24的1024:65535端口的封包,且要想联机到本机的ssh port 就予以抵挡:
[root@www ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24  --sport 1024:65534 --dport ssh -j DROP

 

若是忘记加上 -p tcp 就使用了 --dport 时,会发生啥问题呢
[root@www ~]# iptables -A INPUT -i eth0 --dport 21 -j DROP
iptables v1.4.7: unknown option `--dport'
Try `iptables -h' or 'iptables --help' for more information

 

iptables针对tcp特殊封包,
如主动联机SYN标志的封包处理
 
范例一:未来自任何地方来源 port 1:1023 的主动联机到本机端的 1:1023 联机丢弃
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --sport 1:1023  --dport 1:1023 --syn -j DROP

 

9.3.4-5 iptables 外挂模块: mac 与 state
 
状态模块来分析 『这个想要进入的封包是否为刚刚我发出去的响应?』
若是是刚刚我发出去的响应,那么就能够予以接受放行;
 
用法:
[root@www ~]# iptables -A INPUT [-m state] [--state 状态]
选项与参数:
-m : 一些 iptables 的外挂模块,主要常见的有:
     state :状态模块
     mac :网络卡硬件地址 (hardware address)
--state :一些封包的状态,主要有:
          INVALID :无效的封包,例如数据破损的封包状态
          ESTABLISHED:已经联机成功的联机状态;
          NEW :想要新创建联机的封包状态;
          RELATED :这个最经常使用!表示这个封包是与咱们主机发送出去的封包有关
 
范例一:只要已创建或相关封包就予以经过,只要是不合法封包就丢弃
[root@www ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@www ~]# iptables -A INPUT -m state --state INVALID -j DROP
如此一来,咱们的 iptables 就会主动分析出该封包是否为响应状态,如果的话,就直接予以接受
呵呵! 这样一来你就不须要针对响应的封包来撰写个别的防火墙规则了!这真是太棒了

 

 
范例二:针对局域网络内的 aa:bb:cc:dd:ee:ff 主机开放其联机
[root@www ~]# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
选项与参数:
--mac-source :就是来源主机的 MAC 啦!

 

9.3.4-6 ICMP 封包规则的比对:针对是否响应 ping 来设计
 
ICMP 的类型至关的多,并且不少 ICMP 封包的类型都是为了要用来进行网络检测用的!因此最好不要将全部的 ICMP 封包都丢弃!若是不是作为路由器的主机时,一般咱们会把 ICMP type 8 (echo request) 拿掉而已,让远程主机不知道咱们是否存在,也不会接受 ping 的响应就是了;
 
用法:
[root@www ~]# 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@www ~]# 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@www ~]# sh somefile

 

9.3.4-7 超阳春客户端防火墙设计与防火墙规则储存
 
站在客户端且不提供网络服务的 Linux 本机角色时, 你应该要如何设计你的防火墙呢?
 
  1. 规则归零:清除全部已经存在的规则 (iptables -F...)
  2. 预设政策:除了 INPUT 这个自定义链设为 DROP 外,其余为预设 ACCEPT;
  3. 信任本机:因为 lo 对本机来讲是至关重要的,所以 lo 必须设定为信任装置;
  4. 回应封包:让本机主动向外要求而响应的封包能够进入本机(ESTABLISHED,RELATED)
  5. 信任用户:这是非必要的,若是你想要让区网的来源可用你的主机资源时
 
此次修改的各类设定想要在下次开机还保存,那就得要进行『 /etc/init.d/iptables save 』这个指令加参数;
 
 
9.3.5 IPv4 的核心管理功能: /proc/sys/net/ipv4/*
 
除了 iptables 这个防火墙软件以外,其实我们 Linux kernel 2.6 提供不少核心预设的攻击抵挡机制喔! 因为是核心的网络功能,因此相关的设定数据都是放置在/proc/sys/net/ipv4/ 这个目录当中。 至于该目录下各个档案的详细资料,能够参考核心的说明文件
 
/proc/sys/net/ipv4/tcp_syncookies:DOS攻击防护
 
阻断式服务 (DoS) 攻击法当中的一种方式,就是利用TCP 封包的 SYN 三向交握原理所达成的, 这种方式称为 SYN Flooding。
 
SYN Cookie 时,主机在发送 SYN/ACK 确认封包前,会要求 Client 端在短期内回复一个序号,这个序号包含许多本来 SYN 封包内的信息,包括 IP、port 等
 
若 Client 端能够回复正确的序号,那么主机就肯定该封包为可信的,所以会发送 SYN/ACK 封包,不然就不理会此一封包
相关文章
相关标签/搜索