iptables

iptables

位于/sbi/iptables,用来管理防火墙规则的工具
称为linux防火墙的用户态

包过滤的工作层次

主要是网络层,针对IP数据包
体现在对包内的IP地址,端口等信息的处理

Iptables的表链结构

  1. 规则表
    表的作用:容纳各种规则链
    表的划分依据据:防火墙规则的作用相似
  2. 默认包括四个规则表
    raw表:确定是否对该数据包进行状态跟踪
    mangle表:为数据包设置标记
    nat表:i修改数据包中的源,目标IP地址或端口
    filter表:确定是否放行该数据包(过滤)
  3. 规则链
    规则的作用:对数据包进行过滤或处理
    链的作用:容纳各种防火墙规则
    链的分类依据:处理数据包的不同时机
  4. 默认包括五种规则链
    1)filter表内:
    INPUT:处理入站的数据包
    OUTPUT:处理出站的数据包
    FORWARD:处理转发数据包
    2)NAT表内:
    PREROUTING:在进行路由选择前处理数据包
    POSTROUTING:在进行路由选择后处理数据包

数据包过滤的匹配流程

  1. 规则表之间的顺序:
    raw mangle nat filter
  2. 规则链之间的顺序:
    入站:PREROUTING INPUT
    出站:OUTPUT POSTROUTING
    转发:PREROUTING FORWARD POSTROUTING
  3. 规则链内的匹配顺序
    按顺序依次检查,匹配即停止(LOG策略除外)
    若找不到匹配的规则,则按链的默认策略处理

Iptables安装

  1. 关闭firewalld防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
  2. 安装iptables防火墙
    yum -y install iptables iptables.service

iptables基本语法

  1. 语法结构:
    格式:iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
    注意事项:不指定表名时,默认指filter表
    不指定链名时,默认指表内的所有链
    除非设置链的默认策略,否则必须指定匹配条件
    选项,链名,控制类型使用大写字母,其余均为小写
    常用选项:
    命令 -A, --append
    范例 iptables -A INPUT …
    说明 新增规则到某个规则链中,该规则将会成为规则炼中的最后一条规则。
    命令 -D, --delete
    范例 iptables -D INPUT --dport 80 -j DROP
    iptables -D INPUT 1
    说明 从某个规则炼中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
    命令 -R, --replace
    范例 iptables -R INPUT 1 -s 192.168.0.1 -j DROP
    说明 取代现行规则,规则被取代后并不会改变顺序。
    命令 -I, --insert
    范例 iptables -I INPUT 1 --dport 80 -j ACCEPT
    说明 插入一条规则,原本该位置上的规则将会往后移动一个顺位。
    命令 -L, --list
    范例 iptables -L INPUT
    说明 列出某规则链中的所有规则。
    命令 -F, --flush
    范例 iptables -F INPUT
    说明 删除某规则链中的所有规则。
    命令 -Z, --zero
    范例 iptables -Z INPUT
    说明 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
    命令 -N, --new-chain
    范例 iptables -N allowed
    说明 定义新的规则炼。
    命令 -X, --delete-chain
    范例 iptables -X allowed
    说明 删除某个规则炼。
    命令 -P, --policy
    范例 iptables -P INPUT DROP
    说明 设置指定链的默认规则
    备注:默认策略的控制类型只有ACCEPT和DROP两种
    命令 -E, --rename-chain
    范例 iptables -E allowed disallowed
    说明 修改某自定义规则链的名称。
    常用封包比对参数:
    参数 -p, --protocol
    范例 iptables -A INPUT -p tcp
    说明 比对通讯协议类型是否相符,可以使用 ! 运算子进行反向比对,例如:-p ! tcp ,意思是指除 tcp 以外的其它类型,包含 udp、icmp …等。如果要比对所有类型,则可以使用 all 关键词,例如:-p all。
    参数 -s, --src, --source
    范例 iptables -A INPUT -s 192.168.1.1
    说明 用来比对封包的来源 IP,可以比对单机或网络,比对网络时请用数字来表示屏蔽,例如:-s 192.168.0.0/24,比对 IP 时也可以使用 ! 运算子进行反向比对,例如:-s ! 192.168.0.0/24。
    参数 -d, --dst, --destination
    范例 iptables -A INPUT -d 192.168.1.1
    说明 用来比对封包的目的地 IP,设定方式同上。
    参数 -i, --in-interface
    范例 iptables -A INPUT -i eth0
    说明 用来比对封包是从哪片网卡进入,可以使用通配字符+ 来做大范围比对,例如:-i eth+ 表示所有的ethernet 网卡,也可以使用 ! 运算子进行反向比对,例如:-i ! eth0。
    参数 -o, --out-interface
    范例 iptables -A FORWARD -o eth0
    说明 用来比对封包要从哪片网卡送出,设定方式同上。
    参数 --sport, --source-port
    范例 iptables -A INPUT -p tcp --sport 22
    说明 用来比对封包的来源埠号,可以比对单一埠,或是一个范围,例如:–sport 22:80,表示从 22 到 80
    埠之间都算是符合条件,如果要比对不连续的多个埠,则必须使用 --multiport 参数,详见后文。比对埠号时,可以使用 !
    运算子进行反向比对。
    参数 --dport, --destination-port
    范例 iptables -A INPUT -p tcp --dport 22
    说明 用来比对封包的目的地埠号,设定方式同上。
    参数 --tcp-flags
    范例 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
    说明 比对 TCP
    封包的状态旗号,参数分为两个部分,第一个部分列举出想比对的旗号,第二部分则列举前述旗号中哪些有被设定,未被列举的旗号必须是空的。TCP
    状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)
    等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对。比对旗号时,可以使用 ! 运算子进行反向比对。
    参数 --syn
  2. 数据包的常见控制类型
    ACCEPT:允许通过
    DROP:直接丢弃,不给出任何回应
    REJECT:拒绝通过,必要时会给出提示
    LOG:记录日志信息,然后传给下一条规则继续匹配

