• 五分钟彻底学会iptables防火墙--技术流ken


    iptables简介

    IPTABLES 是与最新的 3.5 版本 Linux内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

    iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

                                                                                                                  --摘自360百科

    之前已经写过一篇关于iptables的博客《iptables实战案例详解-技术流ken》,例子虽然非常好,但是总结的还不是很到位。

    本篇博客将详细讲解iptables的使用规则。希望每个人认真读完本篇博客都可以让iptables成为工作中的强盾。

    四表五链

    学习iptables提及最多的无非就是四表五链,也许之前你对此早有耳闻,但是没有真正的研究过。下面这些总结将让你简单的记住什么是四表五链。

    四表

    • filter表                           过滤数据包(默认表,最常用)
    • Nat表                             用于网络地址转换(IP、端口)
    • Mangle表                      修改数据包的服务类型、TTL、并且可以配置路由实现QOS
    • Raw表                           决定数据包是否被状态跟踪机制处理

    五链

    • INPUT链                    进来的数据包应用此规则链
    • OUTPUT链                 外出的数据包应用此规则链
    • FORWARD链              转发数据包时应用此规则链
    • PREROUTING链          对数据包作路由选择前应用此链(所有的数据包进来的时侯都先由这个链处理)
    • POSTROUTING链        对数据包作路由选择后应用此链(所有的数据包出来的时侯都先由这个链处理)

    每个表中含有如下链

     

    iptables使用详解

     iptables的使用格式如上图所示

    table

    -t后面跟上你要操作的表

    如果不使用-t默认操作的是filter表

    -t:指定表名(默认是对filter表进行操作)
    有如下四种:
    -t filter
    -t nat
    -t mangle
    -t raw

    command

    即需要执行的命令常用命令操作有-A,-I, -D,-F,-L

    -A:追加新规则
    -D:删除指定的规则
    -I:首部或者指定的位置插入新规则
    -F:清空规则
    -Z:清空计数器
    -P:修改默认规则
    -N:自定义一条链
    -X:删除自定义的链
    -E:修改自定义链的名字
    -L;列举出iptables中所配置的规则
    -n:如果不用n选项,那么系统会将协议反解为协议名称,这个过程很慢,该选择的作用是就用来实现禁止反解为名称
    --line:在行首显示规则编号
    -v:显示详细信息(通常用来看计数器)
    
    注意:
    规则中的表名、链名要区分大小写

    chain

    即链,需要指出对哪个表中的哪个链进行操作

    表名为小写,链名为大写,严格区分大小写

    有如下五种:
    INPUT
    OUTPUT
    FORWARD
    PREROUTING
    POTROUTING

    parameter

    即参数,分为通用匹配和扩展匹配

    扩展匹配又分为隐式匹配和显示匹配

    通用匹配
    扩展匹配
      隐式扩展
      显式扩展

    target

    即目标动作

    ACCEPT:  请求被运行,数据包可以通过
    DROP:    认定是一个非法请求,将数包悄悄的丢弃
    REJECT:  认定是一个非法请求,禁止数据包同行的(带有通知机制)
    LOG:     将这次客户端的请求记录到日志中
    MARK:    标记一个连接
    SNAT:     把数据包中的源地址部分替换为指定的IP
    DNAT:     修改数据包中的目的IP

    iptables简单常用的操作

    1. 设置默认规则

    [root@ken ~]# iptables -P INPUT DROP    #设置INPUT链默认规则设置为DROP
    [root@ken ~]# iptables -P INPUT ACCEPT  #设置INPUT链默认规则设置为ACCEPT 
    [root@ken ~]# iptables -P OUTPUT DROP   #设置OUTPUT链默认规则设置为DROP,如果OUTPUT链开启DROP,相应组合后可防范反弹式木马 
    [root@ken ~]# iptables -P OUTPUT ACCEPT #设置OUTPUT链默认规则设置为ACCEPT 

    2.清空规则

    [root@ken ~]# iptables -t filter -F    #清空filter表规则 
    [root@ken ~]# iptables -t nat -F       #清空nat表规则 
    [root@ken ~]# iptables -t mangle -F    #清空mangle表规则 
    [root@ken ~]# iptables -t raw -F       #清空raw表规则 

    3. 查看规则链

    [root@ken ~]# iptables -L -n --line -v 

    iptables通用匹配

    -s:指定源ip
    -d:指定目标ip
    -i:指定进入数据包所经过网卡名称
    -o:指定发出数据包所经过网卡名称

    1. 指定仅能10.220.5.138可以ping(访问)本机

    root@ken ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT

    2.允许所有进入10.220.5.138的流量

    [root@ken ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT

    3.允许从eth0进入的流量

    [root@ken ~]# iptables -A INPUT -i eth0 -j ACCEPT

    iptables扩展匹配之隐式匹配

    隐式匹配使用-p后面加上协议名称

    -p tcp/udp/icmp

    1.对于icmp协议的隐式匹配

    格式:

    -p icmp --icmp-type

    ping数据包协议是icmp协议

    type

    0:应答包

    8:请求包

     1.可以从10.220.5.1 ping 其他主机,禁止其他主机ping 10.220.5.1

    [root@ken ~]# iptables -I INPUT -p icmp --icmp-type 0 -d 10.220.5.1 -j ACCEPT
    [root@ken ~]# iptables -I INPUT -p icmp --icmp-type 8 -s 10.220.5.1 -j ACCEPT

    2.对于tcp协议的隐式扩展

    -p tcp 选项

    选项:

    --sport:源端口

    --dport:目标端口

    --tcp-flags list1 list2:根据tcp包中的标志位进行匹配

    --syn:syn为1,ack,fin都为0,即三次握手的第一次

    1.让所有主机可以访问10.220.5.1上的网站,但是禁止10.220.5.191访问网站

    [root@ken ~]# iptables -A INPUT -p tcp --dport 80 -d 10.220.5.1 -j ACCEPT
    [root@ken ~]# iptables -I INPUT -p tcp --dport 80 -s 10.220.5.191 -j DROP

    2.只允许从10.220.5.182发送连接httpd请求

    [root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 --tcp-flags syn,ack,fin syn -j ACCEPT

    3. 对于udp协议的隐式扩展

    -p udp --sport|--dport

    用的不多。略

    iptables扩展匹配之显示匹配

    注意:用显式扩展的时候,必须指定扩展功能所依赖模块的名称

    指定: -m 扩展名称 --options-xxx

    显示扩展1state

    作用:根据nv_conntrack的记录来对连接进行规则匹配,是根据连接记录中的状态信息做匹配

    状态:

    NEW:表示新的连接请求(syn=1 ack=0 fin=0

    三次握手的第一次

    ping请求的第一包

    udp通信的第一个包

    ESTABLISHED:连接建立完成状态下所传递的数据包(syn=0 ack=1 fin=0

    INVALID:非法连接

    RELATED:相关联的连接

     1.让所有人都可以访问web站点

    [root@ken ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT
    [root@ken ~]# iptables -A OUTPUT -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT

    显示扩展2multiport

    作用:对连续或者离散的端口做匹配

    选型:

            --sports port[,port|,port:port]...

            --dports port[,port|,port:port]...

            --ports  port[,port|,port:port]...

     

        例子:

         --sport 80,22,3306         逗号表示离散

         --sport 80:1024              冒号表示连续

         --sport 80,22,23:1024    离散和连续的可以写在一起

    1.允许让10.220.5.182访问本机的80 22 443 3389 3306端口

    [root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 -m multiport --dports 80,22,443,3389,3306 -j ACCEPT

    显示扩展3iprange

    作用:用于对ip地址的范围做匹配

        选项

            --src-range 

            --dst-range 

                

    1. 10.220.5.1~10.220.5.100无法访问web

    [root@ken ~]# iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 10.220.5.1-10.220.5.100 -j DROP

    显示扩展4limit

    作用:限速

            --limit rate[/second|/minute|/hour|/day]:指示每分钟/限制最大连接数为

            --limit-burst number:指示当总连接数超过xx时,启动 litmit/minute 限制

    1.实现每分钟可以发送10个ping包,峰值是7

    [root@ken ~]# iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 7 -j ACCEPT 

    2.防暴力破解。限制登录22端口的请求的频率(限制1小时只能尝试登录ssh5次)

    [root@ken ~]# iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/hour --limit-burst 5 -j ACCEPT 

    显示扩展5connlimit

    作用:限制一个客户端可以同时与当前主机建立几个链接

           [!] --connlimit-above n

    1. 限制每个IP可以同时登录5ssh

    [root@ken ~]# iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP 
    [root@ken ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 相关阅读:
    Ubuntu 12.04 git server
    Moonlight不再继续?!
    Orchard 视频资料
    一恍惚八月最后一天了
    Box2D lua binding and Usage
    50岁还在编程,也可以是一种成功
    DAC 4.2 发布
    再次祝贺OpenStack私有云搭建成功
    vue项目快速搭建
    pdf.js使用详解
  • 原文地址:https://www.cnblogs.com/kenken2018/p/10034492.html
Copyright © 2020-2023  润新知