Eğer uzak bir serverınız varsa muhtemelen SSH Daemon dediğimiz arka planda çalışan,
servera giriş yapmanızı sağlayan program yüklüdür.
Hacker'lar bunu bilir ve serverınıza SSH atakları düzenler. Başarılı olup giriş yaptıklarında
serverınızda tuttuğunuz web sayfaları, emailler ne varsa değiştirebilir, silebilirler.
SSH ataklarından korunmak için IPTABLES, port knocking gibi birçok ayar ve sürekli
güncelleme gerektiren bazı yöntemler vardır. Fakat SSH programı çalıştığı, SSH portunuz
açık kaldığı sürece ataklar bitmez. CPU nuz ataklara cevap vermekle meşgul olur.
Ya SSH programı dolayısıyla SSH portu kapalıysa? Açık port yok ise atak ta yoktur.
Nnet Port Guard programının yazılma amacı budur.
Nnet Port Guard programını serverınıza yüklerseniz serverınızdaki SSH programını uzaktan
açıp kapatabilirsiniz. Giriş yapacağınız zaman açar, işlem yapar, işiniz bittikten sonra
tekrar kapatabilirsiniz.
Servara uzaktan erişebilmek için Nanonet kullanılır. Siz herhangi bir yerde internete bağlı
cihazınızdan bir Web Tarayıcıda çalışan arayüz ile uzak SSH ı kontrol edebilirsiniz.
Projeyi Github tan indirip kurabilirsiniz. Web arayüzüne aşağıdaki linkten de ulaşabilirsiniz.
Sipariş alan kurum diyelim ki bir pide salonu. Sipariş alma ekranını açıyor.
Müşteriler Sipariş verme ekranından siparişlerini veriyorlar. Sipariş alan
ekran sipariş geldikten sonra 6 saniye aralıklarla geriye bildirim yapıyor.
Bu uygulama Javascript'te yazılmıştır. Arada Nanonet haricinde başka hiçbir program
(php vs..) yoktur. Sayfa açıldığında Nanonet servera LOG in yapıyorlar.
Websocket ile servera soket bağlantısı kurmuş oluyorlar. Sonrasında gönderilen
veriler gerçek zamanlı olarak birbirlerine iletiliyor.
Bu uygulamada sıcaklık kontrolü yapan bir cihaz var. Bu cihaz Arduino,
Raspberry Pi veya internet çıkışı olan herhangi bir cihaz olabilir. Ortam
ısısını ölçüyor ve belli aralıklarla hedef ID ye sıcaklık değerini yolluyor.
Hedef ID de ise web tarayıcıda çalışan Javascriptte yazılmış bir uygulama
var. Buradan güncellenen sıcaklık değeri görülüyor, aynı zamanda set edilebiliyor,
Mesaj yolla kısmından "Status" datasını yolladığımızda bize Noddan zaman
bilgisi geliyor.
Nodun kodları C de yazılmıştır. Linux işletim sisteminde doğrudan
çalıştırılabilir. Linux yüklü bir Raspberry Pi'de de problemsiz çalışır.
Bu kod Arduino veya diğer cihazlarda çalışması için düzenlenebilir.
// (c) nnet.server 2015 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #include <time.h> #include "nnet_lib.c" int main(int arc, char *argv[]) { char buffer[size_packetmax+1]; int ret; time_t tm; char src[20], dest[20], command[10], data[size_maxdatalen+1]; char *client_id="1122334455DE:2"; int ISI=20; printf("Basla...\n"); init_nnet("69.28.92.166",9090,"1122334455DE:1","zw+T38i1W6Wy0UyoPMPrepoHY+DmypQelI6Hmr4eeD5FZ5e5ASs03VQnPixjOpFh"); ret=nnet_connect(); if (ret) {printf("error connect:%d\n",ret); return 1;} ret=nnet_login(); if (ret) {printf("error login:%d\n",ret); return 1;} printf("Logged in, waiting for data ...\n"); while(1){ ret=nnet_get_pkg(buffer,size_packetmax,5); //5->timeout 5 sn. if (ret==0) { printf("Data received->%s\n",buffer); ret=nnet_parse_pkg(buffer,src,dest,command,data); if (ret) {printf("nnet_parse_pkg error:%d\n",ret); continue;} else printf("Data parsed:\nsrc=%s, dest=%s, command=%s, data=%s\n",src,dest,command,data); if (!strcmp(data,"Status")) { printf("Sending Time ... "); tm = time(NULL); sprintf(buffer,"Time is:%s",ctime(&tm)); ret=nnet_send_pkg(src,COM_PUT,buffer); if (ret) printf("Send error:%d\n",ret); else printf("OK\n"); } else if (strstr(data,"set=")) { sscanf(data,"set=%d",&ISI); } } else if (ret==1) { if (ISI>30) ISI=15; else ISI++; printf("Timeout, no data received, Sending Temperature:%d\n",ISI); sprintf(data,"isi=%d",ISI); ret=nnet_send_pkg(client_id,COM_PUT,data); if (ret) printf("Send error:%d\n",ret); } else if (ret==4) {printf("Server Disconnected\n"); return 1;} else {printf("Error :%d\n",ret); return 1;} } return 0; }