Implementarea unui sistem de whitelist IP pentru conturile GM/Admin in serverul tau va permite conectarea acestora doar de pe adrese IP aprobate, prevenind accesul neautorizat la conturile administrative. Acest sistem a fost creat integral de catre mine! Nici o parte de cod nu a fost copiata de undeva.
Pentru probleme si intrebari va rog sa imi scrieti aici printr`un replay sau pe discord in PM sau direct pe serverul comunitatii!
---
# 1. Cum functioneaza sistemul de whitelist IP?
1. Se creeaza o lista cu IP-urile autorizate pentru fiecare cont de GM/Admin.
2. La autentificare, serverul verifica IP-ul jucatorului.
3. Daca IP-ul nu se regaseste in whitelist, conexiunea este respinsa.
# 2. Pasi pentru implementare
## Pasul 1: Definirea whitelist-ului in baza de date
1. Creeaza o noua tabela in baza de date `account` pentru whitelist-ul de IP:
```
```
2. Adauga IP-urile autorizate pentru conturile administrative:
```sql
```
---
## Pasul 2: Modificarea autentificarii pe server (C++)
1. Deschide fisierul sursa `input_db.cpp` si gaseste functia care gestioneaza login-ul:
```
```
2. Adauga cod pentru verificarea IP-ului:
3. Salveaza modificarile si compileaza serverul.
---
## Pasul 3: Adaugarea suportului in config-ul serverului
1. In fisierul de configurare `config`, adauga optiunea pentru activarea whitelist-ului:
2. In codul sursa, citeste configuratia:
3. Aplica restrictia doar daca whitelist-ul este activ:
---
# 3. Testarea sistemului
1. Porneste serverul si incearca sa te conectezi de pe un IP neautorizat.
2. Verifica logurile pentru mesajele de securitate.
3. Adauga un IP nou in baza de date si confirma ca se poate conecta corect.
---
# 4. Avantaje si limitari
**Avantaje:**
- Previne accesul neautorizat la conturile administrative.
- Se poate actualiza lista de IP-uri din baza de date fara a reporni serverul.
- Usor de implementat si configurat.
**Limitari:**
- GM/Adminii cu IP-uri dinamice pot avea dificultati in conectare.
- Daca baza de date nu este disponibila, login-ul poate fi afectat.
Pentru probleme si intrebari va rog sa imi scrieti aici printr`un replay sau pe discord in PM sau direct pe serverul comunitatii!
---
# 1. Cum functioneaza sistemul de whitelist IP?
1. Se creeaza o lista cu IP-urile autorizate pentru fiecare cont de GM/Admin.
2. La autentificare, serverul verifica IP-ul jucatorului.
3. Daca IP-ul nu se regaseste in whitelist, conexiunea este respinsa.
# 2. Pasi pentru implementare
## Pasul 1: Definirea whitelist-ului in baza de date
1. Creeaza o noua tabela in baza de date `account` pentru whitelist-ul de IP:
```
Cod: Selectaţi tot
sql
CREATE TABLE account_ip_whitelist (
account_id INT NOT NULL,
ip_address VARCHAR(45) NOT NULL,
PRIMARY KEY (account_id, ip_address),
FOREIGN KEY (account_id) REFERENCES account(id) ON DELETE CASCADE
);
2. Adauga IP-urile autorizate pentru conturile administrative:
```sql
Cod: Selectaţi tot
INSERT INTO account_ip_whitelist (account_id, ip_address) VALUES
(1, '192.168.1.100'),
(2, '203.0.113.45');
---
## Pasul 2: Modificarea autentificarii pe server (C++)
1. Deschide fisierul sursa `input_db.cpp` si gaseste functia care gestioneaza login-ul:
```
Cod: Selectaţi tot
cpp
bool CInputDB::Login(LPCHARACTER ch, const char* c_pszLogin, const char* c_pszPwd)
2. Adauga cod pentru verificarea IP-ului:
Cod: Selectaţi tot
```cpp
std::string query = fmt::format("SELECT COUNT(*) FROM account_ip_whitelist WHERE account_id='{}' AND ip_address='{}'",
ch->GetAccountID(), ch->GetDesc()->GetHostName());
std::unique_ptr<SQLMsg> msg(DBManager::instance().DirectQuery(query.c_str()));
if (msg->Get()->uiNumRows == 0)
{
sys_log(0, "Login respins: IP-ul {} nu este autorizat pentru contul {}", ch->GetDesc()->GetHostName(), ch->GetName());
ch->ChatPacket(CHAT_TYPE_INFO, "[SECURITY] Acces interzis!");
return false;
}
```
---
## Pasul 3: Adaugarea suportului in config-ul serverului
1. In fisierul de configurare `config`, adauga optiunea pentru activarea whitelist-ului:
Cod: Selectaţi tot
```ini
ENABLE_IP_WHITELIST = 1
```
Cod: Selectaţi tot
```cpp
bool g_bEnableIPWhitelist = false;
ConfigReadBool("ENABLE_IP_WHITELIST", &g_bEnableIPWhitelist);
```
Cod: Selectaţi tot
```cpp
if (g_bEnableIPWhitelist)
{
// Executa verificarea IP-ului
}
```
# 3. Testarea sistemului
1. Porneste serverul si incearca sa te conectezi de pe un IP neautorizat.
2. Verifica logurile pentru mesajele de securitate.
3. Adauga un IP nou in baza de date si confirma ca se poate conecta corect.
---
# 4. Avantaje si limitari
**Avantaje:**
- Previne accesul neautorizat la conturile administrative.
- Se poate actualiza lista de IP-uri din baza de date fara a reporni serverul.
- Usor de implementat si configurat.
**Limitari:**
- GM/Adminii cu IP-uri dinamice pot avea dificultati in conectare.
- Daca baza de date nu este disponibila, login-ul poate fi afectat.