Linux防火墙部署与配置
Linux防火墙部署与配置
1. 实验概述
Linux作为网关,搭建小型局域网,在此基础上进行实验,了解Linux防火墙的构成、NAT和包过滤配置方法等。
2. 实验环境
网络大致结构如图2-1所示,由centos虚拟机作为防火墙,实现NAT和包过滤等功能,两台ubuntu作为内网服务器,kali作为外网的客户端。
图2-1 拓扑结构
3. 实验原理
3.1 防火墙
防火墙是建立在两个网络的边界上的实现安全策略和网络通信监控的系统或系统组,强制执行对内部网和外部网的访问控制。通过建立一整套规则和策略来监测、限制、更改跨越防火墙的数据流,达到保护内部网络的目的。
简单来说,防火墙作为网关,可以检测进出局域网边界的所有数据包,并通过一些手段检测和处理这些数据包内的信息,达到保护局域网边界内部的所有设备的目的。
对于防火墙,其能实现的最基本的两个技术就是NAT和包过滤,NAT建立内外网络地址的映射,向外界隐藏内部的真实IP地址,包过滤对数据包进行检查和过滤,实现了信息安全。
3.2 Netfilter
Netfilter是Linux内核中的一个重要框架,它允许实现对网络流量的各种操作,采用一组hook实现了包过滤、NAT和端口转换等相关功能。其组织架构分为三层,使用表来定义规则,而规则在表内被组织在链中。
Netfilter主要内置了三张表,其中filter表实现数据包的过滤,NAT表用于网络地址转换,mangle表用于包的重构。
对于不同的表,Netfilter中有先后顺序,分别为
security --> raw --> mangle --> nat --> filter
图3.2-1 Netfilter结构
更详细地说,Netfilter模块内数据流向大致如图3.2-2所示。
图3.2-2 Netfilter数据流向
3.3 IPtables
IPtables是软件包iptables提供的命令行工具,其位于用户态空间,允许管理员配置内核防火墙的表。
iptables的命令格式为:
iptables [-t 表名] -子命令 [链名] 匹配条件 目标动作
其中 -t table指定配置的表格,表格有五个,分别为mangle、nat、filter、raw、security,其中前三个使用最多。
常用子命令及用途如图3.3-1。
图3.3-1 子命令
常见的匹配条件如图3.3-2所示。
图3.3-2 匹配条件
动作如图3.3-3。
图3.3-3 目标动作
3.4 NAT
局域网内数据包传送路径为
- 先经过 NAT table 的 PREROUTING 链;
- 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
- 再经过 Filter table 的 FORWARD 链;
- 通过 NAT table 的 POSTROUTING 链,最后传送出去
如果要使用iptables实现NAT,需要修改NAT table的PREROUTING 链和POSTROUTING 链,其中POSTROUTING 链修改来源IP,即SNAT,而PREROUTING 链修改目的IP,即DNAT
实验过程
4.1 小型局域网搭建与验证
首先在VMware虚拟网络编辑器中添加两个仅主机模式的虚拟适配器VMnet0和VMnet1。
图4.1-1 添加虚拟适配器
在centos上添加两个网卡,作为局域网网卡,分别连接这两个虚拟适配器。保留原来的NAT网卡作为外部网卡。
图4.1-2 防火墙网卡设置
在两个ubuntu系统中将网卡分别连接到VMnet0和VMnet1。并将网关设置分别为10.10.10.1和10.10.20.1,再使用ping测试连通性。
sudo route add default gw 10.10.20.1 ens33
图4.1-3 10.10.10.2 ping 10.10.10.1
在centos设置允许转发。
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward
图4.1-4 查询是否设置成功
安装iptables和firewalld
yum install -y iptables
yum install iptables-services
yum install firewalld firewall-config
打开iptables服务
systemctl start firewalld
systemctl start iptables
查看是否成功打开。
systemctl status firewalld iptables
图4.1-5 查询是否设置成功
设置10.10.*.*到10.10.*.*的转发,允许局域网内互相通信。并ping测试是否联通。
iptables -I FORWARD -s 10.10.0.0/16 -d 10.10.0.0/16 -j ACCEPT
图4.1-6 10.10.10.2 ping 10.10.20.2
这样说明小型局域网搭建成功,局域网内可以通信了。
在centos使用wireshark在任一个内部网卡上抓包可以看到ICMP报文。
图4.1-7 wireshark捕获
4.2 SNAT实现内网设备访问外网与验证
在4.1节中,只实现了内网环境内IP为10.10.*.*的设备之间的通信,但所有的设备仍然无法实现对外部的访问,在这里可以使用nat 实现IP地址的转换。
在centos使用以下实现SNAT,修改源IP,将10.10.*.*的所有报文转发到自己的IP为192.168.137.133的网卡。再使用ping测试连通性。
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -j SNAT --to 192.168.137.133
图4.2-1 ping kali 192.168.137.128
使用wireshark在内网网卡上捕获,可以看到10.10.20.2到192.168.137.128之间的ICMP报文。
图4.2-2 内网网卡捕获
在外网网卡重新捕获,这里将10.10.20.2改为了192.168.137.133。对kali来说是192.168.137.133的IP地址与其进行通信,实现了NAT地址翻译。
图4.2-3 外网网卡捕获
4.3 DNAT实现外网访问内网设备
在centos将外部发送给192.168.137.133的流量全部转发给10.10.10.2,实现一对一DNAT。
iptables -t nat -A PREROUTING -d 192.168.137.133 -j DNAT --to-destination 10.10.10.2
在192.168.137.128 ping 192.168.137.133。
图4.3-1 192.168.137.128 ping 192.168.137.133
在centos上使用wireshark查看10.10.10.1对应的网卡流量,发现有192.168.137.128到10.10.10.2的ICMP报文,说明将192.168.137.133映射到了10.10.10.2。
图4.3-2 wireshark捕获
4.4 包过滤
在centos使用
iptables -t filter -A FORWARD -p icmp --icmp-type 8 -s 0/0 -j REJECT
禁止外部ping内部设备。
这里有一点需要注意,根据图3.2-2,如果是需要转发的报文(4.3中进行了DNAT映射),其不会经过filter表的INPUT链,需要在filter表的FORWARD链进行拦截,配置规则后ping显示Destination Port Unreachable。
在wireshark中查看内网网卡,不会再有192.168.137.128到10.10.10.2的ICMP报文,而在外部网卡存在192.168.137.128到192.168.137.133的ICMP报文,说明防火墙接收到了ICMP报文但是执行了过滤,没有进行转发。
图4.4-1 ping失败
图4.4-2 捕获内部网卡
图4.4-3 捕获外部网卡
Linux防火墙部署与配置的更多相关文章
- Linux防火墙简介 – iptables配置策略
Linux防火墙简介 – iptables配置策略 Netfilter/iptables简介 要想真正掌握Linux防火墙体系,首先要搞清楚Netfilter和iptables的关系,Netfilte ...
- Linux防火墙--IPtables企业级配置策略思路
一.防火墙简介 防火墙定义:是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内.外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术. 防火墙发展应用:最早 ...
- Linux防火墙iptables安装配置--使用远程工具Xmanager和ftp服务安装配置
一.linux关闭防火墙: a.用户直接在终端输入:service iptables stop 查看防火墙状况:service iptables status b.root用户在终端输 ...
- linux防火墙使用以及配置
Centos 7 firewall : 1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态 ...
- Ubuntu linux下部署golang配置环境,极客学院 无闻讲的安装配置是错的,折腾我好几遍,真是有点坑
开始按极客学院无闻讲的做,弄了几遍都不行,最后发现是错的,别人告诉我这是mac下的virtualbox是这样的,不管怎样,被坑的不浅. 虽然sudo apt install golang-go 就能安 ...
- Linux防火墙--iptables--白名单配置
1.服务器22端口和1521端口开通给指定IP [root@node2 sysconfig]# iptables -t filter -nL INPUT Chain INPUT (policy ACC ...
- Linux防火墙firewalld安全设置
背景描述 防火墙是具有很好的保护作用.入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机.在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙 ...
- 开源防火墙(pfSense)的安装部署与配置
pfSense是一个基于FreeBSD架构的软件防火墙,通常会被安装在多网卡的主板上作为路由器或者防火墙去使用.往往这些硬件都比较廉价,高性能的配置也就1千元左右.pfSense具有商业防火墙的大部分 ...
- Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器
前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...
- Linux下Apache服务的部署和配置
目录 Apache服务的安装 yum源安装: 目录文件 源码包安装: 目录文件: Apache中添加对php的支持 Apache中添加php对mysql数据库的支持 Apache服务的高级配置 1:配 ...
随机推荐
- POC、EXP、SRC概念厘清
「POC」 POC可以看成是一段验证的代码,就像是一个证据,能够证明漏洞的真实性,能证明漏洞的存在即可. https://zhuanlan.zhihu.com/p/26832890 「EXP」 ...
- onps栈移植说明(1)——onps栈的配置及裁剪
onps栈的移植涉及几个部分:1)系统配置及裁剪:2)基础数据类型定义:3)RTOS适配层实现:4)编写网卡驱动并注册网卡.本文作为onps栈移植的指导性文件将给出一般性的移植说明及建议,具体的移植样 ...
- 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换
有时候,为了给前端页面输出内容,有时候我们需要准备和数据库不一样的实体信息,因为数据库可能记录的是一些引用的ID或者特殊字符,那么我们为了避免前端单独的进行转义处理,我们可以在后端进行统一的格式化后再 ...
- perl大小写转换函数uc和lc
$side = uc $attrs[0]; #把attrs[0]转换成大写,然后给side变量赋值. $gender = lc $attrs[1]; #把attrs[1]转换成小写,然后给gender ...
- perl哈希嵌套和引用的使用
数组,哈希嵌套 数组,哈希的引用 1.哈希的嵌套和引用 %hash = ( 'group1', {'fruit', 'banana', 'drink', 'orange juice', 'vegeta ...
- Node.js 的学习(四)分别连接MongoDB与MySQL数据库,实现增删查改功能
一.Node.js 访问MongoDB 数据库 MongoDB 对许多平台都提供驱动可以访问数据库,如C#.Java.Node.js等. 1.1.安装MongoDB访问驱动 命令如下: 全局安装驱动: ...
- K8s集群环境搭建
K8s集群环境搭建 1.环境规划 1.1 集群类型 Kubernetes集群大体上分为两类:一主多从和多主多从 一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适用于测 ...
- 记一次windows10电脑连上wifi无法上网的解决问题
前言 今天下午同学的电脑能连上wifi,但是却上不了互联网 开始思考 首先想到的肯定是WiFi驱动问题,但是wifi能连上大部分的原因可能就不是驱动问题了,为了彻底排除这个因素,我用到了我的usb网卡 ...
- K8s安装乐维5.0应用部署文档
乐维产品包具体打包为4个镜像包,分别为:mysql5.7.36.tar.zabbix_server.tar.itops_v1_4_x86_64.tar.bpm0.1.tar,对应的配置文件分别为:da ...
- Maven工程提示 java:源值1.5已过时,将在未来所有发行版中删除 出现原因及解决方案(亲测好用)
原因:Maven工程默认使用Java1.5进行编译,想要不警告,需要在maven的pom文件中进行配置,同时在settings中进行配置 解决方案: <properties> <me ...