Iptables使用方法

Iptables使用方法

    • Iptables使用方法
      • Iptables的组成
        • 四张表
        • 五个链
        • 添加规则的要点
      • Iptables的使用
        • 对表进行的操作
        • 对链进行的操作
        • 对规则进行的操作
        • 匹配条件
          • 基本匹配
          • 扩展匹配
        • 处理动作
      • 保存规则的方法


Iptables的组成

iptables由四个表和五个链以及一些规则组成

四张表

四张表及其功能简介

表名 功能
filter表 过滤规则表,根据预定义的规则过滤符合条件的数据包
nat表 地址转换规则表
mangle表 修改数据标记位规则表
raw表 关闭nat表上启用的连接追踪功能,加快封包穿越防火墙的速度

四张表按优先级由高到低的顺序为: raw–>mangle–>nat–>filter

五个链

五个内置链(chain)及其所在位置

链名 位置
PREROUTING 报文进入本机的路由前的位置
INPUT 到达本机内部的报文的位置
FORWARD 由本机转发的报文的位置
OUTPUT 由本机内部发出的报文的位置
POSTROUTING 报文路由后流出本机的位置

数据报文流向

  • 跟本机内部进程通信:

    • 流入 : –> PREROUTING –> INPUT
    • 流出 : –> OUTPUT –> POSTROUTING
  • 经由本机转发:

    • 请求: –> PREROUTING –> FORWARD –> POSTROUTING
    • 响应: –> PREROUTING –> FORWARD –> POSTROUIING

表和链的对应关系

表名
filter INPUT, FORWARD, OUTPUT
nat PREROUTING(SNAT),POSTROUTING(DNAT),OUTPUT
mangle PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
raw PREROUTING, OUTPUT

添加规则的要点

iptables添加规则时的考量点

  1. 要实现哪种功能:判断添加在哪张表上
  2. 报文流经的路径:判断添加在哪个链上
  3. 报文的流向:判断源和目的地
  4. 匹配规则:根据业务需要
  5. 客户端端口是随机的,因此大多数场景下无须限定

链上规则的次序,即为检查的次序

  1. 切记:先添加放行自己的规则
  2. 同类规则(访问同一应用),匹配范围小的放上面
  3. 不同类规则(访问不同应用),匹配到报文频率较大的放上面
  4. 将那些可由一条规则描述的多个规则合并为一个
  5. 设置默认策略,允许所有或拒绝所有

Iptables的使用

基本语法:

iptables [-t 表名] <-A|-I|-D|-R> 链名 [规则编号] [-i|-o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [-sport 源端口号] [-d 目标IP地址|目标子网] [-dport 目标端口号] [-m 模式 [模式选项]] -j 动作 [动作选项]

对表进行的操作

  • -t TABLE
    • nat
    • mangle
    • raw
    • filter

默认为filter表
示例:

    ~]#iptables -t filter -A INPUT -s 172.18.255.254 -j DROP
    ~]#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.18.255.254

对链进行的操作

  • -N:new,新建一条链
  • -X:delete,删除一条用户自定义链(空链)
  • -F:lush,清空一条链,默认清空表中所有链
  • -P:policy,定义链的默认处理策略
    • ACCEPT 接受
    • DROP 丢弃
    • REJECT 拒绝
  • -E:rename,重命名自定义的未被引用的(计数器为0)链

对规则进行的操作

  • -L: list,列出规则
    • -n:numeric,以数字格式显示地址和端口
    • -v:verbose,详细信息,-vv, -vvv
    • -x:exactly,显示计数器的精确值
    • –line-numbers:显示链上规则的编号
  • -A:append,追加,在链的最后加一条规则
  • -I: Insert,插入一条规则,默认第一个,一般使用 -I CHAIN NUM 给规则加一个编号
  • -D:delete,删除一条规则,可以输入完整规则,或者直接指定标号加以删除
    • rule speclfication
    • rule number
  • -R:replace,替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号。-R CHAIN NUM
  • -Z: zero,清空计数器,iptables中每条规则默认有两个计数器
  • -S:selected,以iptables-save 命令的格式显示链上的规则

