• 第二十四章 IPtables防火墙


    一、iptables防火墙基本概述

    1.应用场景

    1.主机安全
    2.端口转发/ip转发
    3.内部共享上网

    2.iptables工作流程

    1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的
    2.匹配规则时是按照从上到下依次匹配
    3.只要符合匹配到的规则,就不再往下匹配
    4.如果都没有匹配上,则匹配默认规则
    5.默认规则最后执行,默认规则是全部都允许
    6.匹配次数越多的规则越往前放

    二、iptables四表五链

    #四表:
    1.filter表
    2.nat表
    3.raw表
    4.mangle表

    #五链:
    1.INPUT
    2.OUTPUT
    3.FORWARD
    4.PREROUTING
    5.POSTROUTING

    1.filter表

    主要作用就是阻止和允许访问
    #包含的链:
    1.INPUT:过滤进入主机的数据包
    2.OUTPUT:过滤从主机出去的数据包
    3.FORWARD:转发经过主机的数据包

    2.nat表

    主要作用就是IP和端口转发
    #包含的链:
    1.PREROUTING:数据流入时,改写数据包地址
    2.POSTROUTING:数据流出时,改写数据包地址
    3.OUTPUT:过滤从主机出去的数据包

    三、iptables安装

    1.安装

    [root@m01 ~]# yum install -y iptables-services

    2.安装iptbles支持的内核模块

    [root@m01 ~]# modprobe ip_tables
    [root@m01 ~]# modprobe iptable_filter
    [root@m01 ~]# modprobe iptable_nat
    [root@m01 ~]# modprobe ip_conntrack
    [root@m01 ~]# modprobe ip_conntrack_ftp
    [root@m01 ~]# modprobe ip_nat_ftp
    [root@m01 ~]# modprobe ipt_state

    #查看加载的模块
    [root@m01 ~]# lsmod | egrep 'filter|nat|ipt'

    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_state

    3.启动

    [root@m01 ~]# systemctl stop firewalld.service

    [root@m01 ~]# systemctl start iptables.service

    4.iptables常用命令

    #常用参数
    1.链管理:
       -N:new, 自定义一条新的规则链;
       -X:delete,删除自定义的规则链;
          注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
       -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
              ACCEPT:接受
              DROP:丢弃
              REJECT:拒绝
       -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
       
    2.规则管理:
       -A:append,追加规则;
       -I:insert, 插入,要指明位置,省略时表示第一条;
       -D:delete,删除;
          (1) 指明规则序号;
          (2) 指明规则本身;
       -R:replace,替换指定链上的指定规则;

       -F:flush,清空指定的规则链;
       -Z:zero,置零;
          iptables的每条规则都有两个计数器:
              (1) 匹配到的报文的个数;
              (2) 匹配到的所有报文的大小之和;        
    3.查看:
    -L:list, 列出指定鏈上的所有规则;
       -n:numberic,以数字格式显示地址和端口号;
       -v:verbo;
       --line-numbers:显示规则的序号;

    四、iptables常用操作

    1.查看防火墙

    #默认是filter表
    [root@m01 ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination        
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination        
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    2.查看指定表

    #-t:    指定表
    [root@m01 ~]# iptables -nL -t nat

    3.清除防火墙规则

    [root@m01 ~]# iptables -F
    [root@m01 ~]# iptables -X
    [root@m01 ~]# iptables -Z

    4.添加防火墙规则

    [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

    [root@m01 ~]# iptables -nL
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination        
    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

    5.删除防火墙规则

    #防火墙规则加序号
    [root@m01 ~]# iptables -nL --line-numbers
    Chain INPUT (policy ACCEPT)
    num target     prot opt source               destination        
    1   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:2
    2   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

    Chain FORWARD (policy ACCEPT)
    num target     prot opt source               destination        

    Chain OUTPUT (policy ACCEPT)
    num target     prot opt source               destination

    #删除指定id的规则
    [root@m01 ~]# iptables -D INPUT 3

    五、防火墙配置实例

    1.禁止访问22端口

    [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

    iptables #防火墙命令
    -t #指定表
    filter #filter表
    -A #追加规则到链
    INPUT #指定链
    -p #指定协议
    tcp #tcp协议
    --dport #指定端口
    22 #端口号
    -j #指定动作
    DROP #丢弃

    2.禁止IP访问

    [root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -j DROP

    -s #指定IP
    10.0.0.7 #IP地址或网段

    3.禁止IP网段

    [root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP

    -i #指定网卡

    4.只允许某个IP访问

    #方式一:
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -j DROP

    #方式二:
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP

    ! #取反

    5.拒绝端口范围

    #如果端口是连续的
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22:200 -j DROP

    #如果端口不是连续的
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 22:200,3000:4000 -j DROP

    六、企业如何配置

    1.配置之前

    1.考虑一下哪些机器需要防火墙
    2.该服务器部署了哪些服务
    nginx
    sshd
    3.服务的端口
    80
    443
    22
    4.其他端口全部拒绝

    2.配置

    [root@m01 ~]# iptables -F
    [root@m01 ~]# iptables -X
    [root@m01 ~]# iptables -Z
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -s 10.0.0.1 -j ACCEPT
    [root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443   -j ACCEPT
    [root@m01 ~]# iptables -t filter -P INPUT DROP

    3.防火墙规则永久生效

    #防火墙配置文件,当重启防火墙时,会读取配置文件,配置文件中的配置才会永久生效
    [root@m01 /home/lhd]# vim /etc/sysconfig/iptables

    #想要永久生效配置,配置好防火墙策略,测试成功
    [root@m01 /home/lhd]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

    七、iptables转发

    1.端口转发

    [root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 5555 -j DNAT --to-destination 172.16.1.7:22

    [root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

    2.IP转发

    iptables -t nat -A PREROUTING -d 10.0.1.61 -j DNAT --to-destination 172.16.1.7
    iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

    3.内部共享上网

    echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    sysctl -p

    iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

     

  • 相关阅读:
    51CTO资料索引 很不错
    extern和extern“c"作用详解 以及C和C++混合编程 在文章:3.深层揭密extern "C" 部分可以看到 .
    用VC++实现图像检索技术(转)
    OpenSceneGraph FAQ
    NeHe OpenGL教程 02 渲染第一个多边形
    C++经验谈(摘抄)
    利用条件编译实现工程定制版本的自动输出
    没有文件扩展".js"的脚本引擎 解决办法
    OpenGL FAQ
    NeHe OpenGL教程 01 创建OpenGL窗口
  • 原文地址:https://www.cnblogs.com/jhno1/p/13687456.html
Copyright © 2020-2023  润新知