今天,我想告诉您一些有关Windows防火墙(或在Russified OS中称为防火墙)的工作的信息。总的来说,这是一件非常好的事情,但是特别是……事实证明,默认情况下,它以一种非常有趣的模式工作。俗话说:“男孩们不知道。” 因此,我们开始弄清楚是什么。
介绍
首先,我将解释我正在解决的问题的实质。我必须检查下一块板如何与我们的全硬件服务一起正常工作。但是,不是我在以前的文章中介绍过的那一篇,而是使用Xilinx FPGA进行了更复杂的介绍。
什么是全硬件服务。这是用户访问,登录并接收物理上位于服务器上的各种板的列表的站点。他为什么要这样做?不购买而直接与董事会合作。例如,查看它是否对他有用,或者只是练习使用特定的控制器。这些板由制造商提供,并且服务与他们提供了有限时间的会话。用户从列表中选择一块板,然后从三件事情中获得:IP地址,端口号和来自正在查看此布局的摄像机的视频。实际上,您仍然可以通过SSH转发端口,但我不是专家。就我而言-确切的地址,端口和视频。
此外,位于其本地计算机上的开发环境中的用户必须选择一个远程调试器(对于大多数环境,这是很好的旧GDB,对于Keil来说更不合常理,但是如果您有兴趣,可以撰写有关此内容的单独文章,这不适用于防火墙)。发出的IP和端口都在其中驱动,之后您可以启动远程调试会话,通过摄像机的图像以及通过SSH转发的端口来关注开发板上的情况。
因此,任何人都可以在无需购买开发板的情况下感受到他们的工作。同时,与Redd一样,开发环境和源代码位于本地计算机上。仅二进制代码发送到服务器。但是,在会话期满后,自动擦除ROM,因此下一个用户将无法读取代码。
因此,回到本文的主题。防火墙在这边是什么?这很简单。我必须使用Xilinx FPGA。他们的开发环境是正式的WebTalk。我绝对不希望她在“应有的位置”报告我的操作,因此环境位于未联网的计算机上。即使她真的想-她的双手也很短。没有物理通道,仅此而已!但是“全硬件”服务的概念是必须有一个网络。为了进行测试,必须暂时将汽车连接到电线(实际上,缺乏网络是一种习惯,那辆汽车上仍然没有什么有趣的东西)。该怎么办?踩到您的偏执狂?好吧,我不!我决定将允许的地址列表限制为开发环境,以便它只能与localhost和All Hardware服务器一起使用。我不知道接下来会发生什么现在所有硬件服务器具有相同的IP地址。只是在各个会话之间发布新的端口。因此,目标很明确,让我们开始实施。
我应该使用什么防火墙?
在Windows XP和Windows 7上,我使用了Outpost防火墙。这是国内发展。非常可靠和舒适。我什至为自己购买了三辆汽车的终身许可证,而这辆汽车缺货。一旦这个防火墙帮助我确定了没有杀毒软件的木马。当我能够将文件连同病毒一起带走时,我将其喂给了LiveCD上提供的几种防病毒软件。没有人注意到任何可疑的东西。而且我的防火墙只是处于偏执状态,从那里我了解了该程序的可疑活动。
一切正常,直到该防火墙的制造商在特殊情况下关闭。之后,我感到非常难过。我很伤心,我的主笔记本电脑仍然有7的Outpost,因为我没有寻找替代品。但是Xilinx IDE希望进入前十名!完美!因此,是时候学习如何使用此操作系统内置的防火墙了!
我们都知道,当程序尝试访问网络时,此标准防火墙会询问我们是否允许它与网络一起使用。我们可以立即禁止,或者我们也可以取消选中权限框,网络上有很多与此相关的指南。这些复选框是:
每个人都知道。但是,这些知识的价值是什么?当阅读大量相同类型的文章“如何禁止应用程序上线”时,我会忽略我的想法,这些文章并不告诉我们如何禁止它,而只是限制它。我宁愿针对此示例专门制作我的结论。让我们编写两个最简单的控制台应用程序。
服务器
第一个应用程序将假装为服务器。它接收包含字符串的UDP数据包并将其显示在屏幕上。为了让我们谈论同一件事,这是它的C ++源代码:
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 16
int main(int argc, char** argv)
{
if (argc != 2)
{
printf("usage: ServerTest.exe port");
return -1;
}
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
// The socket address to be passed to bind
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons((u_short)strtoul (argv[1],0,0));
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0/*IPPROTO_UDP*/);
bind(sock, (struct sockaddr*) &addr, sizeof(addr));
while (true)
{
struct sockaddr from;
int len = sizeof(from);
char buf[DEFAULT_BUFLEN];
memset(buf, 0, DEFAULT_BUFLEN);
recvfrom(sock, buf, DEFAULT_BUFLEN-1, 0, &from, &len);
printf(buf);
}
return 0;
}
我们启动该程序,将端口号(例如1234)作为参数传递,并可以预期地收到来自防火墙的请求:
让他进行网络活动……让他等待一段时间,然后将客户端部分编写为另一个EXE。
客户
让我们的客户将旋转摇杆线发送到服务器。这是其文字:
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include "Windows.h"
// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 16
int main(int argc, char** argv)
{
if (argc != 3)
{
printf("usage: ClientTest.exe address port");
return -1;
}
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
struct sockaddr_in server, client = { AF_INET,INADDR_ANY,INADDR_ANY };
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons((u_short)strtoul (argv[2],0,0));
InetPton(AF_INET, argv[1], &server.sin_addr.s_addr);
SOCKET sock = socket(PF_INET, SOCK_DGRAM, 0);
bind(sock, (sockaddr*)& client, sizeof(client));
for (int i=0;;i++)
{
static const char* sticks[] = { "\\\r","|\r","/\r","-\r" };
sendto(sock, sticks[i%4], strlen(sticks[i%4])+1, 0, (sockaddr*)& server, sizeof(server));
Sleep(250);
}
}
我们首先指定服务器地址和服务器具有的端口(我有192.168.1.95和1234),此后在服务器窗口中开始运行的服务器与我想要的略有不同,但仍然是一根棍子:
但是让我担心的不是该符号“ \ R”不会将回车返回到该行的开头,而是客户端是一个单独的进程的事实...从一个完全独立的文件启动!..并且防火墙没有要求我允许网络活动。相反,他自己解决了这个问题,甚至没有通知我该程序会去某个地方。为何如此?
关于防火墙操作模式的一些理论
在这里,我们进入本文的实质。
, Windows- , . , , - ( ), , , !
实际上,这是相应的防火墙设置:
允许所有未禁止的操作。可以明确拒绝某个应用程序的活动。这就是Internet上大量文章的主题。但是该木马会潜移默化地爬上我们的汽车,我们不会猜测应该将其确切地输入到禁止的应用程序中。同样,这不能解决本文引言中提出的我的问题。我需要保留对我允许的地址的访问权限,并拒绝所有其他地址。
为此,您需要将防火墙切换到“禁止所有不允许的内容”模式以进行传出连接。我总是很困惑如何输入相应的菜单项...是的,我找到了...
然后,我们首先选择与活动配置文件相对应的选项卡(在我的图片中为“常规配置文件”,然后将“出站连接”选择列表从“允许(默认)”切换为“阻止”。
就是这样,我们可以睡个好觉吗? ,如果真是如此简单,我相信Microsoft会立即为所有人选择“阻止”模式,这很遗憾,但是一切都刚刚开始。
关于受虐狂的一些知识
所以。假设您打开了传出消息的阻止模式...一切立即消失,包括浏览器。通常,没有人会随时将选择返回到原来的位置并回滚到原始版本。但是,让我们看看新制度总体上给我们带来了什么。我们得到了规则列表。对于这些规则,您可以设置无条件权限条件,也可以为应用程序设置开放端口列表和开放地址列表。可以将地址设置为一组。这是端口设置窗口:
这是地址设置窗口:
此外,没有人愿意为任何程序打开端口,从而限制了该端口的有效地址列表。也就是说,我们不是说“程序这样允许访问这样的端口”,而是“通过程序这样允许的所有程序都可以工作,将地址限制在下一组。”
除了一件事,一切都很棒。如果传入连接的规则列表是由系统生成的,则对于传出连接,您需要自己添加所有内容。就像我说的,我的浏览器死了-我必须自己将其添加到允许的发件箱中。我不会描述如何配置地址,这不是本文。关于设置规则的文章(但是,出于阻止目的)仅占一角。通常,我通常会找到适合传入的规则,从那里复制文件名,然后-创建传出规则,指向同一文件。好了,并允许该程序处于活动状态。
当我在办公室中连接到VPN时遇到问题时,我研究了一系列现成的规则并发现了这些(我事先知道我们的VPN连接是使用L2TP协议建立的):
该规则是为我们创建的,但未激活。我进入了它的属性,将其激活,然后在列表的左侧出现一个带有复选标记的绿色球,并且与办公室的VPN连接正常工作。
但是,总的来说,以这种方式使用这种防火墙时,会出现受虐行为。您需要有一个坚定的意志,以免大喊:“这一切都累了”,而不是回到旧的工作模式。我已经快要达到这种状态了(幸运的是,已经完成了使用Xilinx for All Hardware的实验),但是我的一位熟人向我提出了一个不错的解决方案。
通过标准防火墙的附件
事实证明,这里有一个官方的免费Windows防火墙控制程序。
它本身不执行任何操作,仅管理Windows内置的防火墙,提供了非常用户友好的界面。现在,您无需遍历一堆菜单即可自定义某些内容。所有设置都方便,紧凑地收集在几个选项卡上。我不会描述该程序的所有功能。本文的目的不是描述它,而仅仅是标记它的存在。此外,每个人都可以找到专门的文章,他们知道Windows防火墙控件的名称。
现在,当从上面的示例启动客户端部分时,我终于收到一条消息:
我可以授予他访问权限,此后将自动创建规则,我可以拒绝访问,可以一次阻止该应用程序。
为了感兴趣,我在标准防火墙列表中找到了一个自动创建的规则,并限制了它的可用地址:
通常,使用此应用程序的生活变得更加轻松,即使使用标准Windows防火墙也是如此。更好的是,这台Windows 10计算机可以保持在线状态,而不是像以前那样毫无防御。
结论
默认情况下,标准Windows防火墙的工作方式是任何程序都可以开始发送数据,甚至不会通知用户。没有人隐藏它,但并非所有人都知道。当然,您可以安装第三方防火墙,但是将标准Windows防火墙切换到“禁止所有不允许的内容”模式已足够。不幸的是,事实证明,以常规方式支持网络性能。但是第三方的,官方免费的Windows防火墙控制程序消除了这种不便。
无论您将使用来自常规防火墙和此程序的捆绑软件,还是获得第三方防火墙,问题都未解决。但是,在我看来,在默认模式下使用标准防火墙这一事实确实令人恐惧。