• iptables 防火墙配置


    iptables 防火墙配置

    防火墙就是堵和通的作用。

    iptables :包过滤防火墙,是内核防火墙netfilter的管理工具。它可以让系统管理员根据自己的需求定义网络流量的过滤规则,以保护服务器和网络免受潜在的安全威胁。

    防火墙是一种位于网络与主机之间的安全屏障,它可以监控和控制进出网络的数据流量。通过 iptables,管理员可以创建一系列规则来控制数据包的流动。每个规则由匹配条件(如源 IP 地址、目标 IP 地址、端口等)和操作指令组成。当数据包经过 Linux 内核时,iptables 会按照预先定义的规则集进行匹配和处理。根据规则的定义,iptables 可以允许、拒绝、丢弃或重定向数据包,以实现对流量的精确控制。

    规则链的分类–五链

    在进行路由选择前处理的数据包:PREROUTING

    处理流入的数据包:INPUT

    处理流出的数据包:OUTPUT

    处理转发的数据包:FORWARD

    在进行路由选择后处理的数据包:POSTROUTING

    处理的动作

    ACCEPT:允许流量通过。

    REJECT:拒绝流量通过,(流量拒绝会通知,会返回流量的拒绝信息)

    LOG:记录日志信息。

    DROP:拒绝流量通过,丢弃 (直接把流量丢弃,不会返回任何值)

    iptables 常用参数和作用

    参数作用
    -P设置默认策略
    -F清空规则链
    -L查看规则链
    -A在规则链的末尾加入新的规则
    -I num在规则链的头部加入新的规则
    -D num删除某一条规则链
    -s匹配来源的ip/MASK
    -d配置目标地址
    -i 网卡名称匹配这块网卡流入的数据
    -o 网卡名称匹配这块网卡流出的数据
    -p匹配协议,例如:TCP,UDP,ICMP
    –dport num匹配目标端口号
    –sport num匹配来源端口号
    -j指定匹配到数据包后的动作,如 ACCEPT、DROP、REJECT等。

    实验环境:redhat8 ip:192.168.188.186

    在redhat8有iptables和firewalld,这里我们停掉firewalld。

    systemctl stop firewalld		# 关闭firewalld防火墙
    
    systemctl status firewalld		# 查看firewalld防火墙状态
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    设置firewalld为开启不启动。

    systemctl disable firewalld
    
    • 1

    image-20230910144541377

    iptables 防火墙配置

    查看规则链

    iptables -L
    
    • 1

    image-20230910144941262

    清空规则链

    iptables -F
    
    • 1

    image-20230910145137370

    由于我们没有配置规则链,所以本来就是空的。

    设置默认规则将流入的流量丢弃

    iptables -P INPUT DROP
    
    • 1

    image-20230910145629008

    在输入命令后,发现无法输入命令了已经,因为我是通过SSH连接到redhat8中的,流量属于流入的流量,通过设置默认规则后,将流入的流量全部禁掉了,所以无法使用SSH连接了。

    并且主机也无法使用ping命令ping通redhat8了。

    image-20230910150011882

    允许ICMP协议流量通过

    iptables -I INPUT -p icmp -j ACCEPT
    
    • 1

    image-20230910150819617

    source表示源,不管从任何地方来的ICMP协议都允许通过。

    测试网络连通性,发现可以ping通。

    image-20230910150844452

    虽然可以ping通,但是SSH还是无法连接不,因为没有设置允许TCP协议流量通过。(SSH协议用的是TCP协议)

    删除默认策略

    iptables -D INPUT 1
    
    • 1

    image-20230910151252103

    可以看到模式是DROP

    说明1 表示规则的编号,这里指的是第 1 条规则。

    允许所以流量通过

    iptables -P INPUT ACCEPT
    
    • 1

    image-20230910151750375

    这样SSH就可以连接了

    image-20230910152141826

    设置将所有流入22端口的流量全部拒绝

    iptables -A INPUT -p tcp --dport 22 -j REJECT
    
    • 1

    image-20230910153138656

    命令执行后,SSH就无法连接了。

    查看配置的规则

    image-20230910153356076

    允许指定网段的22端口通过

    iptables -I INPUT -s 192.168.188.0/24 -p tcp --dport 22 -j ACCEPT
    
    • 1

    该命令的含义是进入22端口所有的TCP流量只能允许192.168.188.0网段通过。

    image-20230910154457295

    注意防火墙的匹配规则是从上往下进行匹配的

    说明:流量进入后,先匹配第一个规则,查看是否属于192.168.188.0该网段的,如果属于则同意通过。如果不是192.168.188.0该网段的,就会拒绝所有,也就是匹配到了第二个规则。这里设置的效果和白名单一样。

    设置某个端口的流量全部拒绝(UDP,TCP)

    iptables -A INPUT -p tcp --dport 80 -j REJECT
    iptables -A INPUT -p udp --dport 80 -j REJECT
    
    • 1
    • 2

    image-20230910155854397

    在input链中添加某个IP拒绝访问某个端口

    iptables -A INPUT -p tcp -s 192.168.188.1 --dport 8080 -j REJECT
    
    • 1

    image-20230910160545834

    这样192.168.188.1这个ip地址就无法访问8080端口。

    在redhat8中部署http服务

    python3 -m http.server 8080
    
    • 1

    image-20230910161115976

    然后在真实机中无法访问

    image-20230910161150043

    在新开启的kali中可以访问

    image-20230910161231173

    禁用指定的端口范围内的TCP数据包进入服务器

    iptables -A INPUT -p tcp --dport 8000:9000 -j REJECT
    
    • 1

    image-20230910161912096

    保存规则

    在重启虚拟机后设置的规则都会消失,所以我们需要保存设置好的规则。

    在Redhat8中使用的命令

    iptables-save
    
    • 1

    在Centos7/Redhat7中使用的命令

    service iptables save
    
    • 1
  • 相关阅读:
    Git 学习笔记 | Git 的简介与历史
    SpringCloud-4-基础工程-创建服务提供者
    【计算机视觉40例】案例26:姿势识别
    EPICS应用程序开发1 -- 开始
    数据结构里的一棵树
    从银行家算法看程序构建
    springboot享瘦减肥中心管理系统
    页面设计都有哪些好用的工具推荐?
    LFS学习系列4 — I.介绍
    Python类方法和静态方法(含义、语法、标识、代码示例)
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/132894676