示例:

    ~]#iptables -A INPUT -s 172.18.255.254 -j DROP
    ~]#iptables -A INPUT -s 172.18.10.0 -j REJECT
    ~]#iptables -I INPUT -s 172.18.0.2 -j ACCEPT   #默认插入到的是第一条
    ~]#iptables -I INPUT 2 -s 172.18.22.100 -j ACCEPT  #指定插入位置
    ~]#iptables -D INPUT 2     #删除规则
    ~]#iptables -R INPUT 2 -s 172.18.255.254 -j ACCEPT     #替换指定规则
    ~]#iptables -F     #清空所有规则
    ~]#iptables -Z     #清空计数器
    ~]#iptables -nvL   #查看规则
    ~]#iptables -nvL --line-numbers    #显示规则编号
    ~]#iptables -S     #命令格式显示链上规则
    ~]#iptables -nvL -t nat    #查看指定的表

匹配条件

基本匹配

基本匹配:netfilter自带的匹配规则

  • -s:指定匹配数据包的源地址
  • -d:指定匹配数据包的目标地址
  • -i:指定数据包的流入接口(逻辑接口),只能用于PREROUTING 、INPUT及FORWARD
  • -o:指定数据包的流出接口,只能用于OUTPUT、FORWARD及POSTROUTING

示例:

    ~]#iptables -A INPUT -s 172.18.0.0/16 -j REJECT    #拒绝整个网段
    ~]#iptables -A INPUT -s 172.18.0.2,172.18.10.0 -j REJECT   #同时定义多个IP
    ~]#iptables -A INPUT -s 172.18.0.2,172.18.10.0 -d 192.168.10.129 -j REJECT
    ~]#iptables -A INPUT -d 192.168.10.129 -j REJECT   #拒绝访问特定目标ip
    ~]#iptables -A INPUT ! -d 192.168.10.129 -j REJECT     #取反,除访问特定地址外的数据包都拒绝
    ~]#iptables -A INPUT ! -s 172.18.10.0 -j REJECT
    ~]#iptables -A INPUT -p icmp -j REJECT     #只拒绝指定协议
    ~]#iptables -A INPUT -i ens32 -p icmp -j REJECT    #拒绝指定接口的流量
扩展匹配

扩展匹配:对某一种功能的扩展,经由扩展模块引入的匹配机制
语法:-m macth_name - -spec_options
示例:-m tcp - -dport 22

隐式扩展:对某一种协议扩展

  • -p (tcp|udp|icmp|icmpv6|ah|esp|sctp|mh|all):做协议匹配
    • tcp:隐藏了”-m tcp”的专用选项
      • [!] - -source-port, –sport port [:port] 匹配报文中TCP首部源端口,可以是端口范围;
      • [!] - -dport port [:port]:目标端口,可以是单个端口或连续多个端口;
      • [!] - -tcp-flags (SYN, ACK, FIN, RST, PSH, URG,RST,ALL,NONE)指定TCP的标志位,需要跟两个标志位列表,如:SYN,ACK,FIN,RST,SYN 第一个列表表示要检查的位,第二个列表表示第一个列表中所有标记位必须为1,而余下的必须为0;没有LIST1中指明的,不作检查;
      • [!] - -syn: 只允许新连接,相当于‘ - -tcp-flags SYN,ACK,FIN,RST,SYN’
    • udp:隐藏了”-m udp”的专用选项
      • [!] - -sport port[:port]:指定匹配报文的源端口;可以是端口范围
      • [!] - -dport port[:port]:指定匹配报文的目标端口;可以是端口范围
    • icmp:隐藏了”-m icmpd”的专用选项
      • [!] - -icmp-type
        • 0:echo-reply,icmp应答
        • 8 : echo-request,icmp请求

示例:

    ~]#iptables -A INPUT -p tcp --dport 80 -j REJECT   #拒绝指定协议的指定端口
    ~]#iptables -A INPUT -p tcp --dport 23 -j REJECT   
    ~]#iptables -A INPUT -s 172.18.255.254 -p tcp -m multiport --dports 23:25,80 -j REJECT #显式扩展,定义多端口匹配。
    ~]#iptables -A INPUT -m iprange --src-range 172.18.1.0-172.18.255.255 -p tcp -m multiport --dports 23:25,80 -j REJECT
    ~]#iptables -A INPUT -m mac --mac-source 00:50:56:2c:74:64 -p tcp -m multiport --dports 23,80 -j REJECT    #基于MAC的控制
    ~]#iptables -A OUTPUT -m string --algo bm --string "abc" -j REJECT     #拦截带有特定字符串的数据包
    ~]#iptables -A INPUT -s 172.18.0.0/16 -d 172.18.172.18 -p tcp --dport 80 -m time --timestart 00:00 --timestop 10:00 --weekdays Wed,Sun -j DROP     #基于时间的控制
    ~]#iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT  #限制单台主机的ssh连接数量
    ~]#iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 10 -j ACCEPT
    ~]#iptables -A INPUT -p icmp -j REJECT         #基于收发报文的速率做匹配

显示扩展:额外附加的更多匹配规则,功能性的扩展

  • -m multiport :以离散方式定义多端口匹配,最多指定15个端口
    • [!] –source-ports,–sports port[,port|,port:port]… 指定多个源端口
    • [!] –destination-ports,–dportsport[,port|,port:port]… 指定多个目标端口
    • [!] –ports port[,port|,port:port]… 多个源或目标端口

示例:

    ~]# iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.9 -p tcp -m multiport --dports 22,80 -j ACCEPT
    ~]# iptables -I OUTPUT -d 172.16.0.0/16 -s 172.16.100.9 -p tcp -m multiport --sports 22,80 -j ACCEPT
  • -m iprange : 指明连续的(但一般是不能扩展为整个网络)ip地址范围时使用;
    • [!] - -src-range from[-to]:指明连续的源IP地址范围;
    • [!] - -dst-range from[-to]:指明连续的目标IP地址范围;

示例:

    ~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT
    ~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT      
  • -m string : 检查报文中出现的字符串;
    • –algo {bm|kmp}
      • bm = Boyer-Moore
      • kmp = Knuth-Pratt-Morris
    • [!] - -string pattern :给定要检查的字符串模式

示例:

    ~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT
  • -m 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指定本地时区(默认)

示例:

    ~]#iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
  • -m connlimit : 根据每客户端IP(也可以是地址块)做并发连接数数量匹配;
    可防止CC(Challenge Collapsar挑战黑洞)攻击
    • –connlimit-upton:连接的数量小于等于n时匹配
    • –connlimit-above n:连接的数量大于n时匹配
      通常分别与默认的拒绝或允许策略配合使用

示例:

    ~]#iptables-A INPUT -d 172.16.100.10 -p tcp--dport22 -m connlimit--connlimit-above 2 -j REJECT
  • -m limit : 基于收发报文的速率做检查;
    令牌桶过滤器
    • –limit rate[/second|/minute|/hour|/day]
    • –limit-burst number

示例:

    ~]#iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
    ~]#iptables -I INPUT 2 -p icmp -j REJECT
  • -m state : 根据连接追踪机制检查连接的状态;
    conntrack机制:追踪本机上的请求和响应之间的关系
    • NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
    • ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
    • RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
    • INVALID:无效的连接,如flag标记不正确
    • UNTRACKED:未进行追踪的连接,如raw表中关闭追踪
    • [!] –state state

示例:

    ~]#iptables -A INPUT -d 172.16.100.10 -p tcp-m multiport --dport 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
    ~]#iptables -A OUTPUT -s 172.16.100.10 -p tcp-m multiport --sport 22,80 -m state --state ESTABLISHED -j ACCEPT

调整连接追踪功能所能够容纳的最大连接数量:
/proc/sys/net/nf_conntrack_max

已经追踪到并记录下的连接:
/proc/net/nf_conntrack

不同协议或连接类型追的时长:
/proc/sys/net/netfilter/

处理动作

  • -j TARGET:跳至指定的TARGET
    • ACCEPT: 接受
    • DROP: 丢弃
    • REJECT: 拒绝
    • RETURN: 返回调用链
    • REDIRECT:端口重定向
    • LOG: 记录日志
    • MARK:做防火墙标记
    • DNAT:目标地址转换
    • SNAT:源地址转换
    • MASQUERADE:地址伪装

保存规则的方法

  • 如何保存及重载规则:
    • 保存规则至指定文件:
      iptables-save > /PATH/TO/SOMEFILE
    • 从指定文件重载规则:
      iptables-restore < /PATH/FROM/SOMEFILE

centos 6

定义好策略后执行此命令,定义的策略会在每次服务启动时自动加载

    ~]#service iptables save
或:
    ~]#iptables-save > /etc/sysconfig/iptables

centos 7
将定义好的规则导出到文件中

    ~]#iptables-save > /etc/sysconfig/iptables 

将保存于文件中的策略恢复,此方法适用于多套规则之间相互切换

    ~]#iptables-restore < /etc/sysconfig/iptables

若要每次服务启动时自动加载策略,需要将此命令写于/etc/rc.d/rc.local文件中,注意给文件加执行权限

你可能感兴趣的:(安全和加密)