עמוד ראשי שרתי IRC פיתוח שרתים [מדריך] הקמת שרת UnrealIRCd בסיסי (Ubuntu/Linux)

[מדריך] הקמת שרת UnrealIRCd בסיסי (Ubuntu/Linux)

פיתוח ותכנות שרתי IRC

הצטרף: 01 יולי 2010, 07:43
הודעות: 370
פורסם: 20 ספטמבר 2014, 07:57
מהו שרת UnrealIRCd?
שרת UnrealIRCd הוא שרת IRC בקוד פתוח שמשרת אלפי שרתים מאז שנת 1999. הוא פועל על לינוקס, מאקינטוש וחלונות. שרת UnrealIRCd משרת כיום ככל הנראה כמעל 50% משרתי הIRC בעולם תוך התרכזות בפיתוח מודולים דינאמיים, אפשרות להתאמה אישית ואבטחה. UnrealIRCd הוא חינמי ומוצע לכלל!

למה לבחור בUnrealIRCd ולמי הוא מתאים?
שרת UnrealIRCd הוא לא סתם בין השרתים הנפוצים ביותר בעולם, הוא הפשוט ביותר להקמה, התאמה ושימוש. במידה ואתם מעוניינים להקים שרת IRC לצורכי ניסוי, למידה או אפילו הקמת רשת קטנה לחברים - ללא ספק UnrealIRCd הוא הבחירה המושלמת!

תכונות:
  • דרגת בעל הערוץ (+q) ומנהל ערוץ (+a)
  • דרגת חצי אופ (+h)
  • מערכות נגד הצפה מתקדמות (כגון +f)
  • צינזור קללות
  • צנזור אייפי של משתמשים (+x)
  • חסימת\ניטרול צבעים בערוצים
  • ויהוסטים
  • תמיכה בSSL ואבטחה
  • Ziplinks
  • תמיכה במודולים חיצוניים מותאמים אישית
  • עוד הרבה אפשרויות שאותם תוכלו לראות כאן: http://www.unrealircd.com/files/docs/un ... l#features

דרישות:
  • מערכת הפעלה Linux בהפצת Ubuntu או דומיו.
  • ידע בסיסי בשרתי IRC
  • 30 דקות עבודה
  • גישות מתאימות (root או גישת SUDO)

חלק 0 - התקנות בסיס (נדרשת גישת SUDO או ROOT)
התקנת build-essential:
sudo apt-get install build-essential


התקנת NANO Editor:
sudo apt-get install nano


