网络安全 Day29-运维安全项目-iptables防火墙

iptables防火墙

  • [1. 防火墙概述](#1. 防火墙概述)
  • [2. 防火墙](#2. 防火墙)
    • [2.1 防火墙种类及使用说明](#2.1 防火墙种类及使用说明)
    • [2.2 必须熟悉的名词](#2.2 必须熟悉的名词)
    • [2.3 iptables 执行过程※※※※※](#2.3 iptables 执行过程※※※※※)
    • [2.4 表与链※※※※※](#2.4 表与链※※※※※)
      • [2.4.1 简介](#2.4.1 简介)
      • [2.4.2 每个表说明](#2.4.2 每个表说明)
        • [2.4.2.1 filter表 :star::star::star::star::star:](#2.4.2.1 filter表 :star::star::star::star::star:)
        • [2.4.2.2 nat表](#2.4.2.2 nat表)
    • [2.5 环境准备及命令](#2.5 环境准备及命令)
    • [2.6 案例01::star::star::star::star::star:禁止访问22端口](#2.6 案例01::star::star::star::star::star:禁止访问22端口)
    • [2.7 案例02: :star::star::star::star::star:屏蔽对应的ip](#2.7 案例02: :star::star::star::star::star:屏蔽对应的ip)
    • [2.8 案例03::star::star::star::star::star:禁ping](#2.8 案例03::star::star::star::star::star:禁ping)
    • [2.9 案例04::star::star::star:禁止10.0.0.0/24内网访问22端口](#2.9 案例04::star::star::star:禁止10.0.0.0/24内网访问22端口)
    • [2.10 案例05: :star: 指定多个端口屏蔽](#2.10 案例05: :star: 指定多个端口屏蔽)
    • [2.11 案例06::star::star::star::star::star: 防火墙规则的保存生效与备份恢复](#2.11 案例06::star::star::star::star::star: 防火墙规则的保存生效与备份恢复)
    • [2.12 案例07::star::star: 收尾设置链的默认规则](#2.12 案例07::star::star: 收尾设置链的默认规则)

1. 防火墙概述

  • 目标:
    • 封或开启端口
    • 封或开启ip

2. 防火墙

2.1 防火墙种类及使用说明

  • 硬件: 整个企业入口
    • 三层路由: H3C 华为 Cisco(思科)
    • 硬件防火墙: 深信服,绿盟,奇安信...
    • 棱镜门 0day. 勒索病毒。 国内互联网企业去IOE运动。
    • Juniper
  • 软件: 开源软件 网站内部 封ip 封ip
    • iptables 写入到Linux内核中 以后服务docker 工作在 4层(大部分)
    • firewalld C7 底层也是iptables.
    • nftalbes C8
    • ufw (ubuntu firewall) Ubuntu
  • 云防火墙(公有云)
    • 阿里云:
      • 安全组 (封ip,封端口)
      • NAT网关(共享上网,端口映射...)
      • waf应用防火墙
  • waf防火墙(应用防火墙,处理7层的攻击) SQL注入,等攻击.
    • 书写规则(描述攻击过程,关键提示,关键操作.)

企业选型建议:

中小企业: 使用公有云,安全组,waf防火墙,态势感知.

访问量巨大: 使用硬件防火墙,waf防火墙,硬件服务器+云服务器

2.2 必须熟悉的名词

  • 容器: 瓶子 罐子 存放东西
  • 表(table) : 存放====的容器,防火墙最大概念
  • 链(chain) : 存放==规则==的容器
  • 规则(policy): 准许或拒绝规则 ,未来书写的防火墙条件就是各种防火墙规则

掌握表和链之间联系即可。

Netfilter 表(tables) 链(chains) 规则(Policy)
一栋楼 楼里的房子 房子里的柜子 柜子里衣服,摆放规则

2.3 iptables 执行过程※※※※※

工作流程小结:※※※※※

  1. 防火墙是层层过滤 的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  2. 如果**++匹配成功++ 规则,即明确表示是 ++拒绝(DROP)还是接收(ACCEPT)**,数据包就不再向下匹配新的规则++。
  3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到**++匹配默认规则++**得到明确的阻止还是通过。
  4. 防火墙的**++默认规则++ ++所有规则都匹配完才会匹配的++**。

2.4 表与链※※※※※

2.4.1 简介

  • 表(table)是对功能的分类,防火墙功能(filter表),共享上网,端口转发(nat表)

  • 链对数据流进行处理,需要使用不同的链(数据流入(INPUT),数据流出(OUTPUT))

  • iptables 是4表5链

  • 4表: filter 表 nat表 raw表 mangle表

  • 伍链: INPUT OUTPUT FORWARD PREROUTING POSTROUTING

2.4.2 每个表说明

2.4.2.1 filter表 ⭐️⭐️⭐️⭐️⭐️

  • 是iptables默认的表,filter表示过滤.
  • 实现防火墙功能:(对数据包的filter过滤)屏蔽或准许,端口,ip.
filter 强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表示iptables默认使用的表,这个表定义了三个链(chains) 企业工作场景:主机防火墙
INPUT ⭐️⭐️⭐️⭐️⭐️ 负责过滤所有目标地址是本机地址的数据包 通俗来说:就是过滤进入主机的数据包 (能否让数据包进入服务器)
FORWARD 路过: 负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍 LVS NAT模式,net.ipv4.ip_forward=0
OUTPUT 处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包

2.4.2.2 nat表

  • 实现nat功能
    • 实现共享上网(内网服务器上外网)
    • 端口映射和ip映射
nat 负责网络地址转换的,即来源与目的IP地址和port的转换。 应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。 工作场景: 1. 用于企业路由(zebra)或网关(iptables),共享上网POSTROUTING ) 2. 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(PREROUTING ) 3. WEB,单个端口的映射,直接映射80端口(PREROUTING) 这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。
OUTPUT 和主机放出去的数据包有关,改变主机发出数据包的目的地址。
PREROUTING 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等 就是收信时,根据规则重写收件人的地址。 例如:把公网IP:xxx.xxx.xxx.xxx映射到局域网的xx.xx.xx.xx服务器上。 如果是web服务,可以报80转换为局域网的服务器9000端口上 10.0.0.61 8080(目标端口) ----nat---à 10.0.0.7 22
POSTROUTING 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。 写好发件人的地址,要让家人回信时能够有地址可回。 例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。 生产应用:局域网共享上网

课外了解: 官方最全超级详解传送门

2.5 环境准备及命令

iptables iptables启动或关闭的命令

oldboy-bao 10.0.0.61 172.16.1.61

  1. 为了使用systemctl管理安装的软件:yum install -y iptables-services

  2. 检查结果

    sh 复制代码
    [root@oldboy-bao ~] rpm -qa |grep iptables 
    iptables-services-1.4.21-35.el7.x86_64   #我们安装的。
    iptables-1.4.21-35.el7.x86_64            #系统自带
  3. 启动iptables 内核模块

    复制代码
    手动加载iptables内核模块(直接复制到虚拟机上就好了)
    
    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_state	
  4. 让配置永久生效

    复制代码
    chmod +x /etc/rc.d/rc.local
    cat >>/etc/rc.local<<EOF
    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_state	
    EOF
  5. 检查是否加载防火墙iptables 模块

    sh 复制代码
    [root@oldboy-bao ~] lsmod |egrep 'filter|nat|ipt'
    nf_nat_ftp             12809  0 
    nf_conntrack_ftp       18478  1 nf_nat_ftp
    iptable_nat            12875  0 
    nf_nat_ipv4            14115  1 iptable_nat
    nf_nat                 26583  2 nf_nat_ftp,nf_nat_ipv4
    nf_conntrack          139264  6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
    iptable_filter         12810  0 
    ip_tables              27126  2 iptable_filter,iptable_nat
    libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
    [root@oldboy-bao ~] lsmod |egrep 'filter|nat|ipt' |wc -l
    9
  6. 关闭已有的firewalld防火墙:systemctl stop firewalld +systemctl disable firewalld

  7. 清空iptables自带规则

    1. 查看规则:iptables -t filter -nL

    2. 清空规则

      复制代码
      iptables -t filter -F   #flush清空规则
      iptables -X             #删除定义的链。
      iptables -Z             #清空计数器。

2.6 案例01:⭐️⭐️⭐️⭐️⭐️禁止访问22端口

  • 在filter表的INPUT连上新加1条拒绝规则,拒绝所有目标端口是22的请求。

    sh 复制代码
    iptables -t filter -I INPUT -p tcp --dport 22  -j  DROP
    iptables -t filter -nL --line-number #显示规则并添加序号
    iptables -t filter -D INPUT 1 #删除filter表INPUT链的第1个规则

2.7 案例02: ⭐️⭐️⭐️⭐️⭐️屏蔽对应的ip

  • DOS拒绝式服务攻击。特点就是某几个ip不断访问。
  • 在filter表的INPUT链上添加拒绝规则,拒绝源ip是10.0.0.1的访问。
sh 复制代码
屏蔽来自于10.0.0.1的访问
iptables -I INPUT -s  10.0.0.1  -j DROP
iptables -t filter -nL --line-number #显示规则并添加序号
iptables -t filter -D INPUT 1 #删除filter表INPUT链的第1个规则

2.8 案例03:⭐️⭐️⭐️⭐️⭐️禁ping

  • 我们需要禁止任何人ping ip,让用户无法ping通。
  • ping背后是使用icmp协议(数据包)。
  • 实现方法:
    • 🅰️ ✅ 通过Iptables实现。

    • 🅱️通过Linux内核参数实现。

      sh 复制代码
      iptables -I INPUT    -p icmp    -j DROP
      开启另一个机器ping。

2.9 案例04:⭐️⭐️⭐️禁止10.0.0.0/24内网访问22端口

  • 实现22端口只能通过堡垒机访问或只能通过内网访问。
  • 未来可以改为只通过内网访问,准许172.16.1.0/24访问22端口。
  • 翻译:添加filter表INPUT链接拒绝规则,禁止源ip是10.0.0.0/24网段访问目标端口是22,协议tcp.
  • 环境准备
    • 双网卡 eth0 10, eth1 172(lan区段)
环境准备 需求 细节
oldboy-bao 双网卡 eth0 10(外网) eth1 172(内网)
oldboy-docker 双网卡 eth0 10(外网) eth1 172(内网)
  • 添加网卡设置lan区段:添加到和堡垒机相同的区段

  • 书写网卡配置文件

    sh 复制代码
    oldboy-docker
    
    [root@oldboy-docker ~] cat /etc/sysconfig/network-scripts/ifcfg-eth1
    DEVICE=eth1
    NAME=eth1
    BOOTPROTO=none
    ONBOOT=yes
    IPADDR=172.16.1.62
    PREFIX=24
    [root@oldboy-docker ~] systemctl restart network 
  • 配置规则之前测试

    sh 复制代码
    ssh -p22 10.0.0.61  #ctrl + d 退出
    ssh -p22 172.16.1.61
    都可以链接与访问。
  • 进行配置

    sh 复制代码
    翻译:添加filter表INPUT链接拒绝规则,禁止源ip是10.0.0.0/24网段访问目标端口是22,协议tcp.
    iptables -I INPUT -s 10.0.0.0/24  -p tcp   --dport 22  -j DROP 
  • 配置规则之后测试

    sh 复制代码
    ssh -p22 10.0.0.61    访问失败
    ssh -p22 172.16.1.61  访问成功
    都可以链接与访问。

经过漫长等待,10网段访问失败。

2.10 案例05: ⭐️ 指定多个端口屏蔽

  • 禁止80,443访问。

    sh 复制代码
    --dport默认只能指定1个端口或指定端口范文 通过:(冒号)实现。
    iptables -I INPUT  -p tcp   --dport 1:1024   -j DROP
    
    使用multiport模块,就可以指定多个端口
    iptables -I INPUT  -p tcp  -m multiport --dport 80,443 -j DROP

2.11 案例06:⭐️⭐️⭐️⭐️⭐️ 防火墙规则的保存生效与备份恢复

  1. 配置的防火墙规则重启Linux或iptables服务后是否仍然生效

    sh 复制代码
    iptables -I INPUT -s  10.0.0.1  -j ACCEPT 
    iptables -I INPUT    -p icmp    -j DROP
    iptables -I INPUT -s 10.0.0.0/24  -p tcp   --dport 22  -j ACCEPT
    iptables -I INPUT  -p tcp  -m multiport --dport 80,443 -j ACCEPT
  2. 通过iptables-save输出/etc/sysconfig/iptables文件

    sh 复制代码
    备份原有的
    cp /etc/sysconfig/iptables{,.bak}
    iptables-save >/etc/sysconfig/iptables
  3. 恢复默认配置: 读取/etc/sysconfig/iptables文件并加载防火墙配置

    sh 复制代码
    systemctl restart iptables

2.12 案例07:⭐️⭐️ 收尾设置链的默认规则

⭐️⚠️ 修改默认规则之前,要测试之前的准许的规则。

sh 复制代码
iptables -t filter -P INPUT DROP
修改之后一点点添加放行规则
iptables -I INPUT -s  10.0.0.1  -j ACCEPT 
iptables -I INPUT    -p icmp    -j DROP
iptables -I INPUT -s 10.0.0.0/24  -p tcp   --dport 22  -j ACCEPT
iptables -I INPUT  -p tcp  -m multiport --dport 80,443 -j ACCEPT

# -i 数据进入的时候
iptables -A INPUT -i lo -j ACCEPT
# -o 数据流出的时候
iptables -A OUTPUT -o lo -j ACCEPT

#匹配连接状态
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #放行tcp连接状态
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sh 复制代码
[root@oldboy-bao ~] iptables-save  
# Generated by iptables-save v1.4.21 on Thu Aug 10 12:00:05 2023
*nat
:PREROUTING ACCEPT [2:458]
:INPUT ACCEPT [2:458]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Thu Aug 10 12:00:05 2023
# Generated by iptables-save v1.4.21 on Thu Aug 10 12:00:05 2023
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -j DROP
-A INPUT -s 10.0.0.1/32 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Aug 10 12:00:05 2023
相关推荐
2501_915373882 小时前
Redis线程安全深度解析:单线程模型的并发智慧
数据库·redis·安全
恰薯条的屑海鸥5 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)
学习·安全·web安全·渗透测试·网络安全学习
Tipray20065 小时前
让敏感数据在流转与存储中始终守护在安全范围
安全
码农101号6 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
powerfulzyh6 小时前
非Root用户启动SSH服务经验小结
运维·ssh
云道轩6 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
前端页面仔6 小时前
易语言是什么?易语言能做什么?
开发语言·安全
爱学习的小道长6 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb6 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
402 Payment Required7 小时前
serv00 ssh登录保活脚本-邮件通知版
运维·chrome·ssh