• linux系统iptables的操作


    安装

    yum install -y iptables iptables-services
    
    iptables -V   查看版本:
    
    配置文件:
    /etc/sysconfig/iptables-config 
    /etc/sysconfig/iptables        #记录规则文件	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    参数解释

    -L:列出一个链或所有链中的规则信息
    
    -n:以数字形式显示地址、端口等信息
    
    -v:以更详细的方式显示规则信息
    
    --line-numbers:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1
    
    -F:清空所有的规则(-X是清理自定义的链,用的少;-Z清零规则序号)
    
    -D:删除链内指定序号(或内容)的一条规则
    
    -P:为指定的链设置默认规则
    
    -A:在链的末尾追加一条规则
    
    -I:在链的开头(或指定序号)插入一条规则,指定行号就在指定行添加
    
    -t: 指定表名,默认filter表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    参数使用

    不使用-t指定表,默认使用filter表
    
    iptables -t nat -L  //指定查看nat表的规则
    
    iptables  -L        //默认查看规则
    
    iptables -nL        //以数字的形式显示ip和端口与协议
    
    iptables -nL --line //显示规则行号
    
    iptables  -F        //清空规则
    
    iptables  -F  链名   //清空单独的某一个链里面的规则
    
    保存规则:
    # service iptables save
    iptables-save > /etc/sysconfig/iptables     //保存规则到/etc/sysconfig/iptables文件
    iptables-restore < /etc/sysconfig/iptables   //从/etc/sysconfig/iptables读取规则
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    iptables语法

    iptables -t 表名 动作  [链名] [-p 匹配条件] [-j 控制类型]
    
    • 1
    动作
    修改默认规则: -P (大p)
    删除规则:-D
    修改规则:-R
    追加规则: -A  默认追加到链的末尾
    插入规则:-I (大i),在链的开头(或指定序号)插入一条规则
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例

    iptables -t filter -A INPUT -p tcp -j ACCEPT    #最后一行
    iptables -I INPUT -p udp -j ACCEPT              #第一行
    iptables -I INPUT 4 -p icmp -j ACCEPT           #(插入到第4行)
    iptables -D INPUT 3                             #删除第三行
    systemctl restart iptables                      #重启
    
    • 1
    • 2
    • 3
    • 4
    • 5

    规则匹配条件

    通用匹配(协议),可以独立使用
    协议:-p (小p)
    tcp     ---用的最多
    udp
    icmp    ---ping的时候用的协议
    
    #使用协议的时候可以不指定端口,使用端口的时候必须指定协议。
    iptables -A INPUT -p icmp -j REJECT    ----拒绝被ping
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    通过端口规则匹配:
    端口:
    --sport    ---源端口
    --dport    --目标端口
    
    案例:
    拒绝192.168.246.201这台机器通过ssh连接到这台服务器
    # iptables -I INPUT -s 192.168.246.201 -p tcp --dport 22 -j REJECT
    
    例子:端口的范围: 拒绝22端口到80端口的访问,包括22和80端口在内
    # iptables -I INPUT -s 192.168.246.201 -p tcp --dport 22:80 -j REJECT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    通过ip地址
    禁止源主机进来
    #iptables -I INPUT -s 192.168.246.201  -p icmp -j REJECT
    -s: 源ip地址
    
    ===========================================================================
    拒绝多个ip地址:后面跟ip地址可以更多个ip地址用逗号隔开
    # iptables -t filter -I INPUT -s 192.168.246.201,192.168.246.133  -p icmp -j REJECT
    
    ============================================================
    限制源10网段的数据包。
    # iptables -I INPUT -s 192.168.10.0/24 -j REJECT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    修改规则:
    将修改第二条规则访问80端口:
    # iptables -R INPUT 2 -p tcp --dport 80 -s 192.168.246.201 -j ACCEPT
    
    • 1
    • 2

    icmp类型匹配

    禁止ping策略原则
    iptables服务器是ping命令发起者或是接受者
    -i --in-interface:在INPUT链配置规则中,指定从哪一个网卡接口进入的流量(只能配置在INPUT链上)
    -o --out-interface:在OUTPUT链配置规则中,指定从哪一个网接口出去的流量(只能配置在OUTPUT链上)
    
    ====================================================
    icmp的类型:
    0: Echo Reply——回显应答(Ping应答)ping的结果返回。
    8: Echo request——回显请求(Ping请求),发出去的请求。
    
    =====================================================
    本机可以ping其他机器。其他机器不能ping通本机:
    iptables -I OUTPUT -o ens33 -p icmp --icmp-type 8 -j ACCEPT #允许自己ping别人
    iptables -I INPUT 2 -p icmp --icmp-type 8 -j DROP  #将进来的ping请求给丢弃了。
    
    =====================================================
    拒绝任何ping的协议:
    [root@iptables-server ~]# iptables -A INPUT -p icmp -j DROP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    扩展匹配

    指定ip范围
    语法: -m iprange --src-range
    # iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 192.168.246.199-192.168.246.206 -j REJECT
    
    • 1
    • 2
    指定多端口范围
    语法:
    -m multiport --sports   #源端口
    -m multiport --dports   #目的端口
    # iptables -A INPUT -p tcp -m  multiport --dports 22,80 -s 192.168.246.133 -j REJECT
    
    • 1
    • 2
    • 3
    • 4
    MAC地址匹配
    语法: -m mac --mac-source
    # iptables -I INPUT -m mac --mac-source 00:0C:29:64:E3:8D -j REJECT  #将指定的MAC地址服务请求全部禁止了
    
    • 1
    • 2
    通过网卡接口
    # iptables -I INPUT -i ens33 -j DROP  #谁也连不上了.
    
    • 1
    保存和删除规则
    删除:
    # iptables -D INPUT 3  #通过查看行号,指定行号删除;
    # iptables -D INPUT -p icmp -j REJECT   #方式二
    ===============================================================
    保存:
    iptables-save > /etc/sysconfig/iptables  #保存到文件里面,方式一
    service iptables save   #第二种方式,推荐
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    本地端口转发
    iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    
    • 1
    • 2

    网络地址转换

    案例图:

    SNAT:把内网地址转换成公网地址(源地址转换)

    一个数据包在经过路由之后(或者说在通过防火墙的过滤之后)才被知道他的源IP是谁,在路由之前只能看到目标IP,如果我看不到你的源IP,那怎么匹配想过滤的数据包并进行源地址转换?我防火墙根本就不能确定你是否是符合匹配条件的IP,所以只能使用POSTROUTING

    DNAT:要把公网ip换到内网IP -----公网ip只有一个, 内网ip有多个。(目标地址转换)

    如果我不在路由之前就把目标地址转换完成,很显然当数据包到达入口IP之后,他的目的已经达到了,因为他本来的目标IP就是防火墙的对外公网IP,那么数据包还会往里面走吗?显然不可能了,所以只能使用PREROUTING

    用户虚拟机1 ens33 192.168.73.128/24
    出口虚拟机2 ens36 192.168.73.129/24   ens33 10.12.153.54/24     
    代理虚拟机3 ens33 10.12.153.42/24     ens36 192.168.110.129/24
    后端虚拟机4 ens33 192.168.110.128/24
    
    1-2 同一网段
    2-3 同一网段
    3-4 同一网段
    其中2-3分别拥有两张网卡可以与1,4台服务器通信,还有一张网卡可以连接公网
    
    
    虚拟机3,4
    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    
    sysctl -p
    
    ip r add 10.12.153.54 via 192.168.73.129
    ip r add 10.12.153.42 via 192.168.110.128
    
    
    
    1号ip       192.168.73.128
    2与1同网段ip 192.168.73.129
    2与3同网段ip 10.12.153.54
    3与2同网段ip 10.12.153.42
    3与4同网段ip 192.168.110.129
    4号ip       192.168.110.128
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    2号主机
    iptables -t nat -A PREROUTING -d 192.168.73.129 -j DNAT --to-destination 10.12.153.42     //2与1号同网段ip转换3与2号同网段ip
    iptables -t nat -A POSTROUTING -s 192.168.73.128 -j SNAT --to-source 10.12.153.54   //1号ip转换2与3号同网段ip
    
    3号主机
    iptables -t nat -A PREROUTING -d 10.12.153.42 -j DNAT --to-destination 192.168.110.128   //3与2同网段ip转换4号ip
    iptables -t nat -A POSTROUTING -s 10.12.153.54 -j SNAT --to-source 192.168.110.129    //2与3同网段ip转换3与4同网段ip
    
    3号主机
    iptables -t nat -A PREROUTING -d 192.168.110.129 -j DNAT --to-destination  10.12.153.54    //3与4同网段ip转换2与3号同网段ip
    iptables -t nat -A POSTROUTING -s 192.168.110.128 -j SNAT --to-source 10.12.153.42
    //4号ip转换3与2号同网段ip
    
    2号主机想
    iptables -t nat -A PREROUTING -d 10.12.153.54 -j DNAT --to-destination 192.168.73.129     //2与3同网段ip转换2与1号同网段ip
    iptables -t nat -A POSTROUTING -s 10.12.153.42 -j SNAT --to-source  192.168.73.128    //3与2同网段ip转换1号ip
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    在一号主机访问二号主机的与一号主机同一网段的ip
    curl 192.168.73.129   //访问到四号主机的nginx页面就证明转发成功
    
    • 1
    • 2
  • 相关阅读:
    Android App开发超实用实例 | ​Broadcast
    idea如何查找maven依赖、查看依赖关系、删除重复的jar包
    HTML5基础:label,select,textarea
    设计模式23--观察者模式
    SSC mode
    数据可视化加定语
    [Vue] 22.Vue中的组件:动态组件和异步组件
    友情提示:lazarus的tsortgrid.autofillcolumns存在BUG
    1.1 git常规操作
    【CSDN攻略】互动选题及目标
  • 原文地址:https://blog.csdn.net/qq_59207739/article/details/136460288