linux防火墙简介–iptables配置策略

随风浪子~      2022-02-10     380

关键词:

Linux防火墙简介 – iptables配置策略

Netfilter/iptables简介


 

    要想真正掌握Linux防火墙体系,首先要搞清楚Netfilter和iptables的关系,Netfilter和iptables包含在Linux2.4以后的内核中,可实现防火墙、NAT和数据包分割的功能。Netfilter采用模块化设计,具有良好的可扩展性。Netfilter是一个框架,iptables则是我们用户层的工具,通过iptables我们可以配置很多规则,这些规则加载到Netfilter框架中生效。

    Netfilter可以和协议栈很好的契合,如图1所示;协议栈底层实现机制就是这样,ABCDE就是我们可以配置规则的点,BD我们可以控制本机的数据包,ACE可以控制经过本网卡转发的数据包。那么在Netfilter中如何实现?如图2所示;针对ABCDE五个点,Netfilter定义了五个hook函数;五个钩子函数对应了五个规则链:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING;我们使用iptables配置的规则就在这五个规则链中生效。

  iptables并不是服务,iptables/natfilter相关的内核模块,包括以下几个:iptables_net、iptables_filter、iptables_mangle、iptables_raw,这些模块我们也可以自己写脚本让它们运行,不一定非使用iptables。

图1. 协议栈底层实现

图2. Netfilter实现

Iptables简介


 

    IPtables主要包括四方面的功能:

        Filter(过滤功能)可配置在INPUT链、OUTPUT链、FORWARD链

        NET(地址转换功能)可配置在PREROUTING链、POSTROUTING链、OUTPUT链

        Mangle(修改报文首部)可配置在五个链上

        Raw(原始格式)可配置在PREROUTING链和OUTPUT链

    我们主要介绍Filter和NET功能

        如果在某一个链上配置了多个功能的规则改以什么顺序生效呢?如下图所示:

图3. 规则生效顺序图

      Iptables也可以自定义链,但是必须由默认的这五个链调用,类似于中断功能,如果自定义链匹配则不必返回,如果自定义链不匹配,则返回到主链继续匹配。一般将那些同类的,规则比较多的独立出来,用户可以删除自定义的空链。

    每个规则链都有两个内置的计数器,一个记录被匹配的报文个数,一个记录匹配到的报文大小。

 

Iptables规则举例


 

    下面我们以iptables的几个例子来引入iptables规则的详细解释(man iptables可以获得帮助文档)。

//允许所有主机访问本机的web服务
iptables -I INPUT -d 172.16.100.7 -p tcp -dport 80 -j ACCEPT iptables -I OUTPUT -s 172.16.100.7 -p tcp -sport -j ACCEPT

//放行sshd、httpd,并追踪连接
iptables –A INPUT -d 172.16.100.7 –p tcp --dport 22 –m state --state NEW,ESTABLISHED,-j ACCEPT
iptables –A OUTPUT -s 172.16.100.7 –p tcp --sport 22 –m state --state ESTABLISHED,-j ACCEPT
iptables –A INPUT -d 172.16.100.7 –p tcp --dport 80 –m state --state NEW,ESTABLISHED,-j ACCEPT
iptables –A OUTPUT -s 172.16.100.7 –p tcp --sport 80 –m state --state ESTABLISHED,-j ACCEPT
//允许自己ping别人,别人不能ping自己
iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT

上面的规则中,选项 -I 指的是插入一条规则,后面跟数字的话,代表插入到第几条。
上面都没有指定 -t 选项,-t的作用是指定在哪个表操作,如果不指定默认是filter表。
-A选项向链中添加规则;-s源地址,-p指定协议,--sport源端口,-m使用扩展模块,--state指定状态,-j指定执行的动作。

 

