Aslında tüm bu saldırıları çözmenin yolu çok basit. IRCd yi mIRC Scripting gibi sadece text özelliği olan scriptlerden kurtarmak.
Bölüm script ama amaç aynı. Modulsel olarak deneyin. Sınır yok.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#include "config.h"
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "channel.h"
#include <time.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <io.h>
#endif
#include <fcntl.h>
#include "h.h"
#ifdef _WIN32
#include "version.h"
#endif
static int m_proxy(aClient *, aChannel *);
ModuleHeader MOD_HEADER(m_proxys)
= {
"m_proxy",
"Proxy Korumasi (toXic)",
"Proxy Korumasi (toXic)",
"3.2-b8-1",
NULL
};
DLLFUNC int MOD_INIT(m_proxys)(ModuleInfo *modinfo)
{
HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_CONNECT, m_proxy);
return MOD_SUCCESS;
}
DLLFUNC int MOD_LOAD(m_proxys)(int module_load)
{
return MOD_SUCCESS;
}
DLLFUNC int MOD_UNLOAD(m_proxys)(int module_unload)
{
return MOD_SUCCESS;
}
static char *proxylistesi[] = {
"95.245",
"78.222.222.222",
NULL
};
static int proxy_listesi(char *nick)
{
char **plist;
for (plist=proxylistesi; *plist; *plist++)
{
if (strstr(nick, *plist))
return 1;
}
return 0;
}
static int m_proxy(aClient *sptr, aChannel *chptr) {
char *kanal = "#Proxy";
char *i[3], channels[512];
#define Kontrol "#Botkontrol"
#define aciklama1 "Proxy Girisi yaptiginiz tespit edildi.."
#define aciklama2 "Bu nedenle proxy kanalina aliniyorsunuz"
#define aciklama3 "Ban sorunlari icin, \
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
\2 adresini kullanmalisiniz."
if (proxy_listesi(sptr->user->realhost)) {
if ((chptr = find_channel(Kontrol, NullChn)) != NullChn)
sendto_channel_butone(&me, &me, chptr, ":Proxy PRIVMSG %s : Proxy Girisi tespit edildi. Nick: \2%s\2 Proxy Kanalina Alindi..", Kontrol, sptr->name);
sendto_one(sptr, ":Proxy NOTICE %s :%s", sptr->name, aciklama1);
sendto_one(sptr, ":Proxy NOTICE %s :%s", sptr->name, aciklama2);
sendto_one(sptr, ":Proxy NOTICE %s :%s", sptr->name, aciklama3);
return place_host_ban(sptr, BAN_ACT_SHUN, "proxy", 60000);
/* Dosyaya yazdirma.. */
time_t irc_time;
struct tm tdate;
irc_time = time(NULL);
tdate = *localtime(&irc_time);
FILE * pFile;
pFile = fopen ("Proxy.txt", "a");
fprintf (pFile, "Tarih: %02d-%02d-%02d Saat: %02d:%02d Nick: %s IP: %s \n", tdate.tm_mday, tdate.tm_mon + 1,
tdate.tm_year - 100, tdate.tm_hour, tdate.tm_min, sptr->name, sptr->user->realhost);
fclose (pFile);
sendto_realops("PROXY: %s Proxy Girisi yapti.",
sptr->name);
strlcpy(channels, kanal, sizeof(channels));
i[0] = sptr->name;
i[1] = channels;
i[2] = NULL;
do_cmd(sptr, sptr, "JOIN", 2, i);
} else {
sendto_one(sptr, ":Proxy NOTICE %s Guvenli giris yapiyorsunuz", sptr->name);
sendto_one(sptr, ":Proxy NOTICE %s Direk Kanallara aktarilacaksiniz.", sptr->name);
char *ibo = "#toXic,#Sohbet,#Muhabbet";
char *a[3], channels[512];
strlcpy(channels, ibo, sizeof(channels));
a[0] = sptr->name;
a[1] = channels;
a[2] = NULL;
do_cmd(sptr, sptr, "JOIN", 2, a);
}
return 0;
}
Sırf araklanmasın diye yazdiğim modulu getirebildiğim en basit hale getirerek dağitiyorum, aslında proxylere auth doğrulamasi yapmak için yazmiştim modulu.
buradan belirtmelisiniz.
gibi. IP ler regex olarak algilanir, yani eğer "78", diye eklerseniz 78 ile baslayan tüm iplere proxy muamelesi yapar. Proxy Olanlar shunlanir ve #proxy kanalina sokulur. Proxy olmayanlar ise direk kanallara aktarilir. unrealircd.conf unuzdan auto-join kısmını silmelisiniz yoksa proxyleride kanallara alir.
Bu kısmı düzeltmelisiniz. Burada proxy olmayan kullanicilarin direk gireceği kanallar belirlidir.
uyarisini alacaklardir.
Ayrica operlere haber verilip, #botkontrol kanalinda uyarilacaktir.
Tüm bunlar Proxy.txt dosyasinda loglanacaktir.