חלק 1 - הורדה והתקנה
על מנת להתחיל, עלינו להוריד את קבצי המקור של של UnrealIRCd. נלך לאתר הרשמי וניקח את הקישור להורדה של המקור של גרסאת הStable האחרונה: http://www.unrealircd.com/download/
(קיצור דרך להורדת גרסא 3.2.10.4 שכרגע היא האחרונה (2014): http://unrealircd.org/downloads/Unreal3.2.10.4.tar.gz)
על מנת לקבל את הקובץ נכתוב את הפקודה:
wget http://unrealircd.org/downloads/Unreal3.2.10.4.tar.gz


כעת קיבלנו קובץ tar.gz, נצטרך לפתוח אותו באמצעות הפקודה:
tar xvsf Unreal3.2.10.4.tar.gz


כעת התיקייה Unreal3.2.10.4 הופיעה לנו. נכנס אליה באמצעות:
cd Unreal3.2.10.4


כעת נכין את הקבצים ואת ההגדרות באמצעות הפקודה:
./Config

כעת יופיע לנו מסך כזה:
תמונה

נריץ קדימה באמצעות ENTER דרך כל ההוראות עד שנגיע למסך הבא:
תמונה

כעת נתחיל להגדיר.
כמו שניתן לראות בתמונה, השאלה הראשונה היא:
What directory are all the server configuration files in?

באיזה תיקייה יישמרו ההגדרות של השרת? נקיש אנטר לברירת המחדל (/home/USERNAME/Unreal3.2.10.4)

What is the path to the ircd binary including the name of the binary?

באיזה תיקייה ישמרו הקבצים הבינארים של השרת? נקיש אנטר לברירת המחדל.

What should the default permissions for your configuration files be? (Set this to 0 to disable)
It is strongly recommended that you use 0600 to prevent unwanted reading of the file

בקיצור, השאלה פה היא באיזה chmod ישמרו קבצי ההגדרות. מי שלא מבין בזה שלא יגע, ולכן נשתמש ב0600, ברירת המחדל. ונקיש אנטר.

Do you want to support SSL (Secure Sockets Layer) connections?

האם אנו רוצים שהשרת שלנו יתמוך בSSL? במידה ואין לכם SSL, או שאינכם מבינים בזה - נקיש אנטר לברירת המחדל (No).

Do you want to enable IPv6 support?

האם אתם רוצים לאפשר תמיכה בפרוטוקול IPv6? במידה והשרת שלכם תומך בIPv6 והנכם מעוניינים בתמיכה שכזו - רשמו Yes. במידה ולא, השתמשו בברירת המחדל - No.

Do you want to enable ziplinks support?

האם אתם רוצים לאפשר שימוש בZipLinks? במידה והשרת שלכם לא תומך בZipLinks או שאינכם מבינים בזה - השתמשו בברירת המחדל No, אחרת Yes.

Do you want to enable remote includes?

במידה ותאשרו אופציה זו, תוכלו להשתמש בקבצי הקונפיג שלכם בייבוא קבצים חיצוניים מהשרת לדוגמא:
include "http://www.somesite.org/files/opers.conf";

זה לא מומלץ, ולכן נשתמש בברירת המחדל: No.

Do you want to enable prefixes for chanadmin and chanowner?

האם אתה רוצה לאפשר את הדרגות ~ ו& בשרת? במידה וכן, נרשום Yes ובמידה ולא נרשום No. אני בוחר כעת כן.

What listen() backlog value do you wish to use?

נשתמש בספרה 5 במידה ואנו לא מבינים במה מדובר. נקיש אנטר לברירת המחדל.

How far back do you want to keep the nickname history?

כמה רחוק נרצה להשאיר את היסטוריית הכינויים בשרת? מומלץ להשתמש בברירת המחדל 2000 לשרתים קטנים-בינוניים. לכן, נלחץ אנטר לאישור ברירת המחדל: 2000.

What is the maximum sendq length you wish to have?

מקסימום SendQ - מי שלא מבין לא לגעת! נשתמש בברירת המחדל ונקיש אנטר.

How many buffer pools would you like?

נקבע ע"פ מקסימום SendQ - מי שלא מבין לא לגעת! נשתמש בברירת המחדל ונקיש אנטר.

How many file descriptors (or sockets) can the IRCd use?

מי שלא מבין לא לגעת! נשתמש בברירת המחדל ונקיש אנטר.

Would you like to pass any custom parameters to configure?

נקיש אנטר ללא שום ערך והקינפוג יחל לפעול. זה עלול לקחת עד דקה.

לאחר שהשלב הזה הסתיים בהצלחה, נוכל להשתמש בפקודה:
make


במידה והכל הסתדר, תקבלו הודעה שאומרת שהפעולות הסתיימו וכעת האנריל מוכן לשימוש, רק צריך להגדיר את השרת.
נביא את קובץ הקונפיג (example.conf) אל התיקייה הראשית שלנו ונקרא לו unrealircd.conf, נעשה זאת בזריזות על ידי הפקודה:

cp doc/example.conf unrealircd.conf


כעת נפתח את הקונפיג בעזרת הפקודה:
nano unrealircd.conf


והבה נתחיל לקנפג בהנאה!

חלק 2 - קינפוג (הגדרות)
כעת נרצה להגדיר את השרת, מה השם שלו, מה הכתובת שלו ועל איזה פורט הוא ישב - הכל! ובשביל זה יש לנו את unrealircd.conf, קובץ הקינפוג שלנו.
כאשר נפתח אותו, נראה 811 שורות של טקסט. בהתחלה זה יראה לכם טיפה מפחיד אבל תכף נבין כל דבר!
נלך לשורה 68 ונראה שם את הבלוק ME:
me
{
   name "irc.foonet.com";
   info "FooNet Server";
   numeric 1;
};

עכשיו שימו לב לחלק הזה, כי אני עכשיו הולך להסביר מפורט אבל בהמשך המדריך ההסברים יחלו להיות פחות מפורטים משום שאתם כבר צריכים לקלוט את העניין לבד.
הבלוק ME מכיל בתוכו מספר הגדרות:
Name - שם השרת, לא באמת צריך להיות קיים הדומיין הזה אבל זה השם שיוצג כאשר נתחבר אל השרת (לדוגמא: [16:10:20] -irc.foonet.com- *** Looking up your hostname...) הרציונל הוא שתחזיקו בדומיין האמיתי פעיל כמובן.
Info - מידע על השרת, לדוגמא: ZxoR's IRC Private Server.
numeric - לא למתחילים! תמיד נשאיר 1!

כעת, נניח שכתובת השרת שלנו היא irc.MyNet.co.il והשרת הוא שרת פרטי שלי, הבלוק יראה כעת ככה:
me
{
   name "irc.MyNet.co.il";
   info "ZxoR's Private IRC Server";
   numeric 1;
};


נרד קצת למטה, והבלוק הבא הוא:
admin {
   "Bob Smith";
   "bob";
   "widely@used.name";
};

הטקסט הראשון יהיה השם המלא שלכם, הטקסט השני יהיה הכינוי שלכם והטקסט השלישי יהיה המייל שלכם. זה כמובן לא פורמט מחייב, תוכלו לעשות הכל בשורה אחת או לכתוב כל טקסט ומידע שתרצו, אני לדוגמא בחרתי לכתוב ככה:
admin {
   "Admin: ZxoR.";
   "Contact me: ZxoR@MyNet.co.il";
};

טקסט זה יוצג למשתמשים כאשר ישתמשו בפקודה: /ADMIN.

נדלג על מספר שורות וקלאסים ונגיע אל הקלאס ALLOW:
allow {
   ip             *@*;
   hostname       *@*;
   class           clients;
   maxperip 5;
};

שום דבר לא מעניין אותנו כאן חוץ מהשדה "maxperip", שבו נקבע כמה חיבורים נרצה לאשר מאותו אייפי בו זמנית. לדוגמא, אני ממליץ על 3.
allow {
   ip             *@*;
   hostname       *@*;
   class           clients;
   maxperip 3;
};


נדלג למטה, לקלאס OPER:
oper bobsmith {
   class           clients;
   from {
      userhost bob@smithco.com;
   };
   password "f00";
   flags
   {
      netadmin;
      can_zline;
      can_gzline;
      can_gkline;
      global;
   };
};

אופר הוא מנהל השרת, בעל גישות "על" שאותם כמובן אנחנו קובעים לכל אופר. תחילה, נציב אופר רק לעצמינו, בעתיד תוכלו להוסיף עוד קלאס OPER נוסף ובו לתת גישה לעוד אדם. כמובן, בגישות שאתם תבחרו. לדוגמא, אתם יכולים לאפשר לו גישה לפקודות ניהול מסויימות ולבטל לו לפקודות אחרות. המשתמש שאנו ניתן לעצמינו כעת יהיה בעל גישת NETADMIN (ראו: Flags בקלאס) שהיא גישת "על" לניהול השרת. זאת הגישה הגבוהה ביותר בUnrealIRCd.
אני מצפה מכם כבר להבין למה עשיתי את הקלאס כזה:
oper ZxoR {
   class           clients;
   from {
      userhost *@*;
   };
   password "secretpassword";
   flags
   {
      netadmin;
      can_zline;
      can_gzline;
      can_gkline;
      global;
   };
};

שימו לב לשדה USERHOST! - יש לרשום בו *@*, כשתתקדמו תוכלו לכוון אותו על המחשב שלכם בלבד לצורכי אבטחה, כעת לא נתעסק אתו.

נרד עוד קצת למטה ונראה את השורה הבאה:
listen         *:6667;

בשורה זו אנו קובעים באיזה פורט השרת שלנו יפעל. ברירת המחדל היא 6667 ואני ממליץ להשאיר את זה כך.

הבלוק הבא הוא ULines:
ulines {
   services.roxnet.org;
   stats.roxnet.org;
};

U-Line הוא אפשרות להגדרת "אקסטרה גישות" לשרת מסויים. לדוגמא, אנו רוצים לחבר סרוויסים (Services) לשרת שלנו, ואנו לא רוצים שהם יהיו כפופים לחוקי ההצפה בשרת. במדריך זה לא נרים סרוויסים, אך כבר נקבע להם U-Line על מנת לאפשר חיבור עתידי. וכך זה יראה:
ulines {
   services.MyNet.co.il;
   stats.MyNet.co.il;
};


קדימה, אל הבלוק הבא - DrPass:
drpass {
   restart "I-love-to-restart";
   die "die-you-stupid";
};

בבלוק זה נקבע סיסמאות מיוחדות וסופר סודיות שדרכן ניתן להפיל את השרת או להפעילו מחדש מרחוק. את הסיסמאות האלה כמובן נשמור בלב:
drpass {
   restart "IWantToRestartTheIRCNetwork";
   die "DieMotherFucker!ButThisIsSecretPassword";
};


נדלג המון קדימה, כי החלק המעניין מגיע - ההגדרות של השרת עצמו, בלוק הSET הראשון:
set {
   network-name       "ROXnet";
   default-server       "irc.roxnet.org";
   services-server    "services.roxnet.org";
   stats-server       "stats.roxnet.org";
   help-channel       "#ROXnet";
   hiddenhost-prefix   "rox";
   /* prefix-quit       "no"; */
   /* Cloak keys should be the same at all servers on the network.
    * They are used for generating masked hosts and should be kept secret.
    * The keys should be 3 random strings of 5-100 characters
    * (10-20 chars is just fine) and must consist of lowcase (a-z),
    * upcase (A-Z) and digits (0-9) [see first key example].
    * HINT: On *NIX, you can run './unreal gencloak' in your shell to let
    *       Unreal generate 3 random strings for you.
    */
   cloak-keys {
      "aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
      "ASd9a8s7d98a7sd987asd9A7a6sd";
      "As76a8sd687ASd87a8s7da8s7d6a";
   };
   /* on-oper host */
   hosts {
      local      "locop.roxnet.org";
      global      "ircop.roxnet.org";
      coadmin      "coadmin.roxnet.org";
      admin      "admin.roxnet.org";
      servicesadmin    "csops.roxnet.org";
      netadmin    "netadmin.roxnet.org";
      host-on-oper-up "no";
   };
};

אני בטוח שבשלב זה של המדריך תצליחו להבין למה שיניתי הכל למצב הזה:
set {
   network-name       "MyNet";
   default-server       "irc.MyNet.co.il";
   services-server    "services.MyNet.co.il";
   stats-server       "stats.MyNet.co.il";
   help-channel       "#Help";
   hiddenhost-prefix   "hidden";
   /* prefix-quit       "no"; */
   /* Cloak keys should be the same at all servers on the network.
    * They are used for generating masked hosts and should be kept secret.
    * The keys should be 3 random strings of 5-100 characters
    * (10-20 chars is just fine) and must consist of lowcase (a-z),
    * upcase (A-Z) and digits (0-9) [see first key example].
    * HINT: On *NIX, you can run './unreal gencloak' in your shell to let
    *       Unreal generate 3 random strings for you.
    */
   cloak-keys {
      "aoAr1HnR6xl3sJ7hVz4Zb7x4YwpW";
      "ASd9a8s7ds8a7sd987asd9A7a6sd";
      "As76a8sd680ASd87a8s7da8s7d6a";
   };
   /* on-oper host */
   hosts {
      local      "locop.MyNet.co.il";
      global      "ircop.MyNet.co.il";
      coadmin      "coadmin.MyNet.co.il";
      admin      "admin.MyNet.co.il";
      servicesadmin    "csops.MyNet.co.il";
      netadmin    "netadmin.MyNet.co.il";
      host-on-oper-up "yes";
   };
};

בקשר לאיזור cloak-keys, זהו איזור שאתם צריכים להמציא בעצמכם. כאשר משתמש נכנס לשרת ושם על עצמו את המוד +x הוא בעצם מסתיר את האייפי שלו ממשתמשים אחרים. האייפי מוצפן באמצעות הצפנה מיוחדת שמשתמשת בcloak-keys שתרשמו. לכן, אם מישהו ידע את הcloak-keys שלכם הוא יוכל "לפענח" מה האייפי שעומד מאחורי ההוסט המוסתר. תשנו את השדה הזה ואל תגלו אותו לאף אחד.

הלאה, בלוק הSET השני והאחרון:
set {
   kline-address "set@this.com";
   modes-on-connect "+ixw";
   modes-on-oper    "+xwgs";
   oper-auto-join "#opers";
   options {
      hide-ulines;
      /* You can enable ident checking here if you want */
      /* identd-check; */
      show-connect-info;
   };

   maxchannelsperuser 10;
   /* The minimum time a user must be connected before being allowed to use a QUIT message,
    * This will hopefully help stop spam */
   anti-spam-quit-message-time 10s;
   /* Make the message in static-quit show in all quits - meaning no
           custom quits are allowed on local server */
   /* static-quit "Client quit";   */

   /* You can also block all part reasons by uncommenting this and say 'yes',
    * or specify some other text (eg: "Bye bye!") to always use as a comment.. */
   /* static-part yes; */

   /* This allows you to make certain stats oper only, use * for all stats,
    * leave it out to allow users to see all stats. Type '/stats' for a full list.
    * Some admins might want to remove the 'kGs' to allow normal users to list
    * klines, glines and shuns.
    */
   oper-only-stats "okfGsMRUEelLCXzdD";

   /* Throttling: this example sets a limit of 3 connection attempts per 60s (per host). */
   throttle {
      connections 3;
      period 60s;
   };

   /* Anti flood protection */
   anti-flood {
      nick-flood 3:60;   /* 3 nickchanges per 60 seconds (the default) */
   };

   /* Spam filter */
   spamfilter {
      ban-time 1d; /* default duration of a *line ban set by spamfilter */
      ban-reason "Spam/Advertising"; /* default reason */
      virus-help-channel "#help"; /* channel to use for 'viruschan' action */
      /* except "#help"; channel to exempt from filtering */
   };
};

וגם כאן, אני בטוח שתצליחו להבין למה עשיתי את זה:
set {
   kline-address "klines@MyNet.co.il";
   modes-on-connect "+ixw";
   modes-on-oper    "+xwgs";
   oper-auto-join "#opers";
   options {
      hide-ulines;
      /* You can enable ident checking here if you want */
      /* identd-check; */
      show-connect-info;
   };

   maxchannelsperuser 30;
   /* The minimum time a user must be connected before being allowed to use a QUIT message,
    * This will hopefully help stop spam */
   anti-spam-quit-message-time 10s;
   /* Make the message in static-quit show in all quits - meaning no
           custom quits are allowed on local server */
   /* static-quit "Client quit";   */

   /* You can also block all part reasons by uncommenting this and say 'yes',
    * or specify some other text (eg: "Bye bye!") to always use as a comment.. */
   /* static-part yes; */

   /* This allows you to make certain stats oper only, use * for all stats,
    * leave it out to allow users to see all stats. Type '/stats' for a full list.
    * Some admins might want to remove the 'kGs' to allow normal users to list
    * klines, glines and shuns.
    */
   oper-only-stats "okfGsMRUEelLCXzdD";

   /* Throttling: this example sets a limit of 3 connection attempts per 60s (per host). */
   throttle {
      connections 3;
      period 60s;
   };

   /* Anti flood protection */
   anti-flood {
      nick-flood 3:60;   /* 3 nickchanges per 60 seconds (the default) */
   };

   /* Spam filter */
   spamfilter {
      ban-time 1d; /* default duration of a *line ban set by spamfilter */
      ban-reason "Spam/Advertising"; /* default reason */
      virus-help-channel "#help"; /* channel to use for 'viruschan' action */
      /* except "#help"; channel to exempt from filtering */
   };
};


והרי לכם, הקוד המלא:
/*
 * example.conf by Daniel Hawton AKA Osiris (osiris@unrealircd.org).
 * $Id$
 *
 * Works for Unreal3.2 and up
 *
 * Okay guys.  This is the new example.conf. Its look is much like C++, kinda.
 * Anyway it is time to go over this.  It's hard to pick up at first, but
 * with some pratice and reading you'll understand.
 *
 * Just copy this file to your main unrealircd dir and call it 'unrealircd.conf'.
 *
 * NOTE:  All lines, except the opening { line, end in ans ;, including the
 * closing } line. The IRCd will ignore commented lines.
 *
 * PLEASE READ doc/unreal32docs.html! The online version is also available at:
 * www.vulnscan.org/UnrealIRCd/unreal32docs.html
 * It contains a lot information about the configfile: gives information about
 * every block, variable, etc..
 * If you try to edit this file without reading the documentation properly
 * then you are pretty much guaranteed to fail!
 */

/* Type of comments */
#Comment type 1 (Shell type)
// Comment type 2(C++ style)
/* Comment type 3 (C Style) */
#those lines are ignored by the ircd.

/*
 * UnrealIRCd supports modules, loading some of them is required.
 * You need at least the commands module and a cloaking module.
 */

/* FOR *NIX, uncomment the following 2lines: */
//loadmodule "src/modules/commands.so";
//loadmodule "src/modules/cloak.so";

/* FOR Windows, uncomment the following 2 lines: */
//loadmodule "modules/commands.dll";
//loadmodule "modules/cloak.dll";

/*
 * You can also include other configuration files.
 * help.conf contains all the /helpop text. The badwords.*.conf
 * files contain all the badword entries for mode +G...
 * spamfilter.conf contains some good rules for current trojans.
 * You probably want to include them:
 */
include "help.conf";
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "spamfilter.conf";

/*
 * NEW: me {}
 * OLD: M:Line
 * me {} defines the name, description and unreal server numeric for
 * this server. Syntax is as follows:
 * me {
 *  name "server.name";
 *  info "Server Description";
 *  numeric (server numeric*);
 * };
 * If linking, this numeric may not be used by any other server on the network.
 */
me
{
   name "irc.MyNet.co.il";
   info "ZxoR's Private IRC Server";
   numeric 1;
};

/*
 * NEW: admin {}
 * OLD: A:Line
 * Admin gives information on the server admin. you
 * may put as many lines under admin { as you wish.
 * Syntax is as follows:
 * admin {
 *   "first line";
 *   "second line";
 *   [etc]
 * };
 */
admin {
   "Admin: ZxoR.";
   "Contact me: ZxoR@MyNet.co.il";
};

/*
 * NEW: class {}
 * OLD: Y:line (old was confusing)
 * These define settings for classes. A class is a group setting for
 * connections. Example, server connections, instead of going to a client's
 * class, you direct it to the server class. Syntax is as follows
 * class (class name)
 * {
 *     pingfreq (how often to ping a user/server in seconds);
 *     maxclients (how many connections for this class);
 *     sendq (maximum send queue from a connection);
 *     recvq (maximum receive queue from a connection [flood control]);
 *  };
 */

class           clients
{
   pingfreq 90;
   maxclients 500;
   sendq 100000;
   recvq 8000;
};

class           servers
{
   pingfreq 90;
   maxclients 10;      /* Max servers we can have linked at a time */
   sendq 1000000;
   connfreq 100; /* How many seconds between each connection attempt */
};

/*
 * NEW: allow {}
 * OLD: I:Line
 * This defines allowing of connections...
 * Basically for clients, it allows them to connect so you can have some
 * control and/or set a password.
 * Syntax is as follows:
 * allow {
 *    ip (ip mask to allow);
 *    hostname (host mask);
 *    class (class to send them to [see class {}]);
 *    password "(password)"; (optional)
 *    maxperip (how many connections per ip); (optional)
 * };
 */

allow {
   ip             *@*;
   hostname       *@*;
   class           clients;
   maxperip 3;
};

/* Passworded allow line */
allow {
   ip             *@255.255.255.255;
   hostname       *@*.passworded.ugly.people;
   class           clients;
   password "f00Ness";
   maxperip 1;
};

/*
 * NEW: allow channel {}
 * OLD: chrestrict
 * Allows a user to join a channel...
 * like an except from deny channel.
 * Syntax:
 * allow channel {
 *   channel "channel name";
 *   class "clients"; (optional)
 * };
 */
allow channel {
   channel "#WarezSucks";
   class "clients";
};

/*
 * NEW: oper {}
 * OLD: O:Line
 * Defines an IRC Operator
 * IRC operators are there to keep sanity to the server and usually keep it
 * maintained and connected to the network.
 * The syntax is as follows:
 * oper (login) {
 *     class (class to put them in, if different from I, moves them to new
 *                class);
 *     from {
 *        userhost (ident@host);
 *        userhost (ident@host);
 *     };
 *     flags
 *     {
 *       (flags here*);
 *     };
 *     OR
 *     flags "old type flags, like OAaRD";
 * };
 */


/* For a list of oper flags, see doc/unreal32docs.html#operblock
 * [HIGHLY recommended to read]
 */

oper ZxoR {
   class           clients;
   from {
      userhost *@*;
   };
   password "secretpassword";
   flags
   {
      netadmin;
      can_zline;
      can_gzline;
      can_gkline;
      global;
   };
};

/*
 * NEW: listen {}
 * OLD: P:Line
 * This defines a port for the ircd to bind to, to
 * allow users/servers to connect to the server.
 * Syntax is as follows:
 * listen (ip number):(port number)
 * {
 *   options {
 *     (options here);
 *   };
 * };
 * or for a plain
 * listen: listen (ip):(port);
 *
 * NOTICE: for ipv6 ips (3ffe:b80:2:51d::2 etc), use listen [ip]:port;
 *
 * That works also.
 */

/* Options for listen:
   OLD   |    NEW
   S      serversonly
   C      clientsonly
   J      java
   s      ssl
   *      standard
*/

/* NOTE ON SSL PORTS: SSL ports are pretty non-standardized,
 * besides numerous high-SSL ports, some people say you should run
 * it at 994 because that's the official SSL port.. but that
 * requires root! Besides, port 194 is the official irc port and
 * have you ever seen an ircd running on that?
 * So, our suggestion is to use port 6697 for SSL, this is used by
 * quite some networks and is recognized by for example StunTour.
 * You are free to open up as many SSL ports as you want, but
 * by (also) using 6697 you help the world standardize a bit ;).
 */
listen         *:6667;

/* NOTE: If you are on an IRCd shell with multiple IP's you are
 *       likely to get 'Address already in use' errors in your log
 *       and the ircd won't start. This means you MUST bind
 *       to a specific IP instead of '*', so for example:
 *       listen 1.2.3.4:6667;
 *       Obviously, replace the IP with the IP that was assigned to you.
 */

/*
 * NEW: link {}
 * OLD: C/N:Lines
 * This defines an okay for a server connection.
 * NOTE: BOTH SERVERS NEED A LINK {} SETTING TO CONNECT PROPERLY!
 * Syntax is as follows:
 * link (server name)
 * {
 *   username   (username, * works too);
 *    hostname   (ip number/hostmask);
 *   bind-ip      (What IP to bind to when connecting, or *);
 *   port      (port to connect to, if any);
 *   hub (If this is a hub, * works, or servermasks it may bring in);
 *   [or leaf *;]
 *   password-connect "(pass to send)";
 *   password-receive "(pass we should receive)";
 *   class      (class to direct servers into);
 *   options {
 *      (options here*);
 *   };
 *      // If we use SSL, we can choose what cipher to use in SSL mode
 *      // Retrieve a list by "openssl ciphers", separate ciphers with :'s
 *     
 *      ciphers "DES-CBC3-MD5";
 *
 * };
*/

/*
   options:
   OLD   |   NEW
   S      ssl
   Z      zip
   N/A      autoconnect
   N/A      quarantine
   N/A      nodnscache
*/

/*
 *
 * NEW: ulines {}
 * OLD: U:Line
 * U-lines give servers more power/commands, this should ONLY be set
 * for services/stats servers and NEVER for normal UnrealIRCd servers!
 * Syntax is as follows:
 * ulines {
 *   (server to uline);
 *   (server to uline);
 *  [etc]
 * };
*/
ulines {
   services.MyNet.co.il;
   stats.MyNet.co.il;
};

/*
 * NEW: drpass {}
 * OLD: X:Line
 * This defines the passwords for /die and /restart.
 * Syntax is as follows:
 * drpass {
 *  restart      "(password for restarting)";
 *  die              "(password for die)";
 * };
 */
drpass {
   restart "IWantToRestartTheIRCNetwork";
   die "DieMotherFucker!ButThisIsSecretPassword";
};

/*
 * NEW: log {} OLD: N/A Tells the ircd where and what to log(s). You can have
 * as many as you wish.
 *
 * FLAGS: errors, kills, tkl, connects, server-connects, oper
 *
 * Syntax:
 * log "log file"
 * {
 *    flags
 *    {
 *        flag;
 *        flag;
 *        etc..
 *    };
 * };
 */

log "ircd.log" {
   /* Delete the log file and start a new one when it reaches 2MB, leave this out to always use the
      same log */
   maxsize 2097152;
   flags {
      oper;
      connects;
      server-connects;
      kills;
      errors;
      sadmin-commands;
      chg-commands;
      oper-override;
      spamfilter;
   };
};

/*
 * NEW: alias {}
 * OLD: N/A
 * This allows you to set command aliases such as /nickserv, /chanserv etc
 * FLAGS: services, stats, normal
 *
 * Syntax:
 * alias "name" {
 *   target "points to";
 *   type aliastype;
 * };
 *
 * [NOTE: You could also include a pre-defined alias file here, see doc/unreal32docs.html section 2.9]
 */

// This points the command /nickserv to the user NickServ who is connected to the set::services-server server
/*alias NickServ {
   target "NickServ";
   type services;
};*/

// If you want the command to point to the same nick as the command, you can leave the nick entry out
//alias ChanServ { type services; };

// Points the /statserv command to the user StatServ on the set::stats-server server
//alias StatServ { type stats; };

// Points the /superbot command to the user SuperBot
//alias SuperBot { type normal; };


/* Standard aliases */
alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
alias StatServ { type stats; };

/*
 * NEW: alias {}
 * OLD: N/A
 * This allows you to set command aliases such as /identify, /services, etc
 *
 * Syntax:
 * alias "name" {
 *   format "format string" {
 *      target "points to";
 *              type aliastype;
 *      parameters "parameters to send";
 *   };
 *   type command;
 * };
 */
/* This is shown seperately because even though it has teh same name as the previous directive, it is very
 * different in syntax, although it provides a similar function and relys on the standard aliases to work.
 */
/*
alias "identify" {
   format "^#" {
      target "chanserv";
      type services;
      parameters "IDENTIFY %1-";
   };
   format "^[^#]" {
      target "nickserv";
      type services;
      parameters "IDENTIFY %1-";
   };
   type command;
};
*/
/* The alias::format directive is a regular expression. The first format matches the /identify command when
 * the first character is a #. It then passes this along to the chanserv alias with the parameters IDENTIFY
 * %1-. The second format matches then /identify command when the first character is not a #. It then
 * passes the command to the nickserv alias with parameters IDENTIFY %1-.
 */

/* The alias::format::parameters is similar to scripting languages. %N (where N is a number) represents a
 * parameter sent to the command (in this case /identify). If you specify %N- it means all parameters from
 * N until the last parameter in the string. You may also specify %n which is replaced by
 * the user's nickname.
*/

/* Standard aliases */
alias "services" {
   format "^#" {
      target "chanserv";
      type services;
      parameters "%1-";
   };
   format "^[^#]" {
      target "nickserv";
      type services;
      parameters "%1-";
   };
   type command;
};

alias "identify" {
   format "^#" {
      target "chanserv";
      type services;
      parameters "IDENTIFY %1-";
   };
   format "^[^#]" {
      target "nickserv";
      type services;
      parameters "IDENTIFY %1-";
   };
   type command;
};

/* This is an example of a real command alias */
/* This maps /GLINEBOT to /GLINE <parameter> 2d etc... */
alias "glinebot" {
   format ".+" {
      command "gline";
      type real;
      parameters "%1 2d Bots are not allowed on this server, please read the faq at http://www.example.com/faq/123";
   };
   type command;
};

/*
 * NEW: files {}
 * OLD: include/config.h
 *
 * This block overrides the IRCd's default paths for loading things
 * like the MOTD, saving its PID, or writing/loading its tunefile. The
 * existence of this block allows one UnrealIRCd installation to
 * support multiple running instances when combined with the -c
 * commandline option.
 *
 * As usual, relative paths are interpreted relative to the directory
 * where UnrealIRCd would find unrealircd.conf if -c is _not_
 * specified on the commandline.
 */
files
{
   /* The Message Of The Day shown to users who log in: */
   /* motd ircd.motd; */

   /*
    * A short MOTD. If this file exists, it will be displayed to
    * the user in place of the MOTD. Users can still view the
    * full MOTD by using the /MOTD command.
    */
   /* shortmotd ircd.smotd; */

   /* Shown when an operator /OPERs up */
   /* opermotd oper.motd; */

   /* Services MOTD append. */
   /* svsmotd ircd.svsmotd; */

   /* Bot MOTD */
   /* botmotd bot.motd; */

   /* Shown upon /RULES */
   /* rules ircd.rules; */

   /*
    * Where the IRCd stores and loads a few values which should
    * be persistent across server restarts. Must point to an
    * existing file which the IRCd has permission to alter or to
    * a file in a folder within which the IRCd may create files.
    */
   /* tunefile ircd.tune; */

   /* Where to save the IRCd's pid. Should be writable by the IRCd. */
   /* pidfile ircd.pid; */
};

/*
 * NEW: tld {}
 * OLD: T:Line
 * This sets a different motd and rules files
 * depending on the clients hostmask.
 * Syntax is as follows:
 * tld {
 *    mask (ident@host);
 *    motd "(motd file)";
 *    rules "(rules file)";
 * };
 */

/* note: you can just delete the example block above,
 * in which case the defaults motd/rules files (ircd.motd, ircd.rules)
 * will be used for everyone.
 */

/*
 * NEW: ban nick {}
 * OLD: Q:Line
 * Bans a nickname, so it can't be used.
 * Syntax is as follows:
 * ban nick {
 *   mask "(nick to ban)";
 *   reason "(reason)";
 * };
*/
ban nick {
   mask "*C*h*a*n*S*e*r*v*";
   reason "Reserved for Services";
};
/*
 * NEW: ban ip {}
 * OLD: Z:Line
 * Bans an ip from connecting to the network.
 * Syntax:
 * ban ip { mask (ip number/hostmask); reason "(reason)"; };
*/
ban ip {
   mask 195.86.232.81;
   reason "Delinked server";
};
/*
 * NEW: ban server {}
 * OLD: Server Q:Line
 * Disables a server from connecting to the network.
 * if the server links to a remote server, local server
 * will disconnect from the network.
 * Syntax is as follows:
 * ban server {
 *   mask "(server name)";
 *   reason "(reason to give)";
 * };
*/

ban server {
   mask eris.berkeley.edu;
   reason "Get out of here.";
};
/*
 * NEW: ban user {}
 * OLD: K:Line
 * This makes it so a user from a certain mask can't connect
 * to your server.
 * Syntax:
 * ban user { mask (hostmask/ip number); reason "(reason)"; };
*/

ban user {
   mask *tirc@*.saturn.bbn.com;
        reason "Idiot";
};

/*
 * NEW: ban realname {}
 * OLD: n:Line
 * This bans a certain realname from being used.
 * Syntax:
 * ban realname {
 *   mask "(real name)";
 *    reason "(reason)";
 * };
*/

ban realname {
   mask "Swat Team";
   reason "mIRKFORCE";
};

ban realname {
   mask "sub7server";
   reason "sub7";
};

/*
 * NOTE FOR ALL BANS, they may be repeated for addition entries!
 *
 * NEW: except ban {}
 * OLD: E:Line
 * This makes it so you can't get banned.
 * Syntax:
 * except ban { mask (ident@host); };
 * Repeat the except ban {} as many times
 * as you want for different hosts.
 */

except ban {
   /* don't ban stskeeps */
   mask           *stskeeps@212.*;
};

/*
 * NEW: deny dcc {}
 * OLD: dccdeny.conf
 * Use this to block dcc send's... stops
 * viruses better.
 * Syntax:
 * deny dcc
 * {
 *   filename "file to block (ie, *exe)";
 *   reason "reason";
 * };
 */
deny dcc {
   filename "*sub7*";
   reason "Possible Sub7 Virus";
};

/*
 * NEW: deny channel {}
 * OLD: N/A (NEW)
 * This blocks channels from being joined.
 * Syntax:
 * deny channel {
 *    channel "(channel)";
 *    reason "reason";
 *      class "clients"; (optional)
 * };
*/
deny channel {
   channel "*warez*";
   reason "Warez is illegal";
   class "clients";
};

/*
 * NEW: vhost {}
 * OLD: Vhost.conf file
 * This sets a fake ip for non-opers, or
 * opers too lazy to /sethost :P
 * Syntax: 
 *   vhost {
 *       vhost (vhost.com);
 *       from {
 *            userhost (ident@host to allow to use it);
 *       };
 *       login (login name);
 *       password (password);
 *   };
 *        then to use this vhost, do /vhost (login) (password) in IRC
 */
vhost {
   vhost           i.hate.microsefrs.com;
   from {
      userhost       *@*.image.dk;
   };
   login           stskeeps;
   password        moocowsrulemyworld;
};

/* You can include other configuration files */
/* include "klines.conf"; */

/* Network configuration */
set {
   network-name       "MyNet";
   default-server       "irc.MyNet.co.il";
   services-server    "services.MyNet.co.il";
   stats-server       "stats.MyNet.co.il";
   help-channel       "#Help";
   hiddenhost-prefix   "hidden";
   /* prefix-quit       "no"; */
   /* Cloak keys should be the same at all servers on the network.
    * They are used for generating masked hosts and should be kept secret.
    * The keys should be 3 random strings of 5-100 characters
    * (10-20 chars is just fine) and must consist of lowcase (a-z),
    * upcase (A-Z) and digits (0-9) [see first key example].
    * HINT: On *NIX, you can run './unreal gencloak' in your shell to let
    *       Unreal generate 3 random strings for you.
    */
   cloak-keys {
      "aoAr1HnR6xl3sJ7hVz4Zb7x4YwpW";
      "ASd9a8s7ds8a7sd987asd9A7a6sd";
      "As76a8sd680ASd87a8s7da8s7d6a";
   };
   /* on-oper host */
   hosts {
      local      "locop.MyNet.co.il";
      global      "ircop.MyNet.co.il";
      coadmin      "coadmin.MyNet.co.il";
      admin      "admin.MyNet.co.il";
      servicesadmin    "csops.MyNet.co.il";
      netadmin    "netadmin.MyNet.co.il";
      host-on-oper-up "yes";
   };
};

/* Server specific configuration */

set {
   kline-address "klines@MyNet.co.il";
   modes-on-connect "+ixw";
   modes-on-oper    "+xwgs";
   oper-auto-join "#opers";
   options {
      hide-ulines;
      /* You can enable ident checking here if you want */
      /* identd-check; */
      show-connect-info;
   };

   maxchannelsperuser 30;
   /* The minimum time a user must be connected before being allowed to use a QUIT message,
    * This will hopefully help stop spam */
   anti-spam-quit-message-time 10s;
   /* Make the message in static-quit show in all quits - meaning no
           custom quits are allowed on local server */
   /* static-quit "Client quit";   */

   /* You can also block all part reasons by uncommenting this and say 'yes',
    * or specify some other text (eg: "Bye bye!") to always use as a comment.. */
   /* static-part yes; */

   /* This allows you to make certain stats oper only, use * for all stats,
    * leave it out to allow users to see all stats. Type '/stats' for a full list.
    * Some admins might want to remove the 'kGs' to allow normal users to list
    * klines, glines and shuns.
    */
   oper-only-stats "okfGsMRUEelLCXzdD";

   /* Throttling: this example sets a limit of 3 connection attempts per 60s (per host). */
   throttle {
      connections 3;
      period 60s;
   };

   /* Anti flood protection */
   anti-flood {
      nick-flood 3:60;   /* 3 nickchanges per 60 seconds (the default) */
   };

   /* Spam filter */
   spamfilter {
      ban-time 1d; /* default duration of a *line ban set by spamfilter */
      ban-reason "Spam/Advertising"; /* default reason */
      virus-help-channel "#help"; /* channel to use for 'viruschan' action */
      /* except "#help"; channel to exempt from filtering */
   };
};

/*
 * Problems or need more help?
 * 1) www.vulnscan.org/UnrealIRCd/unreal32docs.html
 * 2) www.vulnscan.org/UnrealIRCd/faq/ <- contains 80% of your questions!
 * 3) If you still have problems you can go irc.unrealircd.org #unreal-support,
 *    note that we require you to READ THE DOCUMENTATION and FAQ first!
 */


חלק 3 - הרצה
על מנת להריץ את השרת נשתמש בפקודה:
./unreal start

במידה ויש שגיאות בקונפיג, הוא יציג לכם אותן עכשיו לדוגמא:
[error] unrealircd.conf:789: set::kline-address must be an e-mail or an URL

שימו לב שהוא מראה לכם באיזה קובץ השגיאה (unrealircd.conf), באיזה שורה השגיאה (789) ומה השגיאה עצמה. תקראו את השגיאה ותצליחו להבין גם איך לסדר אותה, זה פשוט. במידה והכל רץ הוא יגיד לכם שההרצה עברה בהצלחה ושהשרת רץ ואפשר להתחבר אליו!

כדי להתחבר אליו, נלך אל הmIRC שלנו ונשתמש בפקודה:
/SERVER serverIP:6667

והנה אנחנו בפנים:
[12:12:13] * Connecting to serverIP (6667)
-
[12:12:13] -irc.MyNet.co.il- *** Looking up your hostname...
-
[12:12:13] -irc.MyNet.co.il- *** Found your hostname
-
Welcome to the MyNet IRC Network ZxoR!ZxoR@localhost
Your host is irc.MyNet.co.il, running version Unreal3.2.10.4
This server was created Sat Jul 26 17:38:19 2014
irc.MyNet.co.il Unreal3.2.10.4 iowghraAsORTVSxNCWqBzvdHtGpI lvhopsmntikrRcaqOALQbSeIKVfMCuzNTGjZ
UHNAMES NAMESX SAFELIST HCN MAXCHANNELS=30 CHANLIMIT=#:30 MAXLIST=b:60,e:60,I:60 NICKLEN=30 CHANNELLEN=32 TOPICLEN=307 KICKLEN=307 AWAYLEN=307 MAXTARGETS=20 are supported by this server
WALLCHOPS WATCH=128 WATCHOPTS=A SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=beI,kfL,lj,psmntirRcOAQKVCuzNSMTGZ NETWORK=MyNet CASEMAPPING=ascii EXTBAN=~,qjncrRa ELIST=MNUCT STATUSMSG=~&@%+ are supported by this server
EXCEPTS INVEX CMDS=KNOCK,MAP,DCCALLOW,USERIP,STARTTLS are supported by this server
-
There are 1 users and 0 invisible on 1 servers
I have 1 clients and 0 servers
-
Current local users: 1 Max: 44
Current global users: 1 Max: 1
-
MOTD File is missing
-
[12:12:14] * ZxoR sets mode: +iwx
-
[12:12:14] Local host: unknown (unknown)
-


שיהיה בהצלחה, יונתן :)
שימו לב: בוטי המשחק שאני בונה לא מתאימים לQuakenet אלא אם כן צויין אחרת.
<+vendetta-> סיאג לחוכמה שתיקה
<+vendetta--> בא לי מוח
<Ninja`> דפקתי נקנקיה

חזור אל פיתוח שרתים

cron