Sziasztok
Nagyon sok szervert látom hogy röhögve feltönek Ezért lerom nektek mit kell megtennetek hogy ha egyszer felakarnak törni titeket ne legyen könnyü dolguk.
A javát csak össze szedtem nem én írtam.Mert ugye bár 100% védelem nincsen sose főleg 2016 de annyit elérhetünk hogy mindenféle kis támadás pl injection stb ne vigyen földhez minket.
A Linkeket vagy némely leírást NEM ÉN írtam én csak össze gyűjtöttem nektek !Nos térjünk is rá.
1.
Az alap jelszavakat kötelező megváltoztatni mind a szerverét és a navicat-t is !
2.
Érdemes a 3306-os portot kicserélni.Illetve letiltani.
A 3306-os port cseréje néhány lépésben:
IdézFilezillán felcsatlakozol a szerveredre.
Megkeresed a my.cnf és amy-new.cnf fájlt.
Megnyitod.
Látsz benne olyat hogy :# port = .....
A "#" töröld ki és ird be a portot.
Ha meg van így kell kinéznie:port = 4444
Reboot és ha jól csináltad meg van.
Adódhat probléma a weboldal csatlakozással.
Akkor mindössze annyi a dolgunk hogy megnyitjuk a config.php-t
Ott bent megkeressük az ip-t és utána irjuk a portot kettőspontal.
Így kell kinéznie:0.0.0.0:444
A 4444-t kell átírni arra amire szeretnéd!
Ha ez meg van akkor tiltsuk le a 3306-os portot.
A navicatnál a csatlakozásnál ne felejtsük el átírni a saját portunkra.
Fontos hogy a általunk kitalált port 4 számjegyü legyen !
Ha ez meg van akkor egy nagy támadási pontot lefedtünk ,persze ez még nem elég védelem.
Következő lépésünkben levédjük a szervert SQL CSALÁS ELLEN
2089M DIFF:
Idézgame_2089M
0010F5C3: 31 EB
0010F5C4: C0 09
33820 DIFF: (DB DIFF NEM GAME DIFF!!)
IdézThis difference file is created by The Interactive Disassembler
db_r33820_32_u
000925A5: 01 00
34083 GAME DIFF
IdézThis difference file is created by The Interactive Disassembler
game_r34083_32
0040DFE5: 01 00
Forrás:
game/src messenger_manager.cpp
Idézvoid MessengerManager::RemoveFromList(MessengerManager::keyA account, MessengerManager::keyA companion)
Idézvoid MessengerManager::RemoveFromList(MessengerManager::keyA account, MessengerManager::keyA companion)
{
if (companion.size() == 0)
return;
sys_log(1, "Messenger Remove %s %s", account.c_str(), companion.c_str());
DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' AND companion = '%s'",
get_table_postfix(), account.c_str(), companion.c_str());
__RemoveFromList(account, companion);
TPacketGGMessenger p2ppck;
p2ppck.bHeader = HEADER_GG_MESSENGER_REMOVE;
strlcpy(p2ppck.szAccount, account.c_str(), sizeof(p2ppck.szAccount));
strlcpy(p2ppck.szCompanion, companion.c_str(), sizeof(p2ppck.szCompanion));
P2P_MANAGER::instance().Send(&p2ppck, sizeof(TPacketGGMessenger));
}
Idézvoid MessengerManager::RemoveFromList(MessengerManager::keyA account, MessengerManager::keyA companion)
{
if (companion.empty())
return;
// Second fix
if (m_Relation[account].find(companion) == m_Relation[account].end() || m_InverseRelation[companion].find(account) == m_InverseRelation[companion].end())
{
LPCHARACTER ch = CHARACTER_MANAGER::Instance().FindPC(account.c_str());
if (ch)
{
sys_err("MessengerManager::RemoveFromList: %s tries to use messenger sql injection", ch->GetName());
DBManager::Instance().DirectQuery("UPDATE account.account SET status = 'BAN' WHERE id = %u", ch->GetAID());
if (ch->GetDesc())
ch->GetDesc()->DelayedDisconnect(3);
}
else
sys_err("MessengerManager::RemoveFromList: Omg! The ghost tried to use this function!");
return;
}
sys_log(1, "MessengerManager::RemoveFromList: Remove %s %s", account.c_str(), companion.c_str());
DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' AND companion = '%s'", get_table_postfix(), account.c_str(), companion.c_str());
__RemoveFromList(account, companion);
TPacketGGMessenger p2ppck;
p2ppck.bHeader = HEADER_GG_MESSENGER_REMOVE;
strlcpy(p2ppck.szAccount, account.c_str(), sizeof(p2ppck.szAccount));
strlcpy(p2ppck.szCompanion, companion.c_str(), sizeof(p2ppck.szCompanion));;
P2P_MANAGER::instance().Send(&p2ppck, sizeof(TPacketGGMessenger));
}
game/src guild_manager.cpp
IdézDWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
IdézDWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
if (!gcp.master)
return 0;
if (!check_name(gcp.name))
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길ë“Å"> 길ë“Å" ì´ë¦â€ì´ ì 합하ì§â,¬ ì•ŠìÅ µë‹ˆë‹¤."));
return 0;
}
std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
get_table_postfix(), gcp.name));
if (pmsg->Get()->uiNumRows > 0)
{
MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);
if (!(row[0] && row[0][0] == '0'))
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길ë“Å"> ì´ë¯¸ ê°â,,¢ìâ,¬ ì´ë¦â€ìËœ 길ë“Å"ê°â,¬ ìˆìÅ µë‹ˆë‹¤."));
return 0;
}
}
else
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길ë“Å"> 길ë“Å"를 ìÆ'ì‱í• ìˆ˜ ìâ€"†ìÅ µë‹ˆë‹¤."));
return 0;
}
// new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
// other game server calls CGuildManager::LoadGuild to load guild.
CGuild * pg = M2_NEW CGuild(gcp);
m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
return pg->GetID();
}
IdézDWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
if (!gcp.master)
return 0;
if (!check_name(gcp.name))
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길ë“Å"> 길ë“Å" ì´ë¦â€ì´ ì 합하ì§â,¬ ì•ŠìÅ µë‹ˆë‹¤."));
return 0;
}
static char __escape_name[GUILD_NAME_MAX_LEN * 2 + 1];
DBManager::instance().EscapeString(__escape_name, sizeof(__escape_name), static_cast<const char *>(gcp.name),
sizeof(gcp.name));
std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
get_table_postfix(), __escape_name));
if (pmsg->Get()->uiNumRows > 0)
{
MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);
if (!(row[0] && row[0][0] == '0'))
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길ë“Å"> ì´ë¯¸ ê°â,,¢ìâ,¬ ì´ë¦â€ìËœ 길ë“Å"ê°â,¬ ìˆìÅ µë‹ˆë‹¤."));
return 0;
}
}
else
{
gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<길ë“Å"> 길ë“Å"를 ìÆ'ì‱í• ìˆ˜ ìâ€"†ìÅ µë‹ˆë‹¤."));
return 0;
}
// new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
// other game server calls CGuildManager::LoadGuild to load guild.
CGuild * pg = M2_NEW CGuild(gcp);
m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
return pg->GetID();
}
Fontos hogy ezeket úgy csináljuk hogy
A szervert leállított állapotában töltjük le a game és a db fájlt.
Biztonsági mentést csinálj ! Sose árt...
Diffeljük be
Itt a letöltés a diff patcherhez:
http://data.hu/get/4904534/Dif-Patcher_by_Imer.exe
Használata: http://metin2hungary.net/index.php/topic,128221.msg710800.html#msg710800
Ha meg van akkor amíg áll a szerver töltsük fel és reboot.
Evvel meg is volnánk.
Figyeljünk oda hogy ne használjunk sablonos weboldalakat mert teli vannak backdoor-al (kiskapukkal)
Inkább vegyünk egyet vagy csináljunk egy sajátot levédve de sablonosat soha.
Válogasd meg hogy kinek adod meg az adataidat.
Illetve érdemes a 22-s portot is kicserélni.
Itt egy videó hozzá:
https://www.youtube.com/watch?v=uOSYu4meFaQ
A navicat jelszó váltás meg megint egyszerü.
A kiválasztott jelszót generáljuk ugye :https://www.browserling.com/tools/mysql-password
Utána navicatra felmész:
Mysql>User> és ott a localhost-nál megadod a jelszót ugye amit generáltál.
VPS en a Puttyba beirod
(evvel a parancsal tudsz jelszót váltani):
passwd
A témát még folytatom.
Remélem érthető.
Ha segítettem egy +-t mert ugye sose árt..