Configurarea unui server IRC InspIRCd pe Ubuntu 16.04 LTS

Internet Relay Chat (IRC) este ceva care a existat încă din primele zile ale internetului. În acest ghid, vă voi arăta cum să configurați un server IRC cu InspIRCd cu Atheme pentru servicii IRC suplimentare. InspIRCd este unul dintre puținele servere IRC scrise de la zero și unul dintre doar câteva servere IRC care oferă un număr reglabil de funcții prin utilizarea unui sistem de module avansat.

Cerințe preliminare

  • O instanță a serverului Ubuntu 16.04 LTS x64.
  • Un utilizator sudo (sau cont root) .
  • (Opțional) Un nume DNS pentru instanța dvs.

InspIRCd ar trebui să funcționeze cu orice dimensiune a instanței. Cerințele sale minime de sistem sunt un procesor de 700 MHz și 300 MB de memorie RAM.

Actualizați sistemul

Când vă conectați ca utilizator sudo, puteți actualiza sistemul la cel mai recent statut stabil, după cum urmează:

apt-get update && apt-get upgrade 

Configurarea firewallului

Mai întâi, să întărim puțin VPS-ul. Vom activa ufwși adăuga câteva reguli. Să începem cu configurarea porturilor:

ufw allow 22/tcp
ufw allow 6667/tcp
ufw enable

Firewall-ul va solicita un dialog pentru a accepta modificările. Doar apăsați Ypentru da.

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Instalați și configurați InspIRCd

În continuare putem instala InspIRCd, pentru Ubuntu 16.04 acest pachet este disponibil prin intermediul depozitului principal.

apt-get install inspircd 

După terminarea instalării, putem începe configurarea serviciului. Configurația principală poate fi găsită în /etc/inspircd/inspircd.conffișier și are aspectul unui fișier XML.

nano /etc/inspircd/inspircd.conf

Prima căutare pentru serveretichetă. Această etichetă este locul în care introduceți detaliile serverului / rețelei dvs., majoritatea acestor setări sunt vizibile pentru utilizatorii dvs.

  • name: Numele gazdă al serverului dvs. Nu trebuie să se rezolve, dar trebuie să fie sintaxa corectă (de exemplu:) sub.example.net.
  • description: Descrierea serverului.
  • id: SID-ul de utilizat pentru acest server. Acest lucru nu ar trebui să fie necomentat decât dacă există un conflict SID. Aceasta trebuie să aibă trei caractere. Primul personaj trebuie să fie o cifră [0-9], celelalte două caractere pot fi litere [AZ] sau cifre.
  • network: Numele rețelei dat pe conectarea la clienți. Ar trebui să fie la fel pe toate serverele din rețea și să nu conțină spații.

În ghidul nostru vom folosi următoarele:

<server name="irc.example.net"
        description="My EXAMPLE.NET server"
        id="5AA"            
        network="ExampleNET">

Înlocuiți eticheta originală cu cea de mai sus.

Apoi, căutați admineticheta. Aceste setări sunt detaliile administrative ale serverului dumneavoastră. Acestea sunt afișate atunci când tastați /ADMINcomanda.

  • name: Nume real
  • nick: Porecla (de preferat ceea ce utilizați în rețea)
  • email: adresa de email. Nu trebuie să fie valabil, dar această adresă va fi cea pe care utilizatorii dvs. ar trebui să vă contacteze în caz de probleme.

Să folosim administratorul Xenial:

<admin name="Xenial Xerius"
   nick="xenial"
   email="[email protected]">

Acum treceți la bind address. Această etichetă este folosită pentru deschiderea serviciului. În mod implicit, veți vedea IP-ul localhost ( 127.0.0.1). Aceasta înseamnă că serviciul nu poate fi contactat de lumea exterioară. Haideți să ne deschidem serviciul, folosind deloc nicio adresă. Acest lucru va determina serviciul să se lege la orice interfață Ethernet pe care o deține mașina:

<bind address="" port="6667" type="clients">

Următoarea etichetă va fi powereticheta. Această etichetă definește două parole.

  • diepass: Parolă pe care operatorii să o folosească dacă doresc să oprească un server.
  • restartpass: Parolă pe care operatorii să o folosească dacă au nevoie de repornirea unui server.

Cel mai bine este să schimbați aceste parole implicite:

<power diepass="die123" restartpass="restart123" pause="2">