Iptables命令详解


 

    在这一章我们主要介绍常用的Iptables选项,具体的选项可以使用man iptables来查询:也可以通过几个在线文档查询:

    https://wiki.archlinux.org/index.php/Iptables_(简体中文)

      https://doc.ubuntu-fr.org/iptables

      https://zh.wikipedia.org/wiki/Iptables

      官方手册 (比较晦涩) http://ipset.netfilter.org/iptables.man.html

      https://wsgzao.github.io/post/iptables/

      iptables规则大致由“匹配标准”和“处理动作”组成;iptables在写规则的时候必须指明在哪个链上实现什么功能,表可以不用指定。如下:  

iptables [-t table] commond chain [num] 匹配标准 -j 处理办法

1)iptables常用命令:

  iptables -t [table]:指定表
  -A CHAIN :附加一条规则,在链的尾部添加。
  -I CHAIN [num]:在指定位置添加。
  -D CHAIN [num]:删除指定链,第num条规则。
  -R CHAIN [num]:替换指定的规则。
  -F [CHAIN]: 清空指定链的规则,如果省略CHAIN,则清空这个表中的所有链的规则。
  -P CHAIN:设定指定链的默认策略
  -N:自定义一个新的空链
  -X:删除一个自定义的空链
  -Z:清空指定链中的所有规则计数器
  -E:重新命名自定义链
  -L:显示指定表中的所有规则
    -n:以数字格式显示主机地址和端口号。
    -v:显示详细信息;
    -vv:显示更详细信息。
    -x:显示精确值
    --line-numbers:显示规则号

  2)匹配标准:

a)通用匹配;  

这类匹配是通用的匹配,可以通过man查询或者查询在线文档获取更多信息
-s:指定源ip地址,-d:指定目的地址;
-p{tcp|udp|icmp}:指定协议
-i eht0:指定数据报文流入的接口
-o eth0:指定数据报文流出的接口

b)扩展匹配;   扩展匹配需要依赖于模块才能完成检查;如果使用-p选项,则不用特别指定使用哪个模块完成检查;

隐含扩展: 
 -p tcp

    --sport PORT[-PORT]
    --dport PORT[-PORT]
    --tcp-flags MASK COMP: 检查tcp标志位;
      eg:--tcp-flags SYN,FIN,ACK,RST SYN,ACK 检查四个标志位中的两个是否为1.
    --syn:专门匹配三次握手中的第一次
  -p icmp
    --icmp-type
     匹配ICMP协议的ICMP TYPECODE,其中TYPE为8代表ping请求,TYPE为0代表平响应。
     搜一下"ICMP TYPECODE对应表"即可找到。
  -p udp
    --sport
    --dport

显示扩展:(增加额外的匹配机制,每个扩展都有自己独有的功能)
    -m EXTESTION --spe-opt
  state扩展:
    结合ip_conntrack追踪当前会话所处的状态,NEW、ESTABLISHED、INVALID、RELATED
    eg:只要是下面两种状态的都放行
      -m state --state NEW,ESTABLISHED -j ACCEPT
  
  multiport扩展:离散多端口扩展

    --source-ports
    --destination-ports
    --ports
    eg:-m multiport --destination-ports 21,22,80
  
  iprange扩展:指定地址范围
    -m iprange
      --src-range ip-ip
      --dst-range ip-ip
    eg: 源地址不在 172.16.100.3-172.16.100.100范围内的访问
     iptables -A INPUT -p tcp -m iprange ! --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  
  connlimit扩展:
    -m connlimit
      --connlimit-above n
    eg: 如果没有达到连接上限我们就允许
      iptables -A INPUT -d 172.16.100.7 -p tcp --dport -m connlimit ! --connlimit-above 2 -j ACCEPT
  
  limit扩展:
    -m limit 不控制最大上限,只控制单位时间内最大上限和一次蜂拥而至的上限
      --limit rate
      --limit-burst 
    eg:限制ping请求
      iptables -R INPUT 3 -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 1/minute -j ACCEPT

  **string扩展**
    
-m string
      
--algo bm|kmp
      --from offset
      --to offset
      --string pattern
    eg: 如果请求串中含有hello world就拒绝,如果响应内容中含有hello就拒绝。
      iptables -I INPUT -d 172.16.100.7 -m string --algo kmp --string "hello world" -j REJECT
      iptables -I OUTPUT -s 172.16.100.7 -m string --algo kmp --string "hello" -j REJECT


  time扩展:
    
-m time
      --timestart --timestop
      --datestart --datestop
     eg:
      iptables -A FORWARD -s 192.168.10.0/24 -m time --timestart 09:10:00 --timestop 12:00:00 -j DROP


  recent扩展:
    
-m recent
      --set 记录
      --name 制定记录的协议名
      --update
      --seconds
      --hitcount
    eg:利用recent模块和state模块限制单ip在300s内只能与本机建立3个新链接,被限制5分钟后恢复访问
      
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SS
        iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

          第二句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。

          --update 是指每次建立连接都更新列表;

          --seconds必须与--rcheck或者--update同时使用

          --hitcount必须与--rcheck或者--update同时使用

        //记录日志

         iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"

  3)处理办法:

ACCEPT     :允许通过
DROP :拒绝
REJECT :拒绝的更彻底
DNAT :目标地址转换
SNAT :源地址转换
REDIRECT :端口重定向
MASQUERAND :地址伪装
LOG :记录日志
MARK

-j LOG: 记录日志
  
--log-level

  --log-prefix
  --log-tcp-sequence
  --log-uid
  --log-ip-options:记录ip选项信息
 eg:记录哪一刻,谁发起了ping请求
    iptables -I INPUT 4 -d 172.16.100.7 -p icmp --icmp-type 8 -j LOG --log-prefix "----firewall log for icmp----"
    //将保存在 /var/log/messages 

 

NAT地址转换


 

  如何打开转发功能?

  echo 1 > /proc/sys/net/ipv4/ip_forward

  要想永久有效:

  vim /etc/sysctl.conf

  net.ipv4.ip_forward = 1

  网关打开转发功能之后,两个网段的主机便可通信,但是为什么还要NAT地址转换呢?主要是接入外网的时候,虽然报文能发出去,但是如果不做地址转换,响应报文回不来,不像这里的两个网段这么简单,报文能回来是因为路由的原因。

-j SNAT
  --to-source A->B->C A是内网,A访问外网C,则在B这里要进行源地址转换,源地址转换应该在POSTROUTING链上;

eg:
iptables –t nat –A POSTROUTING –s 192.168.10.0/24 –j SNAT –to-source 172.168.100.7
-j MASQUEREAD 
   在外网地址是动态获取的时候才使用,自动查找一个能上网的地址。
-j DNAT
  --to-destination 目标地址转换必须指定针对什么服务进行转换的:
  eg:
    iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp -dport 80 -j DNAT --to-destination 192.168.10.22
    //指定转发到哪个端口
    iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp -dport 80 -j DNAT --to-destination 192.168.10.22:8080
如何在NAT上进行过滤
  iptables -A FORWARD -m string --algo kmp --string "hello" -j DROP

 

Iptables其他知识点


 

  lsmod | grep ip 可以查看跟ip相关的模块是否启动起来。

  service iptables stop:停止iptables服务

iptables -L -n :显示所有规则
iptables -P INPUT DROP:改默认策略为堵策略
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

  ip_contrack内核模块能够实现链接追踪功能,为了能够实时追踪和查询,需要保存当前每一个客户端和当前主机所建立的链接关系。

  

  这个文件可以保存多少个追踪条目?

  

iptables -t 显示当前链接的个数

   ls /proc/sys/net/ipv4/netfilter/

         可以改每个链接的失效时间

保存规则:

# Service iptables save

       保存到: /etc/sysconfig/iptables

# iptables-save >  /etc/sysconfig/iptables.201703

# iptables-restore < /etc/sysconfig/iptables.201703

/etc/sysconfig/iptables

iptables在启动的时候会重新加载配置信息,因此要把写的规则保存到

    cat /etc/sysconfig/iptables下面

使用iptables命令可以保存规则到这个文件下面

  DNS服务器要写4条规则才能真正生效:因为DNS服务器即做服务器又做客户端。TCP、UDP都监听的话需要8条规则。

  自定义链:

iptables –N clean_in

iptables –A clean_in –d 255.255.255.255 –p icmp –j DROP

iptables –A clean_in –d 172.255.255.255 –p icmp –j DROP

iptables –A clearn_in –p tcp ! –syn –m state --state NEW –j DROP

iptables –A clearn_in –d 172.16.100.7 –j RETURN  #返回主链

iptables –I INPUT –j clearn_in  #被主链调用

删除自定义链,首先要清空自定义链,然后再用语句删除

 

Iptables规则练习


 

1. 放行FTP

  要想放行FTP协议,首先要装载ip_conntrack_ftp和ip_nat_ftp模块,Vim /etc/sysconfig/iptables-config  下找到IPTABLES_MODULES,在这个地方指明要加载的模块。IPTABLES_MODULES=”ip_nat_ftp ip_conntrack_ftp”。

iptables –A INPUT –d 172.16.100.7 –p tcp –m state –-state RELATED,ESTABLISHED –j ACCEPT

iptables –I INPUT 2 –d 172.16.100.7 –p tcp –m multiport –destination-ports 21,22 –m state --state NEW –j ACCEPT

   放行回话需要些两天规则:

iptables -t filter -A INPUT -s 172.16.0.0/16 –d 172.16.100.7 –p tcp –dport 22 –j ACCEPT
iptables –t filter –A OUTPUT –s 172.16.100.7 –d 172.16.0.0/16 –p tcp –sport 22 –j ACCEPT

2、追踪链接放行sshd、httpd

iptables –A INPUT -d 172.16.100.7 –p tcp --dport 22 –m state --state NEW,ESTABLISHED,-j ACCEPT

iptables –A OUTPUT -s 172.16.100.7 –p tcp --sport 22 –m state --state ESTABLISHED,-j ACCEPT

iptables –A INPUT -d 172.16.100.7 –p tcp --dport 80 –m state --state NEW,ESTABLISHED,-j ACCEPT

iptables –A OUTPUT -s 172.16.100.7 –p tcp --sport 80 –m state --state ESTABLISHED,-j ACCEPT

修改追踪数值:

  sysctl –w net.ipv4.ip_conntrack_max=65536

这种改法不会永久有效,要想永久有效,要写在

  /etc/sysctl.conf

 3、只要是本机响应的都可以放行

iptables –I OUTPUT –s 172.16.100.7 –m state –state ESTABLISHED –j ACCEPT

  再放行数据包的时候,一定要清楚协议运行的流程,出入包顺序。

 

Layer7 Filter


 

   L7-filter可以过滤应用层协议,是一个开源项目:官方网址:http://l7-filter.sourceforge.net/

   涉及到编译内核等问题,如果有需要可查阅官方文档,或者有心人发布的博客介绍。

   L7所支持的协议:

    

    用法:

    iptables –A FORWARD –s 192.168.10.0/24 –m layer7 –l7proto qq –j REJECT

 

参考资料:


 

    洞悉linux下的Netfilter&iptables:什么是Netfilter?

        http://blog.chinaunix.net/uid-23069658-id-3160506.html

  Google搜索 Iptables得到的网站,挑了几个讲解比较全的:

  https://wiki.archlinux.org/index.php/Iptables_(简体中文)

  https://doc.ubuntu-fr.org/iptables

  https://zh.wikipedia.org/wiki/Iptables

  官方手册 (比较晦涩) http://ipset.netfilter.org/iptables.man.html

  https://wsgzao.github.io/post/iptables/

  马哥Linux运维教程208讲是本篇文章的主要参考资料

linux系统中iptables防火墙管理工具

策略以规则链:   防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即方形或者阻止)如果在读取完所有的策略规则之后没有匹配项,就去执行默认... 查看详情

nineiptables与firewalld防火墙

防火墙管理工具  防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。这样一来... 查看详情

iptables防火墙配置

实验iptables防火墙配置实验的目的熟悉防火墙的基本原理。熟悉包过滤防火墙的测试。实验内容1)学习Linux防火墙的基本架构2)学习IPtable的基本原理3)学习IPtable的使用方法实验环境1)虚拟机:Linux主机2)... 查看详情