规则的匹配条件

  1. 通用匹配
    备注:通用匹配可独立使用,不依赖其他条件或扩展模块
    1)协议匹配
    编写规则时使用 -p 协议名的形式指定,用来检查数据包所使用的网络协议
    常用网络协议:tcp udp icmp all
    示例:
    [root@localhost ~]# iptables -I lNPUT -p icmp -j DROP
    [root@localhost ~]# iptables -I INPUT ! -p icmp -j ACCEPT
    "!”表示取反﹒
    2)地址匹配
    编写规则时使用 -s 源地址或-d 目标地址的形式指定,用来检查数据包源地址或目标地址
    示例:
    [root@localhost ~]# iptables -I INPUT -s 192.168.17.20 -j REJECT
    [root@localhost ~]# iptables -I OUTPUT -d 192.168.17.20 -j REJECT
    3)网络接口怕匹配
    编写规则时使用 -i 接口名和 -o 接口名的形式,用于检查数据包从哪一个接口进入或发出
    示例:
    [root@localhost ~]# iptables -I INPUT -i ens33 -s 10.0.0.0/8 -j DROP
    [root@localhost ~]# iptables -I INPUT -i ens33 -s 172.16.0.0/16 -j DROP
    [root@localhost ~]# iptables -I INPUT-i ens33 -s 192.168.0.0/16 -j DROP

  1. 隐含匹配
    1)端口匹配
    编写规则时使用 --sport 源端口 或者 --dport 目标端口的形式;针对的协议为TCP或UDP
    示例1:
    [root@localhost ~]#iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
    [root@localhost ~]# iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
    示例2:
    [root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p tcp --dport
    24500:24600 -j ACCEPT
    备注:连续的端口号用:分隔
    示例3:多端口匹配
    [root@localhost ~]#iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
    备注:不连续的端口用 -m multiport 和,
    2)ICMP类型的匹配
    编写规则时使用 --icmp-type ICMP类型的形式,针对的协议为ICMP,用来检查ICMP数据包的类型
    ICMP类型的代码表示:
    echo-request 代码为8;echo-reply 代码为0;destination-unreacha 代码为3
    示例:
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
    [root@localhost ~]# iptables -A INPUT -p icmp -j DROP

  1. 显示匹配
    1)IP范围匹配
    编写规则时使用 -m iprange --src-range IP范围
    -m iprange --dst-range IP范围
    的形式,用来检查数据包的源地址,目标地址。
    IP地址范围的表示方式:起始地址-结束地址
    示例:
    [root@localhost ~#iptables -A FORWARD -p tcp -m ipra
    nge --src-range 192.168.4.21-192.168.4.28 -j DROP
    2)MAC地址匹配
    编写规则时使用 -m mac --mac-source MAC地址的形式。用来检查数据包的MAC地址
    示例:
    [root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
    3)状态匹配
    编写规则时使用 -m state --state 连接状态的形式,基于Iptables的状态跟踪机制来检查数据包的连接状态。
    常见连接状态:NEW 与任何连接无关的
    ESTABLISHED 响应请求或者已建立连接的
    RELATED 与已有连接有相关性的,如FTP数据连接
    示例:
    [root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值