Ultimele setări pe care le vom modifica sunt opersetările. Acestea definesc autentificarea operatorilor.

  • name: autentificare operator care este utilizat pentru a opera (Exemplu:) /oper name password.
  • password: text înfășurat și simplu
  • host: Ce nume de gazdă / IP sunt autorizate să funcționeze. Mai multe opțiuni pot fi separate prin spații, iar CIDR-urile sunt permise. Puteți utiliza *sau @pentru această secțiune.
  • type: Ce tip de oper este acesta. Blocul de mai sus ar trebui să aibă trei clase deja definite: NetAdmin, GlobalOpși Helper. Acesta NetAdmineste cel pe care îl vom folosi.

Schimbați opereticheta folosind următorul conținut. Rețineți că, de exemplu, vom folosi " @" pentru gazdă. Într-un mediu de producție, nu este de dorit să folosiți acest lucru:

<oper name="xenial"
   password="mypassword"
   host="*@*"
   type="NetAdmin">

Înainte de a reporni serviciul, editați fișierele motdși rules:

nano /etc/inspircd/inspircd.motd

Înlocuiți-l cu unul propriu, de exemplu:

This is the motd of example.net. Here you can list planned outages or information your users need to know about this IRC server.

În sfârșit, editați fișierele cu reguli.

nano /etc/inspircd/inspircd.rules

Adăugați propriile reguli, de exemplu:

The first rule of Fight Club is: You do not talk about Fight Club. The second rule of Fight Club is: You DO NOT TALK ABOUT FIGHT CLUB! 

Acum că totul este configurat, reporniți serviciul IRC:

service inspircd restart

Pentru a verifica dacă totul funcționează, interogați netstatinstrumentul:

netstat -tulpn | grep -i inspircd

Ar trebui să enumere programul inspircd, ascultând în port 6666:

tcp6       0      0 :::6667                 :::*                    LISTEN      31313/inspircd
udp        0      0 0.0.0.0:39335           0.0.0.0:*                           31313/inspircd

Pentru a testa serverul putem instala un client IRC terminal. Pe Windows puteți utiliza un program, cum ar fi mIRC. În exemplul nostru vom folosi Weechat. Acesta este un client IRC bazat pe text care poate fi utilizat într-o sesiune de terminal.

Instalați aplicația weechat prin intermediul depozitelor:

apt-get install weechat 

După instalarea acestei aplicații, rulați acest client IRC:

weechat

Pentru a vedea toate comenzile pe care trebuie să le oferim, puteți solicita comanda de ajutor:

/help

Pentru a ieși din Weechat, puteți introduce următoarea comandă:

/quit    

Adăugați serverul nostru local la o conexiune în weechat:

/server add local localhost

Acum ne putem conecta la profilul de conexiune numit „local”:

/connect local

Veți vedea motd-ul nostru și regulile apar în fereastra terminalului.

Pentru a vă promova în fața unui operator, introduceți următoarele:

/oper xenial mypassword

Aceasta ne va arăta o confirmare a succesului:

22:40:34   local  -- | User mode [+o] by irc.example.net
22:40:34   local  -- | You are now a NetAdmin

Asta e pentru serverul nostru IRC.

Instalarea serviciilor IRC - Atheme

Atheme este un set de servicii pentru rețele IRC concepute pentru rețele IRC mari, cu cerințe de scalabilitate ridicate. Acesta adaugă servicii suplimentare, cum ar fi NickServ (Nickname Registration) la rețeaua dvs. IRC.

Atheme pot fi găsite în depozitul Ubuntu:

apt-get install atheme-services

După instalarea binarelor, extrageți fișierul de configurare de exemplu și copiați-l în athemefolder:

gunzip /usr/share/doc/atheme-services/examples/atheme.conf.example.gz
cp /usr/share/doc/atheme-services/examples/atheme.conf.example /etc/atheme/atheme.conf

Apoi, editați acest fișier de configurare:

nano /etc/atheme/atheme.conf

Mai întâi căutați loadmodulecomanda protocolului. Aceasta trebuie definită după cum urmează:

loadmodule "modules/protocol/charybdis";

Înlocuiți charybdiscu protocolul de inspircd:

loadmodule "modules/protocol/inspircd12";

Următoarea căutare a serviciului name:

name = "services.int";

Modificare services.intpentru a se potrivi cu numele de domeniu sau adresa IP a serverului dvs. IRC:

name = "services.irc.example.net";

După ce se face acest lucru, se caută numeric:

numeric = "00A";

Acum schimbați-o pe o valoare diferită de cea numerică folosită în eticheta serverului folosită înainte.

numeric = "77C";

Odată făcut acest lucru, să configuram numele rețelei. Caută netname:

netname = "misconfigured network";

Modificați această valoare în parametrul de rețea din eticheta serverului.

netname = "ExampleNET";

Modificați valoarea hidehostsuffix:

hidehostsuffix = "users.misconfigured";

Eliminați .misconfigured:

hidehostsuffix = "users";

Următoarea schimbare a numelui de admin la cel folosit anterior:

adminname = "xenial";

Potriviți cu adminemaile-mailul asociat folosit înainte:

adminemail = "[email protected]";

Acum că s-a făcut acest lucru, trebuie să creăm un link ascendent pentru serviciile noastre. Găsiți cele două uplinkblocuri de coduri și comentați-le pe toate. Adăugați /*înainte de uplink{comandă și */la sfârșitul barei de închidere.

Va arăta astfel:

/* this is an example for using an IPv6 address as an uplink */
/*
uplink "irc6.example.net" {
        host = "::1";
        password = "linkage";
        port = 6667;
};
*/

Apoi, adăugați propriul nostru link ascendent. Acest link ascendent va rula doar pe IP-ul localhost-ului nostru și pe port 7001. Specificați o parolă super secretă (o vom folosi ulterior):

uplink "services.irc.example.net" {
    host = "127.0.0.1";

    // password
    // If you want to have same send_password and accept_password, you
    // can specify both using 'password' instead of individually.
    password = "SuperSecret123456";

    port = 7001;
 };

În sfârșit, căutați definițiile serviciului nostru. Începeți mai nickservîntâi cu blocul.

În blocul nickserv, căutați hosteticheta și schimbați-o în ExampleNet/services/NickServ:

nickserv {

    ...<<truncated>>...

    /* (*)host
     * The hostname we want NickServ to have.
     */
    host = "ExampleNet/services/NickServ";

    /* (*)real
     * The realname (gecos) information we want NickServ to have.
     */
    real = "Nickname Services";

    ...<<truncated>>...

Modificați și hostname tagtoate celelalte servicii:

nickserv:  ExampleNet/services/NickServ
chanserv:  ExampleNet/services/ChanServ
global:    ExampleNet/services/Global
infoserv:  ExampleNet/services/InfoServ
operserv:  ExampleNet/services/OperServ
saslserv:  ExampleNet/services/SaslServ
memoserv:  ExampleNet/services/MemoServ
gameserv:  ExampleNet/services/GameServ
botserv:   ExampleNet/services/BotServ
groupserv: ExampleNet/services/GroupServ
hostserv:  ExampleNet/services/HostServ
helpserv:  ExampleNet/services/HelpServ
alis:      ExampleNet/services/ALIS

După ce faceți acest lucru, salvați și ieșiți din fișierul de configurare.

Pentru a testa totul, rulați atheme-servicesbinarul:

atheme-services

Acest lucru ar trebui să vă spună exact dacă funcționează sau nu. Dacă nu primiți ieșire precum cea prezentată mai jos, mergeți înapoi și verificați dacă există erori în fișierul de configurare:

[19/02/2018 23:06:24] db-open-read: database '/var/lib/atheme/services.db' does not yet exist; a new one will be created.
[19/02/2018 23:06:24] pid 1929
[19/02/2018 23:06:24] running in background mode from /

Acum activați serviciul prin editarea fișierului de servicii:

nano /etc/default/atheme-services

Modificați ENABLEDvaloarea:

DAEMON_OPTS=""
ENABLED=1

Acum putem începe serviciul:

service atheme-services restart

Verificați starea acestuia:

service atheme-services status

Aceasta va întoarce rezultate similare:

● atheme-services.service - LSB: Atheme-services daemon init.d script
   Loaded: loaded (/etc/init.d/atheme-services; bad; vendor preset: enabled)
   Active: active (running) since Wed 2018-02-19 23:45:05 UTC; 8s ago
     Docs: man:systemd-sysv-generator(8)

Feb 19 23:45:05 vultr.guest atheme-services[2810]: Starting Atheme IRC Services: atheme-service
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] atheme 6.0.11 is start
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] Module operserv/sgline
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] module_load(): module
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] /etc/atheme/atheme.con
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] db-open-read: database
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] pid 2824
Feb 19 23:45:05 vultr.guest atheme-services[2810]: [19/02/2018 23:45:05] running in background
Feb 19 23:45:05 vultr.guest atheme-services[2810]: .
Feb 19 23:45:05 vultr.guest systemd[1]: Started LSB: Atheme-services daemon init.d script.

