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
局域网内数据包传送路径为
如果要使用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服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我是ruby的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