在这里插入图片描述

安全防护:
  对外:防火墙    #包过滤
  对内:SELinux
  审计:堡垒机、跳板机

防火墙简介

防火墙的核心作用是作为过滤器,对网络数据包进行过滤和处理。它分为内核态和用户态,内核态的模块被称为防火墙函数,负责数据包的转发决策,包括允许、阻拦或修改数据包的行为,从而实现访问控制和安全防护。

防火墙机制

  • 阻拦传输 - 白名单 #非开放性服务:ssh、telnet、mysql
  • 允许传输 - 黑名单 #开放性服务:apache、ftp

防火墙实现功能

  • 保护易受攻击的服务。
  • 控制内外网之间网络系统的访问。
  • 集中管理内网安全性,降低管理成本。
  • 提高网络保密性和私有性。
  • 记录网络使用状态,为安全规划和网络维护提供依据。

netfilter/iptables 相关

  • netfilter 是内核态模块,位于 Linux 内核中的包过滤功能体系。iptables 是用户态工具,位于 /sbin/iptables,用于管理防火墙规则,管理员通过 iptables 给 netfilter 变更规则实现防火墙作用。
  • 不同内核版本对应不同的防火墙工具:
    • kernel 2.0.x:ipfw、ipfwadmin。
    • kernel 2.2.x:ipchains、ipchains。
    • kernel 2.4.x:netfilter、iptables。
    • kernel 3.13.x:nftables、nftables>iptables。
  • 用户空间:iptables & nftables & firewalld(应用程序)。
  • 内核空间:nftables & netfilter。
  • nftables 和 netfilter的作用

真正的防火墙函数主要包括nftables 和netfilter。旧版本使用netfilter,新版本使用nftables ,它们是内核中用于过滤数据包的核心函数。其中,nftables相比netfilter更具灵活性,允许用户自定义表和链名称,但实际执行过滤功能的还是依赖于内核中的这些底层函数

防火墙编写要求
  • 要可以根据语句一大白话的方式描述出防火墙规则,并能根据需求写出防火墙规则语句

规则表和规则链

问题 防火墙的4表5链是指什么?答案如下

规则表

  • raw 表:确定是否对数据包进行状态跟踪。
  • mangle 表:为数据包设置标记。
  • nat 表:修改数据包中的源、目标 IP 地址或端口。(常用)
  • filter 表:确定是否放行数据包(过滤)(默认使用表)(常用)。

规则链

PREROUTING链 #路由转发前
INPUT链 #入站
FORWARD链 #路由转发
OUTPUT链 #出站
POSTROUTING链 #路由转发后

规则表和规则链顺序

  • 规则表之间顺序:raw—>mangle—>nat—>filter。

  • 规则链之间顺序

    • 入站:PREROUTING—>INPUT。
    • 出站:OUTPUT—>POSTROUTING。
    • 转发:PREROUTING—>FORWARD—>POSTROUTING。
  • 规则链内匹配顺序:按自上而下顺序依次检查,匹配即停止(LOG 策略例外),若找不到相匹配规则,则按该链的默认策略处理。

数据走向图

在这里插入图片描述

命令格式介绍

语法构成

防火墙规则编写: 表 》 链 》策略
命令:iptables | ip6tables
格式:
-t 表名 指定规则表
-A 链名 #追加一条规则
-I 链名 #插入一条规则(可以是首行,也可以是指定行) -I INPUT 5
-D 链名 #删除一条规则,删除指定行的规则
-F 链名 #清空当前生效的防火墙规则,不指定链名时,清空当前表中所有链的规则,指定链名时,清空当前表中指定链的规则。

注意事项

  • 不指定表名时,默认指 filter 表。
  • 不指定链名时,默认指表内的所有链。
  • 除非设置链的默认策略,否则必须指定匹配条件。
  • 选项、链名、策略使用大写字母,其余均为小写。

保存和恢复 iptables 规则

  • (危险操作)保存规则:service iptables save,保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时)被应用,注意 save 保存是覆盖式保存。
  • 导出(备份)规则:iptables - save 工具,可结合输出重定向将缓存中的防火墙规则保存到指定文件。
  • 导入(还原)规则:iptables - restore 工具,可结合输入重定向将指定文件内的规则重新加载到缓存中。iptables 服务脚本位置:/etc/init.d/iptables(c6),/lib/systemd/system/iptables 规则文件位置:/etc/sysconfig/iptables(要安装iptables-services)。
#使用案例
 yum -y install iptables-services
systemctl restart iptables
iptables -L --line-numbers
mount /dev/sr0 /mnt
rpm -ivh --force /mnt/Packages/iptables-services-1.4.21-28.el7.x86_64.rpm #强制升级防火墙命令
vim /etc/sysconfig/iptables
service iptables save
iptables-save > /root/ips.txt

数据包的常见控制类型(策略)

-j 对条件数据包的执行策略

  • ACCEPT:允许通过。
  • DROP:直接丢弃,不给出任何回应。
  • REJECT:拒绝通过,必要时会给出提示。
  • LOG:记录日志信息,然后传给下一条规则继续匹配。(不常用)
  • SNAT:源地址转换,将符合条件的数据包的源地址进行修改(–to - source ip)。
  • MASQUERADE:将数据包的源地址修改为本机的动态公网 IP。(不常用)
  • DNAT:目标地址转换,将符合条件的数据包的目标地址进行修改(–to - destination ip:port)。
  • REDIRECT:将符合条件的请求转发到本机的指定端口上(–to - ports port)。

规则操作

表 - 链 - 规则

添加规则

  • 例如:iptables -t filter -A INPUT -p tcp -j ACCEPT。
  • 例如:iptables -I INPUT -p udp -j ACCEPT。
  • 例如:iptables -I INPUT 2 -p icmp -j ACCEPT。
  • 第三个的描述:在filter 表的input链上第二行插入一条规则,对数据包的协议类型做匹配,判断是否是icmp协议。若符合条件则放行规则而放行数据包

查看规则

  • -L #list列出
    -n #数字化显示
    –line-numbers #显示行号,规则的行号
    -v #内容详细程度

    :查看规则时,显示规则的序号。

    • 例如:iptables -nvL INPUT --line - numbers。

删除、清空规则

  • -D:删除链内指定序号(或内容)的一条规则。

  • -F:清空所有的规则(内存中的缓存规则)。

  • -X

    :清空自定义链上的规则。

    • 例如:iptables -D INPUT 3。
    • 例如:iptables -n -L INPUT。

设置默认策略

  • -P(大)为指定的链设置默认规则
    • 例如:iptables -t filter -P FORWARD DROP。
    • 例如:iptables -P OUTPUT ACCEPT。

条件匹配

  • 通用匹配(单选项匹配)

    :可直接使用,不依赖于其他条件或扩展,包括网络协议、IP 地址、网络接口等条件。

    • 协议匹配:-p(小)协议名。
    • 地址匹配:-s 源地址、-d 目的地址。
    • 接口匹配:-i 入站网卡、-o 出站网卡。
      • 例如:iptables -A FORWARD -s 192.168.1.11 -j REJECT。
      • 例如:iptables -I INPUT -s 10.20.30.0/24 -j DROP。
      • 例如:iptables -I INPUT -p icmp -j DROP。
      • 例如:iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP。
  • 隐含匹配(多选项匹配)

    :要求以特定的协议匹配作为前提,包括端口、TCP 标记、ICMP 类型等条件。

    • 端口匹配:–sport 源端口、–dport 目的端口。

    • ICMP 类型匹配:–icmp - type ICMP 类型。

      • 例如:iptables -A INPUT -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT。
      • 描述: 用于判断客户端通过 UDP 协议访问本机的 DNS 服务,在filter 表的input链上插入一条规则,,判断数据包的源地址是否是(192.168.4.0/24),协议是否是udp以及目标端口是否是53。若符合条件则放行规则而放行数据包
      • 例如:iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT。
      • 允许 TCP 协议下目标端口为 20 或 21 的数据包访问本机的 FTP服务

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      • 例如:iptables -A INPUT -p icmp --icmp - type 8 -j DROP。
      • 拒绝 ICMP 协议类型 8 的数据包,ICMP 类型 8 对应于 请求 ,这条规则会阻止外部主机使用 ping 命令来探测你的系统
      • 例如:iptables -A OUTPUT -p icmp --icmp - type 0 -j ACCEPT。
      • 允许 ICMP 协议类型 0 的数据包从本机发出。ICMP 类型 0 对应于 应答,即对 ping 请求的回应。这条规则确保本机能够响应其他主机的 ping 请求
      • 例如:iptables -A OUTPUT -p icmp --icmp - type 0 -j DROP。
      • 这条规则确保本机能够向其他主机的发起 ping 请求,而主机对其他主机的应答会被丢弃(即你ping通别人,别人ping不通你)。
      • 例如:iptables -A INPUT -p icmp -j DROP。
      • 拒绝所有 ICMP 协议的数据包进入
  • 显式匹配(扩展匹配 | 模块匹配)

    :要求以 “-m 扩展模块” 的形式明确指出类型,包括多端口、MAC 地址、IP 范围、数据包状态等条件。

    • 多端口匹配:-m multiport --sport 源端口列表、-m multiport --dport 目的端口列表。
    • IP 范围匹配:-m iprange --src - range IP 范围、-m iprange --dst - range IP 范围。
    • MAC 地址匹配:-m mac --mac - source MAC 地址。
    • 状态匹配:-m state --state 连接状态。
      • 例如:iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT。
      • 防火墙的 INPUT 链中添加一条规则,允许 TCP 协议下多个指定端口的数据包通过
      • 例如:iptables -A FORWARD -p tcp -m iprange --src - range 192.168.4.21 - 192.168.4.28 -j ACCEPT。
      • 例如:iptables -A INPUT -m mac --mac - source 00:0c:29:c0:55:3f -j DROP。
      • 例如:iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT。
      • 例如:iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT。

SNAT 策略

典型应用环境

局域网主机共享单个公网 IP 地址接入 Internet。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原理

源地址转换(Source Network Address Translation),修改数据包的源地址,使目标服务器认为数据包来自公网 IP,而非私有 IP 地址。

前提条件

  • 局域网各主机正确设置 IP 地址 / 子网掩码。
  • 局域网各主机正确设置默认网关地址。
  • Linux 网关支持 IP 路由转发。

实现方法

编写 SNAT 转换规则,例如:iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --sport 80 -o ens33 -j SNAT --to-source 192.168.3.130

描述: 在NAT表中的POSTROUTING链中添加一条规则。这个规则的作用是将源IP地址为192.168.4.0/24且源端口为80,协议为TCP,从接口ens33的数据包转发出去时,更改其源地址为192.168.3.130

注意:当条件中包含了端口作为条件时,端口不能独立出现作为条件,必须结合协议类型,并且协议必须写在端口前边!!!!

MASQUERADE(地址伪装)

适用于外网 IP 地址非固定的情况(如 ADSL 拨号连接,接口通常为 ppp0、ppp1),将 SNAT 规则改为 MASQUERADE 即可,例如:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE。

DNAT 策略

典型应用环境

在 Internet 中发布位于企业局域网内的服务器,或者是用于内网穿透(花生壳)如远程桌面连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原理

目标地址转换(Destination Network Address Translation),修改数据包的目标地址。

前提条件

  • 局域网的 Web 服务器能够访问 Internet。
  • 网关的外网 IP 地址有正确的 DNS 解析记录。
  • Linux 网关支持 IP 路由转发。

实现方法

编写 DNAT 转换规则,例如:iptables -t nat -A PREROUTING -d 192.168.3.130 -p tcp --dport 80 -i ens33 -j DNAT --to-destination 192.168.4.200:80

描述: 在NAT表中的PREROUTING链添加一条规则。这个规则的作用是将,从接口ens33进入,目标IP地址为192.168.3.130且目标端口为80,协议为TCP的数据包,更改其目的iP地址192.168.4.200的80端口

注意:当条件中包含了端口作为条件时,端口不能独立出现作为条件,必须结合协议类型,并且协议必须写在端口前边!!!!

发布时修改目标端口

在 DNAT 规则中以 “IP:Port” 的形式指定目标地址,例如:

  • iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to - destination 192.168.1.6:22。
  • iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to - ports 3128。
  • iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to - destination 111.111.111.20:3128。

扩展命令

lsmod #列出所有[已启用]的模块
modinfo #查看指定模块的详细信息(所有模块=已启用+未启用)
modprobe #启用指定模块

#例子
用于解决c6上没有xfs文件系统的问题
modprobe xfs #启用xfs
lsmod  #列出模块 mfks不支持xfs文件系统
yum search mfks  #找到mfks的软件包在更新 
yum -y install 软件包

防火墙脚本示例(部分)

  1. 定义基本变量
#!/bin/bash
INET_IF="eth0"
INET_IP="218.29.30.31"
LAN_IF="eth1"
LAN_IP="192.168.1.1"
LAN_NET="192.168.1.0/24"
LAN_WWW_IP="192.168.1.6"
IPT="/sbin/iptables"
MOD="/sbin/modprobe"
CTL="/sbin/sysctl"
  1. 加载必要的内核模块
$MOD ip_tables
$MOD ip_conntrack
$MOD ipt_REJECT
$MOD ipt_LOG
$MOD ipt_iprange
$MOD xt_tcpudp
$MOD xt_state
$MOD xt_multiport
$MOD xt_mac
$MOD ip_nat_ftp
$MOD ip_conntrack_ftp
  1. 调整 /proc 参数(Linux 内核控制及调优)
$CTL -w net.ipv4.ip_forward=1
$CTL -w net.ipv4.ip_default_ttl=128
$CTL -w net.ipv4.icmp_echo_ignore_all=1
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts
$CTL -w net.ipv4.tcp_syncookies=1
$CTL -w net.ipv4.tcp_syn_retries=3
$CTL -w net.ipv4.tcp_synack_retries=3
$CTL -w net.ipv4.tcp_fin_timeout=60
$CTL -w net.ipv4.tcp_max_syn_backlog=3200
  1. 具体的防火墙规则(按表、链分别设置规则,包括默认策略)
$IPT -t filter -X
$IPT -t nat -X
$IPT -t filter -F
$IPT -t nat -F
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP
  1. 通过黑白名单定制防火墙脚本
WHITE_LIST="/opt/myipfw.wlist"
for i in $(egrep -v "(^#|^$)" $WHITE_LIST)
do
    $IPT -I INPUT -s $i -j ACCEPT
    $IPT -I OUTPUT -d $i -j ACCEPT
    $IPT -I FORWARD -s $i -j ACCEPT
    $IPT -I FORWARD -d $i -j ACCEPT
done

BLACK_LIST="/opt/myipfw.blist"
for i in $(egrep -v "(^#|^$)" $BLACK_LIST)
do
    $IPT -I INPUT -s $i -j DROP
    $IPT -I OUTPUT -d $i -j DROP
    $IPT -I FORWARD -s $i -j DROP
    $IPT -I FORWARD -d $i -j DROP
done
 posted on 2024-11-22 19:15  dapaige  阅读(10)  评论(0编辑  收藏  举报  来源