Înainte de a termina, trebuie să adăugăm serviciile Atheme la InspIRCd:

nano /etc/inspircd/inspircd.conf

La sfârșitul fișierului adăugați aceste linii:

<bind address="127.0.0.1" port="7001" type="servers">

<uline server="services.irc.example.net">

<link name="services.irc.example.net"
  ipaddr="127.0.0.1"
  port="7001"
  allowmask="127.0.0.1"
  sendpass="SuperSecret123456"
  recvpass="SuperSecret123456">

<chanprotect noservices="no"
         qprefix="~"
         aprefix="&">

# Modules needed for services to function
<module name="m_chanprotect.so">
<module name="m_halfop.so">
<module name="m_services_account.so">
<module name="m_deaf.so">
<module name="m_spanningtree.so">
<module name="m_globops.so">
<module name="m_cban.so">
<module name="m_svshold.so">
<module name="m_hidechans.so">
<module name="m_servprotect.so">
<module name="m_chghost.so">
<module name="m_namesx.so">
<module name="m_uhnames.so">    

Acum reporniți serviciul InspIRCd:

service inspircd restart

Asigurați-vă că totul funcționează bine:

service inspircd status

Acum începe din nou clientul weechat:

weechat

Conectați-vă la serverul nostru local:

/connect local

Veți vedea unul dintre serviciile noastre Atheme pop up imediat: NickServ. Te va saluta cu informații despre sine.

23:12:48   local  -- | NickServ (NickServ@ExampleNet/services/NickServ): Welcome to ExampleNet,
                 | root! Here on ExampleNet, we provide services to enable the registration of
                 | nicknames and channels! For details, type /msg NickServ help and /msg
                 | ChanServ help.

Puteți interoga pe NickServ și aflați comenzile disponibile cu următoarele:

/msg NickServ help


Leave a Comment

Cum se instalează Anchor CMS pe un VPS Fedora 26 LAMP

Cum se instalează Anchor CMS pe un VPS Fedora 26 LAMP

Folosind un sistem diferit? Anchor CMS este un motor de blog de sistem de gestionare a conținutului (CMS) super-simplu și extrem de ușor, gratuit și deschis

Configurare partajare NFS pe Debian

Configurare partajare NFS pe Debian

NFS este un sistem de fișiere bazat pe rețea care permite computerelor să acceseze fișiere într-o rețea de calculatoare. Acest ghid explică modul în care puteți expune folderele peste NF

Configurați un server TeamTalk pe Linux

Configurați un server TeamTalk pe Linux

TeamTalk este un sistem de conferințe care permite utilizatorilor să aibă conversații audio / video de înaltă calitate, chat de text, transfer de fișiere și partajare ecrane. Este

Folosind cheia SSH pentru a vă conecta la utilizatori non-root

Folosind cheia SSH pentru a vă conecta la utilizatori non-root

Vultr oferă o caracteristică care vă permite să preinstalați cheile SSH la crearea unei noi instanțe. Acest lucru vă permite să accesați utilizatorul root al serverelor, totuși

Cum se instalează Ranger Terminal File Manager pe Linux

Cum se instalează Ranger Terminal File Manager pe Linux

Ranger este un manager de fișiere bazat pe linia de comandă cu legături de cheie VI. Oferă o interfață de blestem minimalistă și frumoasă, cu o vedere asupra ierarhiei de directoare

Cum se instalează Redmine pe Ubuntu 16.04

Cum se instalează Redmine pe Ubuntu 16.04

Folosind un sistem diferit? Redmine este un instrument gratuit și deschis de gestionare a proiectelor bazat pe web. Este scris în Ruby on Rails și acceptă mai multe baze de date

Instalare RethinkDB Cluster pe CentOS 7

Instalare RethinkDB Cluster pe CentOS 7

Introducere RethinkDB este o bază de date NoSQL care stochează date sub formă de documente JSON. Are un limbaj de interogare super intuitiv și are funcții disponibile în mod obișnuit

