1. 自述
关于监控,可能我们用到防火墙的案例并不多,甚至少之又少,在公安网中有网闸,在政府网中可能会有单独的防火墙或者网闸,但在这里DZ先生建议,只要厂家的平台是基于linux系统,我建议您还是了解下,因为当遇到问题的时候,至少您知道从哪里下手,或者自己就能解决,就不必要等待二线或者别人的帮助,也可以获得客户对你的认可。了解知道的越多,就越能更加快速的处理问题,提高效率。

2. 防火墙规则

如下图所示,internet网中一个报文想要访问服务器,当进入服务器的那一刻,保安(防火墙)就会对这个报文的身份进行确认,看是否符合进入的规则,如果有10条规则,从第一条开始匹配,只要匹配中一条,则下面的规则就无需在匹配,且放此报文进入。一般防火墙的最后一条都会有一条拒绝所有进入的规则。另外防火墙就跟办公大楼一样,保安只能决定放不放人进入,但不能知道和决定此人会在里面干些什么事情。

zabbix 监控防火墙会话数 监控系统防火墙_内网

3. 防火墙表table和链chain

防火墙里有三张表 filter    nat    mangle
每个表里有各自的链(chain),这个链是用来干嘛的?主要控制方向报文的,如INPUT是控制进来的报文,OUTPUT是控制出去的报文。
filter : INPUT   OUTPUT  FORWARD 链
             INPUT 控制外面报文进入防火墙
             OUTPUT 控制防火墙里面报文出去
             FORWARD控制内外网报文

nat :  POSTROUTING     PREROUTING 链
            POSTROUTING 主要用于源NAT转换(SNAT)
            PREROUTING   主要用于目的NAT转换(DNAT)
            OUTPUT            主要在目的NAT中,让防火墙可以访问自己,下文会有详细介绍

mangle:此种环境用的很少,暂不做介绍

4. 防火墙语法

(a) iptables [-t table] command  chains [creteria]  -j  action

(b) 详细点的规则:

iptables -t filter  -A{I,D}  INPUT{OUTPUT,FORWARD} {n}   -p tcp{udp,icmp}   \

 > {!} {-s 来源IP/网域 ,-d 目标IP/网域}  {--sport m:n,--dport x:y}    -j {ACCEPT,DROP,REJECT,LOG}

上面为两种语法规则,根据自己的需求,记住其中一种规则写法


-t :               table就是表名,filter/nat/mangle三个表中的一个,默认是filter表

command:   告诉程序如何做,比如:插入一个规则,还是删除等

chains 链:    有五个,PREROUTING  POSTROUTING INPUT OUTPUT FORWARD

action:          处理动作,有ACCEPT  DROP REJECT  SNAT  DNAT LOG

                         DROP:丢弃报文,没有信息反馈

                         REJECT:丢弃报文,丢了有信息反馈


zabbix 监控防火墙会话数 监控系统防火墙_NAT_02


                               防火墙语法图command

command指定iptables对我们提交的规则要做什么样的操作。这些操作可能是在某个表里增加或删除一些东西,或其他的动作。一下是iptables可用的command(如不做说明,默认表是filter)

zabbix 监控防火墙会话数 监控系统防火墙_zabbix 监控防火墙会话数_03


举例:

1. iptables -t filfer -A INPUT -s 192.168.0.1 -p tcp --dport 22 -j ACCEPT 

 #在现有防火墙规则列表的末尾增加一条允许主机192.168.0.1访问防火墙后面端口为22的主机


2. iptables -I INPUT 1 -s !192.168.1.0/24 -d 192.168.2.0/24 -p tcp --dport 22 -j DROP

#插入一条规则,将此规则放在第一条,除了192.168.1.0/24段,其他段访问192.168.2.0/24段目的端口为22的服务包都丢弃

# iptables后面没有-t filter,默认就是写入filter表里

# INPUT 1 意思为将此规则置位第一条

# !感叹号在这边就是除了,如! 192.168.1.0/24   意思为除了192.168.1.0段。其他段XXXXXX


3. iptables -D INPUT 2 删除第二条规则,可以用iptables -nL --line-numbers  查看规则序列号


4. iptables -F    清除规则,包含内置

    iptables -X    清除自定义规则

    iptables -Z    数据包匹配的数清0


5. iptables-save  保存规则,如果不保存,之前写的规则都是在缓存里的,系统或者服务重启就没有了


6. 防火墙的开启,状态,开机启动如何设置

7. 默认防火墙规则设置(filter表)

/etc/init.d/iptables start | stop | status  #开启防火墙 | 关闭 | 查看状态
     chkconfig iptables off | on                    #开机启动还是关闭防火墙

iptables -P INPUT  DROP
     iptables -P OUTPUT  ACCEPT
     iptables -P FORWARD ACCEPT

    #一般在内网中,防火墙对内部是信任的,主要是控制外网进入内网的报文和命令结合常用的选项

zabbix 监控防火墙会话数 监控系统防火墙_内网_04