linux___iptables防火墙

一、防火墙的作用三、防火墙的分类 三、iptables基本语法: 表:常用filter,nat用于地址映射转换。 配置文件:/etc/sysconfig/iptables过滤表信息、 查看iptables状态serviceiptablesstatus 命令(注意参数都要大写):-L:... 查看详情

iptables原理简介

1.iptables防火墙简介  Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4及2.6内核中集成... 查看详情

防火墙之iptables的基本认识

1 概述iptables不是防火墙技术,是一个软件,用来配置防火墙,通过这个工具来实现对防火墙的策略的定制。iptables只是一个配置手段,防火墙是集成在内核级的。IPTABLES是与最新的3.5版本Linux内核集成的IP信息包过滤系统。如... 查看详情

firewalld防火墙基础详解(代码片段)

...支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具,支持IPv4、IPv6防火墙设置以及以太网桥,支持服务或应用程序直接添加防火墙规则接口。拥有两种配置模式1.运行时配置2.永久配置Firewalld和iptables的关系n... 查看详情

企业防火墙-iptables策略

...尽可能不给服务器配置外网ip,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务.大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全1.1.1 生产中iptables的实际应用主要... 查看详情

iptables和firewalled的区别

...保证数据的安全性是继可用性之后最为重要的一项工作,防火墙技术作为公网与内网之间的保护屏障,起着至关重要的作用。面对同学们普遍不了解在红帽RHEL7系统中新旧两款防火墙的差异,刘遄老师决定先带领读者正确的认识... 查看详情

linux命令(215)——iptables命令(代码片段)

...过滤和NAT的管理工具。iptables/ip6tables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。iptables/ip6tables均是xtables-mu 查看详情

解决linux系统没有/etc/sysconfig/iptables文件

Linux系统中,防火墙默认是不开启的,一般也没有配置过任何防火墙的策略,所以不存在/etc/sysconfig/iptables文件。一、常规解决方法:1、在控制台使用iptables命令随便写一条防火墙规则iptables-AOUTPUT-jACCEPT2、使用serviceiptablessave进行... 查看详情

iptables基本使用

iptables是linux系统下的一款防火墙管理工具,也包含大量的参数,不过对于日常的防火墙策略来讲,只需要掌握常用的参数就可以了。首先查看是否安装了iptables,没有安装的话需要先安装iptables:serviceiptablesstatusyuminstall-yiptables&n... 查看详情

使用firewalld限制网络通信

...前写过iptables的文章-Linux的netfilter/iptables简介。netfilter是防火墙安全框架,允许内核模块对遍历系统的每个数据包进行检查。在红帽7之前,iptables是与内核netfilter交互的主要方法,红帽7之之后交互的新方法是firewalld,是一个配置... 查看详情

linux防火墙iptables配置详解

一、开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况[[email protected]~]#iptables-L-nChainINPUT(policyACCEPT)target   protoptsource        destin 查看详情

iptables防火墙介绍+实战

第1章iptables防火墙简介Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。... 查看详情

linux防火墙

...将分别使用iptables、firewall-cmd、firewall-config和TCPWrappers等防火墙策略配置服务来完成数十个根据真实工作需求而设计的防火墙策略配置实验。防火墙种类内外网形式的防火墙,在外网和企业内网之间架设一台服务器或者路由器,... 查看详情

iptables的高级应用(网关型防火墙)

      iptables防火墙高级应用(网关性防火墙)1:本次内容主要学习linux防火墙的SNAT,DNAT策略,是linux转换地址的操作。也是iPtables命令中的一种控制类型,其作用是根据制定条件修改源ip地址2:SNAT策略的概... 查看详情

iptables的高级应用(网络型防火墙)

      iptables防火墙高级应用(网关性防火墙)1:本次内容主要学习linux防火墙的SNAT,DNAT策略,是linux转换地址的操作。也是iPtables命令中的一种控制类型,其作用是根据制定条件修改源ip地址2:SNAT策略的概... 查看详情