• iptables


    一、简介

    netfilter/iptables(简称 iptables)组成 Linux 平台下的包过滤防火墙

    iptables 组件是一种工具,也称为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易

    netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集

    安装 iptables

    yum -y install iptables iptables-services
    

    重启:systemctl restart iptables
    保存:service iptables save

    二、常用参数

    iptables + -t 表名 + 规则/链管理参数 + 匹配参数 + 动作类型参数

    #  选择表
    -t	#  对指定表进行操作(必须是 raw、nat、filter、mangle 中的一个。如没有指定则默认为 filter表)
    
    #  规则管理
    -A	#  在指定规则链的末尾加入新规则
    -I	#  在指定规则链的头部加入新规则(默认在第一行添加)
    -D	#  删除指定链中的一条规则(可按规则序号和内容删除)
    -R	#  修改、替换指定链中的某一条规则(可按照规则序号和内容替换)
    
    #  链管理
    -P	#  设置指定链默认策略 
    -N	#  新建一条用户自己定义的规则链
    -X	#  删除指定表中用户自定义的规则链
    -E	#  重命名用户定义的链(不改变链本身)
    -Z	#  将所有表的所有链的字节和数据包计数器清零
    
    #  规则链
    INPUT		#  处理入站的数据包
    OUTPUT		#  处理出站的数据包
    FORWARD         #  处理转发的数据包
    PREROUTING	#  处理入站的路由规则
    POSTROUTING	#  处理出站的路由规则
    
    #  匹配(加感叹号 “!“表示这个目标除外(加感叹号后需加空格后在加匹配项))
    -s	#  匹配来源地址 IP/MASK
    -d	#  匹配目标地址
    -i	#  网卡名称(匹配从这块网卡流入的数据)
    -o	#  网卡名称(匹配从这块网卡流出的数据)
    -m	#  使用扩展模块
    -p	#  匹配协议(如:tcp、udp、icmp)
    	tcp     #  扩展选项:--source-port (扩展选项可用 iptables -p tcp -h 查看)
    	udp     #  扩展选项:--source-port (扩展选项可用 iptables -p icmp -h 查看)
    	icmp    #  可用扩展:  --icmp-type  (可用扩展可用 iptables -p icmp -h 查看)
    	--dport 80	#  匹配目标端口 80
    	--sport 81	#  匹配来源端口 81
    
    #  指定动作类型
    -j  #  指定动作类型
        动作类型:
        ACCEPT	#  允许数据包通过
        REJECT	#  拒绝数据包通过(必要时会发送响应信息)
        DROP	#  直接丢弃(不给出任何回应)
        QUEUE	#  中断过滤程序,将封包放入队列,交由其它程序处理
        RETURN	#  停止当前链中的后续规则,并返回到调用链(the calling chain)中
        REDIRECT	#  在本机上做端口映射
        DNAT	#  改变数据包的目的地址
        SNAT	#  改变数据包的源地址
        MASQUERADE	#  SNAT 的一种特殊形式,适用于动态、临时会变的 IP 上(只能用户 nat 表的 POSTROUTING 链)
        LOG		#  在 /var/log/messages 文件中记录日志信息,然后在将数据包传递给下一条规则
    
    #  查看/清空 规则
    -L	#  列出指定链中所有的规则
    -n	#  IP地址和端口会一数字的形式打印
    -v	#  详细输出
    -F	#  清空规则链
    

    三、扩展模块

    使用方法:iptables + -m + 扩展模块名
    可用扩展选项可用:iptables + -m + 扩展名 + -h 查看

    limit(速率限制)
    #  每分钟允许通过 5 个 icmp 包(默认为 3/小时,秒:/sec  分钟:/minute   小时:/hour  天:/day)
    iptables -A INPUT -p icmp -m limit --limit 5/minute -j ACCEPT
    #  每分钟允许通过 5 个 icmp 包,最多不超过 10 个
    iptables -A INPUT -p icmp -m limit --limit 5/minute --limit-burst 10 -j ACCEPT
    
    multiport( 多端口匹配)
    #  匹配 22,端口(最多可指定15个端口)
    iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
    
    iprange(匹配指定范围内的地址)
    #  匹配指定范围内的地址
    iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.0-192.168.1.111 --dport 22 -j ACCEPT
    
    string(字符串匹配)
    #  当服务端返回数据报文检查到有关键字 “test" 时,则丢弃该报文(能够检测到报文应用层中的字符串  注:该条规则需添加到 OUTPUT 链)
    iptables -A OUTPUT -p tcp --dport 80 -m string --algo kmp --string "test" -j DROP
    
    connlimit(连接数限制)
    #  限制同一 IP 最多同时 10 个 http 连接
    iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT
    #  限制每组 C 类 IP 最多同时 10 个 http 连接
    iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
    #  限制指定网段的 IP 最多同时 10 个 http 连接
    iptables -A INPUT -s 192.168.1.0/24 -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT
    
    recent(时间限制)
    --name	        #  设置列表名称
    --resource	#  源地址
    --redest	#  目的地址
    --seconds	#  指定时间内(单位:秒)
    --hitcount	#  匹配次数
    --set		#  将地址添加进列表,并更新信息(包含地址加入的时间戳)
    --rcheck	#  匹配列表中的源地址(以第一个匹配计算时间)
    --update	#  类似 rcheck(以最后一个匹配计算时间)
    --remove	#  在列表里删除相应地址(后面接列表名称及地址)
    
    #  将访问的主机记录到 test 列表,并放行
    iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --set -j ACCEPT
    #  如访问的主机在 test 列表有记录则限制 80 端口 60 秒 内每个 IP 只能发起 20 个新的连接,超过则记录日志(日志前缀为 DDOS:)
    iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --rcheck --seconds 60 --hitcount 20 -j LOG --log-prefix 'DDOS:' --log-ip-options
    #  如访问的主机在 test 列表有记录则限制 80 端口 60 秒 内每个 IP 只能发起 20 个新的连接,超过则丢包
    iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --rcheck --seconds 60 --hitcount 20 -j DROP
    
    state(状态检查)
    NEW:新建立一个会话
    ESTABLISHED:已建立的连接
    RELATED:有关联关系的连接
    INVALID:无法识别的连接
    
    #  放行 ssh 的首次连接状态
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
    #  放行有关联的连接跟已建立的连接
    iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT
    

    四、规则表和规则链

    规则表(tables)

    规则表提供特定的功能(内置了4个表),类似用户组,每个组都有不同的功能,并且都有对应的用户(规则链)

    filter	#  负责过滤功能(内核模块:iptables_filter)
    nat     #  负责网络地址转换功能(内核模块:iptable_nat)
    mangle	#  拆解、修改、封装报文(内核模块;iptable_mangle)
    raw     #  决定数据包是否被状态跟踪机制处理内核(内核模块:iptable_raw)
    

    规则表优先顺序(从左往右):raw <--- mangle <--- nat <--- filter

    规则表对应的规则链:

    raw 表:PREOUTING、OUTPUT
    mangle 表:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
    nat 表:PREROUTING、INPUT、OUTPUT、POSTROUTING
    filter 表:INTPUT、FORWARD、OUTPUT
    

    规则链(chains)

    规则链是规则的集合。对特定的数据包设置相应的规则(读取规则链时是按照从上往下的顺序)

    INPUT		#  处理入站的数据包
    OUTPUT		#  处理出站的数据包
    FORWARD         #  处理转发的数据包
    PREROUTING	#  数据包进入路由表前
    POSTROUTING	#  数据包进入路由表后
    

    入站顺序(从左往右):PREROUTING <--- INPUT
    出站顺序(从左往右):OUTPUT <--- POSTROUTING
    转发顺序(从左往右):PREROUTING <--- FORWARD <--- POSTROUTING

    五、实例

    查看/删除规则
    iptables -L             #  列出所有规则
    iptables -L -nv		#  查看详细信息(IP 跟 端口会以数字形式显示)
    iptables -t nat -L      #  列出 nat 表中的所有规则
    iptables -t nat -L -nv  #  查看详细信息(IP 跟 端口会以数字形式显示)
    iptables -F             #  清除所有规则(如不指定表,则默认表为 filter)
    iptables -t nat -D INPUT 1  #  删除 nat 表 INPUT 链下的第一条规则
    
    在指定表中新建规则(如不指定,则默认为 filter 表)
    #  在 nat 表中开放 80 端口
    iptables -t nat -A INPUT -p tcp --dport 80 -j ACCEPT
    
    设置白名单
    #  允许 192.168.1.0/24 网段的主机访问
    iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT
    
    #  允许 192.168.2.0/24 网段的主机访问本机的 80 端口
    iptables -A INPUT -p all -s 192.168.2.0/24 --dport 80 -j ACCEPT
    
    指定范围
    #  指定 IP 范围
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
    #  指定端口范围
    iptables -t nat -A INPUT -p tcp --dport 90:100 -j ACCEPT
    
    端口映射
    #  当别的主机访问本地 80 端口时会被重定向到 8080 端口
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    
    禁止
    #  禁 Ping
    iptables -A INPUT -p icmp -j DROP
    #  禁 Ping
    iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
    #  禁止 MAC 地址为 00:11:22:33:44:55 的主机访问
    iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP
    #  禁止转发 MAC 地址为 00:11:22:33:44:55 的主机的数据
    iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55 -j DROP
    
  • 相关阅读:
    Java ConcurrentModificationException 异常分析与解决方案
    Kafka剖析(一):Kafka背景及架构介绍
    Linux下更改oracle客户端字符集和服务端字符集
    storm-kafka源码走读之KafkaSpout
    kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance
    Kafka源码深度解析-序列7 -Consumer -coordinator协议与heartbeat实现原理
    apache kafka系列之在zookeeper中存储结构
    Java transient关键字使用小记
    Kafka设计解析(一)- Kafka背景及架构介绍
    JavaScript-如何获取页面元素对象,元素id
  • 原文地址:https://www.cnblogs.com/anonymous-test/p/13865129.html
Copyright © 2020-2023  润新知