Linux -- 防火墙

防火墙

防火墙类型

  • 入侵检测(IDS)不阴断网络访问进行网络的检测,协助IPS进行工作
  • 入侵防御(IPS)以透明模式分析数据内容,进行有效的防御数据攻击
  • 防火墙 (隔离功能)
防火墙的分类
  • 主机防火墙
    • 服务于当前主机的
  • 网络防火墙
    • 服务于一定范围的网络
  • 硬件防火墙
    • 大部门公司都采用了硬件防火墙,服务于一定范围的网络
    • 优点:处理速度快,专用的防火墙设备
    • 缺点:价格贵
  • 软件防火墙
    • 运行于通用硬件平台之上的防火墙软件
  • 网络层防火墙
    • 适用于OSI 下三层或四层的网络层防火墙
    • 包过滤防火墙,制定ACL 进行数据的源地址及目的地址过滤
    • 优点:过滤目的明确,处理速度快,便于维护。
    • 缺点:数据内容无法进行过滤。
  • 应用层防火墙

    • 应用于OSI七层的防火墙

    Linux-防火墙

    Linux的防火墙已经集成到Linux的内核中,使用的是Netfilter 组件。内核中选取了五个位置进行出入站的规则定义点,这五个点俗称勾子(hook)或链 ,三种报文的流向以及对报文流向处理的四张表

  • 五个勾子

    • INPUT
    • OUTPUT
    • FORWARD
    • PREROUTING
    • POSTROUTING
  • 三种报文流向

    • 入站:PREROUTING –> INPUT –> 进程处理
    • 出站:进程处理 –> OUTPUT –> POSTROUTING
    • 转发:PREROUTING –> FORWARD –> POSTROUTING
      这里写图片描述
  • 四表 :作用在上图三种报文流向的规则库
    • filter
      • 作用在:INPUT , FORWARD , OUTPUT
    • nat
      • 作用在:PREROUTING , POSTROUTING , OUTPUT , INPUT
    • mangle
      • 作用在:PREROUTING , POSTROUTING , INPUT , OUTPUT , FORWARD
    • raw
      • 作用在:PREROUTING , OUTPUT
  • 规则rule的定义,对匹配到的报文进行处理,处理的方式有定义
    • 内建的处理动作:ACCEPT , DROP , REJECT , SNAT , DNAT , MASQUERADE , MARK , LOG …
    • 自定义处理动作: 自定义chain(链)
    • 规则要添加在链上才生效,添加在自定义上不会自动生效
  • 链chain

    • 内置链:每个内置链对应一个勾子
    • 自定义链:用于对内置链进行扩展补充,只有HOOK勾子调用自定义链才生效。
      这里写图片描述
  • 对应的Linux 系统防火墙及命令

    • CentOS 7 firewalld.service , iptables

    • CentOS 6 iptables

    • 对应的命令
      • -t table —-表示表名,默认是filter表
      • -N : new 自定义一条新的规则链
      • -X :delete ,删除自定义的空规则链 (如自定义链被跳用,先清除跳用再清)
      • -P :设置默认策略,ACCEPT , DROP ,REJECT,
      • -E :重命名自定义链
      • -L :list ,列出指定链上的所有规则
      • -n :numberic 以数字格式显示地址和端口号
      • -v :verbose , 详细信息
      • -vv : 更详细信息
      • -x :显示计数器结果的精确值,而非单位转换后的易读值
      • –line -numbers :显示规则的序号
      • -S :命令格式显示链上规则
      • -A :append , 追加
      • -I :插入,要指明插入至的规则编号,默认为第一条
      • -D:delete 删除 1,指明规则序号 2,指明规则本身
      • -R :替换指定链上的规则
      • -F :清空指定的规则链 默认清空INPUT
      • -Z :置零
    • 匹配条件

      • (1). 基本匹配条件,无需加载模块
        • [!] -s , –source address[/mask][,…]; 源IP地址或规定一定范围
        • [!] -d , –destination address[/mask][,…]:目标IP地址或规定一定范围
        • [!] -p , –protocol protocol : 指定协议,0表示所有(all)
        • [!] -i ,–in-interface name :报文入站口
        • [!] -o,–out-interface name:报文出站口
      • (2). 扩展匹配条件,需要加载模块
      • [!] -p tcp
        • [!]–source-port , –port port[:port]:匹配报文源端口,可指定端口范围
        • [!]–destination-port , –dport port[:port]:匹配报文目标端口,可指定范围
        • [!]–tcp-flags mask comp 匹配三次挥手的报文形式
        • 例: iptables -A INPUT -p tcp –tcp-flags SYN,ACK,FIN,RST SYN -j REJECT
        • [!] –syn : 用于匹配第一次握手
      • [!] -p udp
        • [!]–source-port , –port port[:port]:匹配报文源端口,可指定端口范围
        • [!]–destination-port , –dport port[:port]:匹配报文目标端口,可指定范围
      • [!] -p icmp

        • [!] –icmp-type {type[/code]|typename}
          • type/code
            • 0/0 echo-reply –> icmp 应答
            • 8/0 echo-request –>icmp请求
      • 显示扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块

        • [ -m matchname [ per-match-options ]]
    • 处理动作:

      • -j targetname [per-target-options]
        • 简单,ACCEPT,DROP
        • 扩展:REJECT , REDIRECT , RETURN , LOG , MARK , DNAT , SNAT , MASQUERADE
示例–做用在filter表上

1.multiport扩展的使用–以离散方式定义多个端口,最多15个
用法:

  • [!] –source-ports,–sports port[,port|,port:port]…
  • [!] –destination-ports,–dports port[,port|,port:port]..
  • [!] –ports port[,port|,port:port]…多个源或目标端口
[root@localhost ~]#iptables -A INPUT -s 192.168.3.0/24 -d 172.18.0.0/16 -p tcp -m multiport --dports 20:25,80 -j ACCEPT 

2.iprange扩展的使用 – 指明连续的IP地址范围
用法:

  • [!] –src-range from[-to] 源IP地址范围
  • [!] –dst-range from[-to] 目标IP地址范围

    “`
    [root@localhost ~]#iptables -A INPUT -d 192.168.3.0/24 -p tcp –dport 80 -m iprange –src-range 192.168.3.2-192.168.3.11 -j DROP

3.mac扩展 – 指明源MAC地址
用法:

  • [!] –mac-source MAC
iptables -A INPUT -s 192.168.3.10 -m mac --mac-source 00:0c:29:fd:e7:45 -j REJECT

4.string扩展– 对报文中的应用层数据做字符串匹配检测
用法:

  • –algo {bm|kmp} :字符串匹配检测算法
    • bm: Boyer-Moore
    • kmp:knuth-pratt-morris
  • –for offset 开始偏移
  • –to offset 结束偏移

[!] –string pattern:要检测的字符串模式
[!] –hex-string pattern:要检测字符串模式, 16进制格式

[root@localhost html]#iptables -A OUTPUT -s 192.168.3.3  -p tcp --sport 80 -m string --algo bm --string "test" -j REJECT    作用在出口勾子上,因为是3.3的回应包,没明确指定目标地址就是所有地址

5.time扩展–根据将报文到达的时间与指定的时间范围进行匹配
用法:

  • –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
  • –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
  • –timestart hh:mm[:ss] 时间
  • –timestop hh:mm[:ss]
  • [!] –monthdays day[,day…] 每个月的几号
  • [!] –weekdays day[,day…] 星期几
  • –kerneltz:内核时区,不建议使用, CentOS7系统默认为UTC(注意: centos6 不支持kerneltz , –localtz指定本地时区(默认))
    “`
    [root@localhost ~]#iptables -A INPUT -s 192.168.3.2 -d 192.168.3.3 -p tcp –dport 80 -m time –timestart 00:30 –timestop 23:30 –weekdays Thu -j DROP

6.connlimit扩展–根据每个IP做并发连接数量匹配
用法:

  • –connlimit-upto n:连接的数量小于等于n时匹配
  • –connlimit-above n:连接的数量大于n时匹配

    [root@localhost ~]#iptables -A INPUT -s 192.168.3.2 -p tcp --dport 22 -m connlimit --connlimit-above 1 -j REJECT 

    7.limit扩展–基于收发报文的速率做匹配
    用法:

  • –limit rate[/second|/minute|/hour|/day]

  • –limit-burst number
[root@localhost ~]#iptables -A INPUT -s 192.168.3.2 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT 
[root@localhost ~]#iptables -I INPUT 2 -p icmp -j REJECT

8.state扩展–根据“连接追踪机制”去检查连接的状态
conntrack的几种状态:

  • NEW :新发出的请求,连接追踪信息库中不存在此连接的
    相关信息条目,因此,将其识别为第一次发出的请求
  • ESTABLISHED:NEW状态之后,连接追踪信息库中为
    其建立的条目失效之前期间内所进行的通信状态
  • RELATED: 新发起的但与已有连接相关联的连接,如:
    ftp协议中的数据连接与命令连接之间的关系
  • INVALID : 无效的连接,如flag标记不正确
  • UNTRACKED : 未进行追踪的连接,如raw表中关闭追踪

用法:

  • [!] –state state
[root@localhost ~]#iptables -A INPUT -s 192.168.3.2 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j REJECT
示例–做用在NAT表上

使用在NAT表上的链有:PREROUTING , INPUT , OUTPUT , POSTROUTING
SNAT: 内网地址进行转换,和外网进行通迅的转换过程,我们称之为SNAT;SNAT是修改源地址
DNAT:本局外网地址映射至本局内网地址,我们称之为DNAT;DNAT是修改目标地址
PNAT: 内网地址转换为外网地址加端口号

SNAT示例:SNAT:固定IP
–to-source [ipaddr[-ipaddr]][:port[-port]]
–random

测试:
条件:三台linux虚拟机
描述:A机器,内网地址:192.168.3.2 充当内网客户机
     B机器,内网地址:192.168.3.3 外网地址:172.18.6.50 用防火墙使用
     C机器,外网地址:172.18.6.51 充当外网的website

操作:
A:设置默认路由,下一跳地址是192.168.3.3
B:设置防火墙SNAT的转换,转换地址为172.18.6.50
C:配置下HTTPD的服务 无需设置路由

A的配置
[root@CentOS6 ~]#route add default gw 192.168.3.3
[root@CentOS6 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.3.3     0.0.0.0         UG    0      0        0 eth0

B的配置
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.3.0/24 ! -d 192.168.3.0/24 -j SNAT --to-source 172.18.6.50

操作结果:

A访问C的website
[root@CentOS6 ~]#curl -I 172.18.6.51
HTTP/1.1 200 OK
Date: Sat, 21 Oct 2017 03:27:25 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux)
Last-Modified: Sat, 21 Oct 2017 03:26:13 GMT
ETag: "1d-55c0626cb7f3b"
Accept-Ranges: bytes
Content-Length: 29
Content-Type: text/html; charset=UTF-8

ping包
[root@CentOS6 ~]#ping 172.18.6.51
PING 172.18.6.51 (172.18.6.51) 56(84) bytes of data.
64 bytes from 172.18.6.51: icmp_seq=1 ttl=63 time=0.672 ms
64 bytes from 172.18.6.51: icmp_seq=2 ttl=63 time=0.818 ms
64 bytes from 172.18.6.51: icmp_seq=3 ttl=63 time=0.426 ms
64 bytes from 172.18.6.51: icmp_seq=4 ttl=63 time=0.532 ms

SNAT示例:SNAT:MASQUERADE:动态IP,如拨号网络
–to-ports port[-port]
–random

测试:条件如上,只是B机器的外网地址IP随机修改
B的配置
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.3.0/24 ! -d 192.168.3.0/24 -j MASQUERADE

DNAT示例:外网映射内网IP及端口
–to-destination [ipaddr[-ipaddr]][:port[-port]]

测试:条件如上,这次我们使用172.168.6.50:80的地址及端口映射至内网192.168.3.2:80的地址端口

B的配置:
[root@localhost ~]#iptables -t nat -A PREROUTING -d 172.18.6.50 -p tcp --dport 80 -j DNAT --to-destination 192.168.3.2:80

C使用curl 172.18.6.50得出的结果
[root@localhost ~]# curl 172.18.6.50
this is A website

补充内容:CentOS 7 的防火墙新出了个管理服务firewalld 有图形界面操作工具:firewall-config 也有命令行工具:firewall-cmd 。firewalld与iptables 两者如需使用只能选择其一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值