防火墙:当出站规则已经存在时,是否需要入站才能获得响应?

防火墙:当出站规则已经存在时,是否需要入站才能获得响应?

我开发了一个具有 Web API 并托管在 Amazon 实例中的 MVC Web 应用程序,以及一个用于调用这些 API 以从该服务器获取响应的 Windows 应用程序。

Web 和 Windows 应用程序均使用 c# 语言在 asp.net framework 4.5 中开发。

Windows 应用程序安装在more than 200 client's系统中,该系统本身是高度安全的服务器,防火墙中的所有入站端口均被阻止。

我正在使用带有 BindIPEndPoint 的 HttpWebRequest 来使用配置的 TCP 端口范围调用 Web API [default 7777-7786]

如果有允许入站和出站防火墙规则,Windows 应用程序的 API 调用可以正常工作。

但问题是客户端不允许我使用任何入站防火墙规则,它们只允许针对这些端口范围使用出站防火墙规则,并且 Windows 应用程序不适用于针对这些端口范围的阻止入站规则。

我是否必须在防火墙中为调用/获取 API 请求/响应的端口范围打开入站规则?如果不需要入站防火墙规则,请解释原因?


以下是API 调用它使用我的一个静态TCP端口Windows 应用程序

try
{
    string address = RevWatchURL;
    address = address + "api/GetRevGuardLatestPatch";
    HttpWebRequest httpWebRequest = WebRequest.Create(address) as HttpWebRequest;
    httpWebRequest.ContentType = "text/json";
    httpWebRequest.Method = "POST";
    httpWebRequest.Timeout = 300000;

    httpWebRequest.ServicePoint.BindIPEndPointDelegate = 
                new BindIPEndPoint(CommonValues.BindIPEndPointCallbackRGPatch);

    string enRevGuardUniqueId = 
                Encryption.EncryptionTechnique(Convert.ToString(UniqueId), null, null);

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
        string json = "{\"UniqueId\":\"" + enRevGuardUniqueId + "\"}";

        streamWriter.Write(json);
        streamWriter.Flush();
        streamWriter.Close();
    }

    try
    {
        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            returnVal = streamReader.ReadToEnd();
            streamReader.Close();
            httpResponse.Close();
        }
    }
    catch (WebException ex)
    {
    }
    finally
    {
        httpWebRequest.Abort();
    }

    Obj = JsonConvert.DeserializeObject<CommonValues.RevGuardPatchClass>(returnVal);
}
catch (Exception ex)
{
    MessageBox.Show("Error", "API", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

BindIPEndPoint 方法:

public static IPEndPoint BindIPEndPointCallbackRGPatch(ServicePoint servicePoint, 
                                            IPEndPoint remoteEndPoint, int retryCount)
{
    return new IPEndPoint(IPAddress.Any, 7777);
}

相关内容