[C++] P2P port védelem (forrás)

Indította Pisti95, 2017-08-29, 18:44:19

2017-08-29, 18:44:19 Utolsó szerkesztés: 2017-08-29, 19:14:57 Szerző: Pisti95
Üdv mindenkinek!  :)

Mostanság elszaporodott a p2p portok támadása avagy Api tool támadás. Most 2017-ben nem divat már védeni az Api tool-t, pedig MUSZÁJ! Már vannak webtárhelyre feltöltött p2p bash panelek, melyeken keresztül lövöldözik a szervert. Ezzel a forrásos védelemmel nem fogja tudni lelőni a szervert, hiába tudják az IP-t és a p2p portot.

Azonban még mindig kötelező a CONFIG fájlokban az adminpage_ip: 127.0.0.1 legyen és az adminpage_password: legyen saját magunk által megadott jelszó, amit nem adunk ki senkinek.




Most pedig következzen a forrás védelem:

common/service.h

rákeresel erre:

PET_SYSTEM

Beilleszted a többi közé ezt:

#define ENABLE_PORT_SECURITY





game fájl forrás:

desc_p2p.cpp

Rákeresel erre:

#include "p2p.h"



alá írod ezt:

#include "../../common/service.h"



Rákeresel erre:

bool DESC_P2P::Setup(LPFDWATCH fdw, socket_t fd, const char * host, WORD wPort)



Így nézzen ki:

bool DESC_P2P::Setup(LPFDWATCH fdw, socket_t fd, const char * host, WORD wPort)
{
m_lpFdw = fdw;
m_stHost = host;
m_wPort = wPort;
m_sock = fd;

#ifdef ENABLE_PORT_SECURITY
#include "config.h"
#endif

if (!(m_lpOutputBuffer = buffer_new(1024 * 1024)))
return false;

if (!(m_lpInputBuffer = buffer_new(1024 * 1024)))
return false;

fdwatch_add_fd(m_lpFdw, m_sock, this, FDW_READ, false);

m_iMinInputBufferLen = 1024 * 1024;

#ifdef ENABLE_PORT_SECURITY
if (strcmp(host, g_szPublicIP)) // refuse if remote host != public ip (only the same machine must be able to connect in here)
{
sys_log(0, "SYSTEM: new p2p connection from [%s] to [%s] fd: %d BLOCKED", host, g_szPublicIP, m_sock);
SetPhase(PHASE_CLOSE);
return true;
}
#endif

SetPhase(PHASE_P2P);

sys_log(0, "SYSTEM: new p2p connection from [%s] fd: %d", host, m_sock);
return true;
}





input.cpp

Rákeresel erre:

#include "HackShield_Impl.h"



Aláírod ezt:

#include "../../common/service.h"




Rákeresel erre a részre:

int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
{
    if (bHeader == 10)
        return 0;

    if (bHeader == HEADER_CG_TEXT)
    {



Beilleszted ezt alá:

#ifdef ENABLE_PORT_SECURITY
        if (IsEmptyAdminPage() || !IsAdminPage(inet_ntoa(d->GetAddr().sin_addr)))
        {
            sys_err("SOCKET_CMD: BLOCK FROM(%s)", d->GetHostName());
            return -1;
        }
#endif


Így nézzen ki ahogy a képen látod:   



Source:  [spoiler]https://forum.turkmmo.com/konu/3453876-p2p-giris-baglantisini-engelleme/[/spoiler]

Üdv, Pisti95