zoukankan      html  css  js  c++  java
  • 五分钟彻底学会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
  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/kenken2018/p/10034492.html
Copyright © 2011-2022 走看看