Брандмауэр: требуется ли входящий для получения ответа, когда исходящее правило уже существует?

#asp.net #sockets #networking #tcp #firewall

#asp.net #сокеты #сеть #tcp #брандмауэр

Вопрос:

Я разработал одно веб-приложение MVC, которое имеет веб-API и размещено в экземпляре Amazon, и одно приложение Windows для вызова этих API для получения ответа от этого сервера.

Как веб-приложения, так и приложения для Windows разрабатываются в asp.net framework 4.5 с использованием языка c #.

Приложение Windows установлено в more than 200 client's системе, которая сама является высокозащищенными серверами со всеми входящими портами, заблокированными в брандмауэре.

Я использую HttpWebRequest с BindIPEndPoint для вызова веб — API с использованием настроенного диапазона портов TCP [default 7777-7786] .

Вызовы API нормально работают из приложения Windows, если существуют Разрешенные входящие и исходящие правила брандмауэра.

Но проблема в том, что клиенты не разрешают мне какие-либо правила входящего брандмауэра, они разрешают только правила исходящего брандмауэра для этого диапазона портов, а приложение 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);
}