举例:

1. iptables -L        显示所有规则

2. iptables -n -L    显示所有规则,-n 不要反向解析即: 不讲ip地址解析为主机名

3. iptables -nvL    -v显示详细信息,可以看到匹配的字节

4. iptables -nL --line-numbers   显示规则,把序列号也显示出来

5. 在系统里查看配置文件cat /etc/sysconfig/iptables

    如果你的系统没有iptables,但是可以通过iptables -n -L查看到防火墙规则,可以通过以下方法恢复:

    iptables -P OUTPUT ACCEPT

    /etc/init.d/iptables save

 

creteria

1)基本匹配

zabbix 监控防火墙会话数 监控系统防火墙_内网_05


 

2)隐含匹配
这种匹配操作是自动的或隐含的装入内核的。例如使用-p tcp时,不需要再装入任何东西就可以匹配只有IP包才有的特点。隐含匹配针对三种不同的协议,即TCP   UDP ICMP。它们分别有一套适用于相应协议的判断标准
TCP匹配 只能匹配TCP包的细节,必须有-p tcp作为前提

--sport port   基于TCP包的源端口来匹配包
      --dport port   基于TCP包的目的端口来匹配包
      --tcp-flags tcp标志位    有两个参数列表。第一个是指定要检查的标识位;第二个是指定为1的标识位
 UDP匹配
      --sprot port
      --dport  port
 ICMP匹配
       --icmp-type
       8 request 请求
       0 reply  回复 响应

3)显示匹配
(1)多端口匹配:-m multiport --sports 源端口列表
          -m multiport --sports 目的端口列表
  例:iptables -A INPUT -p tcp -m multiport --dports 25,80,110,143 -j ACCEPT
              #外网访问内网的25,80,110,143端口都放行

(2)IP范围匹配:-m iprange --src-range  IP范围
  例:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
              #对源地址192.168.4.21至4.28的报文进行转发

(3)MAC地址匹配:-m mac --mac-source MAC地址
  例:iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
            #基于mac地址进行过滤

(4)状态匹配:-m state --state 连接状态
  NEW:与任何连接无关的
  ESTABLISHED:响应请求或已建立连接的
  RELATED:与已有连接有相关性的,如FTP数据连接
  例:只开放本机的Web服务,但对发给本机的TCP应答报文予以放行,其他入站报文均丢弃

    iptables -P INPUT DROP
       iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
       iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

       例:默认出去的报文都丢弃,但只对外面访问内部端口为22的报文给予回应

       iptables -P OUTPUT DROP

       iptables -I OUTPUT -p tcp --sport 22  -m state --state RELATED, ESTABLISHED -j  ACCEPT

       #外网访问内网,进来时目的端口是22,出去时源端口为22,对已有的连接相关性的报文进行放行。


5. 防火墙NAT


1)源NAT

zabbix 监控防火墙会话数 监控系统防火墙_NAT_06


 

步骤:

1) echo 1 > /proc/sys/net/ipv4/ip_forward  ----开启防火墙转发功能
 2) vi /etc/sysctl.conf
 # Controls IP packet forwarding
 net.ipv4.ip_forward = 0  -------------改为1,开机自己开启
 sysctl -p   立即生效

防火墙规则
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.1.1     
#源地址为10.0.0.0/24段的地址在访问公网时转换为192.168.1.1地址进行访问,这个是固定公网地址的方式

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
#源地址为10.0.0.0/24段的地址在访问公网时,公网地址不固定,是自动获取来的,这个是固定公网地址不固定的时候使用

NAT表的一些命令
iptables -t nat -n -L  一定要指明是nat表
iptables -t nat -A POSTROUTING   源NAT用链POSTROUTING
iptables -t nat -A PREROUTING     目的NAT用链PREROUTING
-j SNAT     源NAT -j 后面的动作为SNAT
-j DNAT     目的NAT -j 后面的动作为DNAT

2) 目的NAT
目的NAT的由来,如防火墙内的一台www服务器要让公网访问它的80端口,正常情况下,外网是没法直接访问至内网的,只能内网将此服务器的ip和端口映射出来,公网才能进行访问。公网访问www服务器的公网地址和端口,到达服务器内部时,公网地址会被替换为私网地址。
外网访问内网服务器80端口 做DNAT过程:
[root@CENTOS ~]# iptables -t nat -A PREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80
#将外网访问192.168.1.1端口为80,转换为10.0.0.1端口为80

3) NAT中的OUTPUT
之前在filter表中说过OUTPUT链的作用,这边OUTPUT是干嘛的呢?在防火墙NAT中,防火墙自己访问192.168.1.1:80,其自己是不能把192.168.1.1转换为10.0.0.1的,这边的OUTPUT的作用,就是能够让防火墙访问自己也能做DNAT转换。
[root@CENTOS ~] iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80
用完这条命令后,防火墙访问自己的公网地址192.168.1.1的80端口时,其地址可以被转化为192.168.1.1