Cum se construiește Brotli din sursă pe Ubuntu 18.04 LTS

Cum se construiește Brotli din sursă pe Ubuntu 18.04 LTS

Folosind un sistem diferit? Brotli este o nouă metodă de compresie cu un raport de compresie mai bun decât GZIP. Codul sursă este găzduit public pe acest Githu

Configurarea conturilor de utilizator numai SFTP pe CentOS 7

Configurarea conturilor de utilizator numai SFTP pe CentOS 7

În anumite ocazii, este posibil ca un administrator de sistem să aibă nevoie să creeze un cont de utilizator și să restricționeze accesul acestora la gestionarea propriilor fișiere prin sFTP, dar nu b

Utilizarea vizualizărilor MySQL pe Debian 7

Utilizarea vizualizărilor MySQL pe Debian 7

Introducere MySQL are o caracteristică excelentă cunoscută sub numele de vizualizări. Vizualizările sunt interogări stocate. Gândiți-vă la ele ca la un alias pentru o întrebare altfel lungă. În acest ghid,

Cum se instalează Nginx 1.14 pe Arch Linux

Cum se instalează Nginx 1.14 pe Arch Linux

Cerințe preliminare Un server Vultr care funcționează actualizat Arch Linux (vezi acest articol.) Acces Sudo. Comenzile care trebuie rulate ca root sunt prefixate de #. Th

Dezactivați sau restricționați conectarea rădăcină prin SSH pe Linux

Dezactivați sau restricționați conectarea rădăcină prin SSH pe Linux

Permiterea autentificării root pe SSH este de obicei considerată o practică slabă de securitate în întreaga industrie tehnologică. În schimb, puteți efectua administrativ sensibil

Cum se instalează Seafile Server pe Ubuntu 16.10

Cum se instalează Seafile Server pe Ubuntu 16.10

Folosind un sistem diferit? Seafile (versiunea comunității) este o soluție gratuită și deschisă de sincronizare și partajare a fișierelor, care este similară cu ownCloud. De-a lungul spiritului

Cum să compilați Nginx din sursă pe CentOS 7

Cum să compilați Nginx din sursă pe CentOS 7

Folosind un sistem diferit? NGINX poate fi utilizat ca server HTTP / HTTPS, server proxy invers, server proxy de poștă, echilibrator de sarcină, terminator TLS sau cachin

Cum se instalează Thelia 2.3 pe Debian 9

Cum se instalează Thelia 2.3 pe Debian 9

Folosind un sistem diferit? Thelia este un instrument open source pentru crearea de site-uri web pentru e-business și gestionarea conținutului online scris în PHP. Codul sursă Thelia i

Cum se instalează DokuWiki pe Ubuntu 16.04 LTS

Cum se instalează DokuWiki pe Ubuntu 16.04 LTS

Folosind un sistem diferit? DokuWiki este un program wiki open source scris în PHP care nu necesită o bază de date. Stochează date în fișiere text. DokuWik

Configurarea unui chroot pe Debian

Configurarea unui chroot pe Debian

Acest articol vă va învăța cum să configurați o închisoare chroot pe Debian. Presupun că utilizați Debian 7.x. Dacă executați Debian 6 sau 8, acest lucru poate funcționa, bine

Cum se instalează PiVPN pe Debian

Cum se instalează PiVPN pe Debian

Introducere Un mod ușor de a configura un server VPN pe Debian este cu PiVPN. PiVPN este un instalator și un pachet pentru OpenVPN. Creează comenzi simple pentru tine

Cum se instalează Chamilo 1.11.8 pe CentOS 7

Cum se instalează Chamilo 1.11.8 pe CentOS 7

Folosind un sistem diferit? Chamilo este un sistem gratuit și deschis de management al învățării (LMS), care este utilizat pe scară largă pentru educația online și colaborarea în echipă

Instalați Nginx, Wordpress și permiteți criptarea în minute cu EasyEngine pe Debian 8 sau Ubuntu 16.04

Instalați Nginx, Wordpress și permiteți criptarea în minute cu EasyEngine pe Debian 8 sau Ubuntu 16.04

EasyEngine (ee) este un instrument Python care vă permite să gestionați ușor și automat site-urile Wordpress de pe Nginx. Folosind EasyEngine, nu va trebui să dați

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe