防火墙

307 阅读8分钟

安全技术和防火墙

安全技术

  • 入侵检测系统:不阻断任何网络访问,只能留下记录
  • 入侵防御系统:一般为硬件设备,当有流量进来时,进行检测,判断
  • 防火墙:一般为软件类,现将进入的信息隔离到一个固定的区域中;工作机制为隔离功能,防止外部的
  • 防水墙:是一种防止内部信息泄漏的安全产品

防火墙分类

按保护范围划分:

  • 主机防火墙:服务范围为当前一台主机
  • 网络防火墙:服务范围为防火墙一侧的局域网

按实现方式划分:

  • 硬件防护墙:在专用硬件级别实现部分功能的防火墙
  • 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件

按网络协议划分

  • 网络层防火墙:OSI模型下4层,又称包过滤防火墙
  • 应用层防火墙/代理服务器:proxy 代理网关,OSI模型7层

防火墙基本认识

Netfilter

  • Netfilter给linux提供防火墙服务,工作在内核空间,集成在linux内核中
  • centos7磨人的防火墙是firewalld

防护墙工具

iptables

提供命令行工具,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

image.png

firewalld

软件包:

  • firewalld
  • firewalld-config

管理工具:

  • firewall-cmd 命令行工具
  • firewall-config 图形工作

命令行配置

查看现有的firewall设置

image.png

iptables

iptables组成

  • Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
  • iptables由五个表table和五个链chain以及一些规则组成

四表五链

四表:

  • filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表;确定是否放行该数据包(过滤)
  • nat:修改数据包中的源、目ip地址或端口
  • mangle:修改数据标记位规则表
  • raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
  • (security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现)一般不使用,所以称为四表
  • 优先级由高到低顺序为:security -->raw-->mangle-->nat-->filter 五链:
  • prerouting:在进行路由选择前处理数据宝
  • input:处理入站数据包;流向自己,明确知道信息是发给自己的
  • ouput:处理出站数据包;流出本机(穿过本机)
  • forward:处理转发数据包
  • postrouting:在进行路由选择后处理数据包;转发

规则表的作用

容纳各种规则链

表的划分依据:

防火墙规则的作用相似

规则链的作用

容纳各种防火墙规则

规则的作用

对数据包进行过滤或处理 ;链的分类依据:处理数据包的不同时机

总和

表里有链,链里有规则

三种报文流向

  • 流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)
  • 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)
  • 转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)

规则链内的匹配顺序

  • 按顺序依次检查,匹配即停止(LOG策略例外)
  • 若找不到相匹配的规则,则按该链的默认策略处理

内核中数据包传输过程

image.png

  1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要 转送出去
  2. 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

实操

准备工作

image.png

  • 这边我们设置开机不自启

image.png

image.png

基本语法

语法功能
-p协议:tcp;udp
-s源地址
-d目的地址
-i进口网卡
-o出口网卡
--sport源端口
--dport目标端口
  • iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
  • 如果不指定表,默认为filter表

数据包常见控制类型

控制类型功能
-ACCEPT允许数据包通过
-DROP直接丢弃数据包,不给出任何回应信息
-REJECT拒绝数据包通过,必要时会给出举报发送端一个响应信息
-LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
-ANAT修改数据包的源地址
-DNAT修改数据包的目的地址
-MASQUERADE伪装成一个非固定公网IP地址

防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 注意:大小写

基本操作

规则的添加、查看和删除等

管理选项用法用例
-A在指定链末尾追加一条 iptables -A INPUT (操作)
-I在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-p指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D删除 iptables -t nat -D INPUT 2 (操作)
-R修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L查看 iptables -t nat -L (查看)
-n所有字段以数字形式显示iptables -L -n,iptables -nL,iptables -vnL (查看)
-v查看时显示更详细信息,常跟-L一起使用 (查看)
--line-number规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number
-F清除链中所有规则 iptables -F (操作)
-X清空自定义链的规则,不影响其他链 iptables -X
-Z清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S看链的所有规则或者某个链的规则/某个具体规则后面跟编号

防火墙命令

image.png

image.png

image.png

image.png

查看,删除,清空等规则表

iptables [-t表名] -n -L [链名] |[-- line-numbers] 查看规则表,并显示编号

image.png

image.png

image.png

image.png

image.png

隐藏匹配

  • --sport 1000:匹配源端口是1000的数据包
  • --sport 1000:2000:匹配源端口是1000-3000的数据包
  • --sport :2000:匹配源端口是3000及以下的数据包
  • --sport 1000:匹配源端口是1000及以上的数据包

image.png

MAC地址匹配

  • -m mac --mac-source MAC地址
  • iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP

NAT

NAT实现类型:

  • SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问
  • DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外
  • PNAT: port nat,端口和IP都进行修改

SNAT

基于nat表的target,适用于固定的公网IP

SNAT原理

源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢

SNAT源地址转换过程
  • 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
  • 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
  • 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。

DNAT

nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能

DNAT原理

目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。

实验

SNAT策略配置

SNAT转换前提条件

  1. 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  2. Linux网关开启IP路由转发

Linux网关开启IP路由转发

  1. 临时开启:

echo 1 > /proc/sys/net/ipv4/ip_forward

或者

sysctl -W net.ipv4.ip_forward=1

image.png 2. 永久打开:

编辑配置文件:

vim /etc/sysct1.conf

net.ipv4.ip_forward = 1添加在配置文件中

sysctl -p表示取修改后的配置 image.png

image.png

image.png

SNAT转换1:固定的公网IP地址

配置SNAT策略,时间SNAT功能,将所有192.168.42.0这个网段的ip的源ip改为12.0.0.1

image.png

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o ens37 -j SNAT --to 12.0.0.1

image.png

  • 或者:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o ens37 -j SNAT --to-source 12.0.0.1

image.png

  • #-A POSTROUTING 指定POSTROUTING链  
  • #-s 192.168.42.0/24 源地址所处的网段(内网IP)  
  • #-o ens37 出站网卡  
  • #-j SNAT  
  • #--to 12.0.0.1   外网IP  
  • #--to-source ip地址范围   外网地址池

SNAT转换2:非固定的公网ip地址(共享动态ip地址)

image.png

DNAT策略配置

DNAT转换前提条件

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录

Linux网关开启IP路由转发

vim /etc/sysctl.conf编辑配置文件

net.ipv4.ip_forward=1添加此内容

sysctl -p重新读取修改后的配置

image.png

image.png

DNAT转换1:发布内网的web服务

将从ens37进来要访问web服务的数据包目的地址转换为192.168.42.37

iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.72.102

image.png

  • #-A PREROUTING       //修改目标地址的链          
  • #-i ens37             //入站网卡
  • #-d 12.0.0.1       //数据包的目的地址  
  • #-p tcp --dport 80   //数据包的目的端口  
  • #-j DNAT             //使用DNAT功能  
  • #--to 192.168.42.37 //内网服务器IP

DNAT转换2:发布时修改目标端口

将公网的IP和端口,转换成内网的ip和端口

  • 发布局域网内部的web服务器,外网主机需使用8080端口进行连接
  • 将12.0.0.1:8080 转换成192.168.42.37:80

image.png

  • 发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
  • 将12.0.0.1:250 转换成192.168.42.37:22

image.png