Anope IRC Services

Anope Support => 2.0.x/1.9.x Support => Topic started by: Craig Fairhurst on November 09, 2014, 10:29:10 PM

Title: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 09, 2014, 10:29:10 PM
Hi guys

This was posted in another thread but I decided to give it its own thread. Here's my error:
Code: [Select]
$ ./bin/services
Anope 2.0.1, build #3, compiled 15:59:29 Nov  9 2014
Using configuration file conf/services.conf
Attempting to connect to uplink #1 127.0.0.1 (127.0.0.1), port 7000
Successfully connected to uplink #1 127.0.0.1:7000
ERROR: Link denied (No matching link configuration) [@127.0.0.1.45212]
ERROR: Closing Link: [127.0.0.1] (Link denied (No matching link configuration))

Here's my services.conf protocol module excerpt:
Code: [Select]
/*
 * [REQUIRED] Protocol module
 *
 * This directive tells Anope which IRCd Protocol to speak when connecting.
 * You MUST modify this to match the IRCd you run.
 *
 * Supported:
 *  - bahamut
 *  - charybdis
 *  - hybrid
 *  - inspircd12
 *  - inspircd20
 *  - ngircd
 *  - plexus
 *  - ratbox
 *  - unreal
 */
module
{
        name = "unreal"

        /*
         * Some protocol modules can enforce mode locks server-side. This reduces the spam caused by
         * services immediately reversing mode changes for locked modes.
         *
         * If the protocol module you have loaded does not support this, this setting will have no effect.
         */
        use_server_side_mlock = yes

        /*
         * Some protocol modules can enforce topic locks server-side. This reduces the spam caused by
         * services immediately reversing topic changes.
         *
         * If the protocol module you have loaded does not support this, this setting will have no effect.
         */
        use_server_side_topiclock = yes
}

I can't seem to find a better example to the one above.

Kind regards
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Adam on November 09, 2014, 10:36:00 PM
You need to configure a link block in unrealircd.conf.
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 09, 2014, 10:37:49 PM
Here's my link block in unrelairecd.conf:
Code: [Select]
#This is the services link block

link            services.glx-alliance.com
{
        username        *;
        hostname        127.0.0.1;
        bind-ip         *;
        port            7000;
        hub             *;
        password-connect "test";
        password-receive "test";
        class           default;
};
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Adam on November 09, 2014, 10:45:52 PM
Is the server name really correct? Is it uncommented? Port correct? etc. Would need to see more of services.conf and unrealircd.conf.
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 09, 2014, 10:53:01 PM
Here's my unrealircd.conf:
Code: [Select]
#Example UnrealIRCd 3.2.8.1 configuration file
#Written by Mp5shooter for the SwiftIRC Wiki
#http://wiki.SwiftIRC.net/

/* If your server is running Linux, remove the two slashes in front of both of the following lines. */
loadmodule "src/modules/commands.so";
loadmodule "src/modules/cloak.so";

/* If your server is running Windows, remove the two slashes in front of both of the following lines. */
//loadmodule "modules/commands.dll";
//loadmodule "modules/cloak.dll";

#This is the me {} block
me {
name "irc.glx-alliance.com";
info "GLX Alliance Server";
numeric 1;
};

#This is the admin {} block
admin {
"Tech High Command";
"contact@glx-alliance.com";
};

#This is the oper {} block
oper macen {
class default;
from {
userhost *@*btcentralplus.com;
};
password "test";
flags
{
netadmin;
can_zline;
can_gzline;
can_gkline;
global;
};
};

#This is the services link block

link            services.glx-alliance.com
{
  username *;
hostname 127.0.0.1;
bind-ip *;
port 7000;
hub             *;
password-connect "akQfafekjAEFS3def4";
password-receive "akQfafekjAEFS3def4";
class           default;
};


#This is the ulines block
ulines {
services.glx-alliance.com;
};

#START OF BAN BLOCKS
ban nick {
mask "*C*h*a*n*S*e*r*v*";
reason "Reserved for Services";
};
ban nick {
mask "P";
reason "Conflicts with NetGamers services nickname";
};
#END OF BAN BLOCKS


#This is the vHost block
vhost {
vhost           super.cool.irc.dude;
from {
userhost       *@*;
};
login           YourName;
password        LovingTheKwlHost;
};

#This is the network settings block
set {
network-name "GLX Alliance";
default-server "irc.glx-alliance.com";
services-server "services.glx-alliance.com";
stats-server "stats.glx-alliance.com";
help-channel "#help";
auto-join "#public";
hiddenhost-prefix "GLX";
cloak-keys {
"KIuoeASlop39skS32NSDL309subnsA";
"Jk93uKLs8ajuSdd1Nfel39wLKHd3ws";
"Iehnludhsss32sKLBDHef39ekHBD44";
};
hosts {
local "locop.glx-alliance.com";
global "ircop.glx-alliance.com";
coadmin "coadmin.glx-alliance.com";
admin "admin.glx-alliance.com";
servicesadmin "csops.glx-alliance.com";
netadmin "netadmin.glx-alliance.com";
host-on-oper-up "no";
};
};

#This is the server settings block
set {
kline-address "contact@glx-alliance.com";
modes-on-connect "+ix";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
options {
show-connect-info;
};
maxchannelsperuser 30;
anti-spam-quit-message-time 10s;
oper-only-stats "okfGsMRUEelLCXzdD";
throttle {
connections 3;
period 60s;
};
anti-flood {
nick-flood 3:60;
};
spamfilter {
ban-time 1d;
ban-reason "Spam/Advertising";
virus-help-channel "#help";
};
};

#Do not edit anything below this line, unless you know what you are doing

include "help.conf";
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "spamfilter.conf";

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

class           servers
{
pingfreq 90;
maxclients 10;
sendq 1000000;
connfreq 100;
};

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

listen         *:7000;

listen         *:8067;
listen         *:6667
{
        options
        {
                clientsonly;
        };
};
;

log "ircd.log" {
maxsize 2097152;
flags {
oper;
kline;
connects;
server-connects;
kills;
errors;
sadmin-commands;
chg-commands;
oper-override;
spamfilter;
};
};

alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
include "aliases/anope.conf";
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 09, 2014, 11:00:07 PM
Here's my services.conf:
Code: [Select]
/*
 * The services.host define is used in multiple different locations throughout the
 * configuration for services clients hostnames.
 */
define
{
name = "services.host"
value = "services.localhost.net"
}


uplink
{
host = "127.0.0.1"

ipv6 = no

ssl = no

port = 7000

password = "akQfafekjAEFS3def4"
}

serverinfo
{

name = "services.localhost.net"


description = "Services for IRC Networks"


#localhost = "nowhere."

#id = "00A"

pid = "data/services.pid"


motd = "conf/services.motd"
}

module
{
name = "unreal"


use_server_side_mlock = yes


use_server_side_topiclock = yes
}

networkinfo
{
networkname = "LocalNet"

nicklen = 31

userlen = 10

hostlen = 64

chanlen = 32

modelistsize = 100

vhost_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-"

allow_undotted_vhosts = false
disallow_start_or_end = ".-"
}
options
{
#user = "anope"
#group = "anope"
casemap = "ascii"
#seed = 9866235

strictpasswords = yes

badpasslimit = 5

badpasstimeout = 1h

updatetimeout = 5m

expiretimeout = 30m

readtimeout = 5s

warningtimeout = 4h

timeoutcheck = 3s
#useprivmsg = yes

#usestrictprivmsg = yes

#hidestatso = yes

#ulineservers = "stats.your.network"

retrywait = 60s

hideprivilegedcommands = yes

hideregisteredcommands = yes

regexengine = "regex/pcre"

languages = "ca_ES.UTF-8 de_DE.UTF-8 el_GR.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 hu_HU.UTF-8 it_IT.UTF-8 nl_NL.UTF-8 pl_PL.UTF-8 pt_PT.UTF-8 ru_RU.UTF-8 tr_TR.UTF-8"

#defaultlanguage = "es_ES.UTF-8"
}

include
{
type = "file"
name = "botserv.example.conf"
}
include
{
type = "file"
name = "chanserv.example.conf"
}
include
{
type = "file"
name = "global.example.conf"
}

include

{
type = "file"
name = "hostserv.example.conf"
}
include
{
type = "file"
name = "memoserv.example.conf"
}

/*
 * [OPTIONAL] NickServ
 *
 * Includes nickserv.example.conf, which is necessary for NickServ functionality.
 *
 * Remove this block to disable NickServ.
 */
include
{
type = "file"
name = "nickserv.example.conf"
}

/*
 * [RECOMMENDED] OperServ
 *
 * Includes operserv.example.conf, which is necessary for OperServ functionality.
 *
 * Remove this block to disable OperServ.
 */
include
{
type = "file"
name = "operserv.example.conf"
}


log
{

target = "services.log"


#target = "services.log #services"

#source = ""

bot = "Global"


logage = 7


admin = "*"
override = "chanserv/* nickserv/* memoserv/set ~botserv/set botserv/*"
commands = "~operserv/* *"
servers = "*"
#channels = "~mode *"
users = "connect disconnect nick"
other = "*"
rawio = no
debug = no
}

log
{
target = "globops"
admin = "global/* operserv/mode operserv/kick operserv/akill operserv/s*line operserv/noop operserv/jupe operserv/oline operserv/set operserv/svsnick operserv/svsjoin operserv/svspart nickserv/getpass */drop"
servers = "squit"
users = "oper"
other = "expire/* bados akill/*"
}
opertype
{
/* The name of this opertype */
name = "Helper"

/* What commands (see above) this opertype has */
commands = "hostserv/*"
}

opertype
{
/* The name of this opertype */
name = "Services Operator"

/* What opertype(s) this inherits from. Seperate with a comma. */
inherits = "Helper, Another Helper"

/* What commands (see above) this opertype may use */
commands = "chanserv/list chanserv/suspend chanserv/topic memoserv/staff nickserv/list nickserv/suspend operserv/mode operserv/chankill operserv/akill operserv/session operserv/modinfo operserv/sqline operserv/oper operserv/kick operserv/ignore operserv/snline"

/* What privs (see above) this opertype has */
privs = "chanserv/auspex chanserv/no-register-limit memoserv/* nickserv/auspex nickserv/confirm"

/*
* Modes to be set on users when they identify to accounts linked to this opertype.
*
* This can be used to automatically oper users who identify for services operator accounts, and is
* useful for setting modes such as Plexus's user mode +N.
*
* Note that some IRCds, such as InspIRCd, do not allow directly setting +o, and this will not work.
*/
#modes = "+o"
}

opertype
{
name = "Services Administrator"

inherits = "Services Operator"

commands = "chanserv/access/list chanserv/drop chanserv/getkey chanserv/saset/noexpire memoserv/sendall nickserv/saset/* nickserv/getemail operserv/news operserv/jupe operserv/svs operserv/stats operserv/oline operserv/noop operserv/forbid global/*"

privs = "*"
}

opertype
{
name = "Services Root"

commands = "*"

privs = "*"
}

/*
 * After defining different types of operators in the above opertype section, we now define who is in these groups
 * through 'oper' blocks, similar to ircd access.
 *
 * The default is to comment these out (so NOBODY will have Services access).
 * You probably want to add yourself and a few other people at minimum.
 *
 * As with all permissions, make sure to only give trustworthy people access to Services.
 */

#oper
{
/* The nickname of this services oper */
#name = "nick1"

/* The opertype this person will have */
type = "Services Root"

/* If set, the user must be an oper on the IRCd to gain their Services
* oper privileges.
*/
require_oper = yes

/* An optional password. If defined the user must login using "/msg OperServ LOGIN" first */
#password = "secret"

/* An optional SSL fingerprint. If defined, it's required to be able to use this opertype. */
#certfp = "ed3383b3f7d74e89433ddaa4a6e5b2d7"

/* An optional list of user@host masks. If defined the user must be connected from one of them */
#host = "*@*.anope.org ident@*"

/* An optional vHost to set on users who identify for this oper block.
* This will override HostServ vHosts, and may not be available on all IRCds
*/
#vhost = "oper.mynet"
}

#oper
{
name = "nick2"
type = "Services Administrator"
}

#oper
{
name = "nick3"
type = "Helper"
}

/*
 * [OPTIONAL] Mail Config
 *
 * This section contains settings related to the use of e-mail from Services.
 * If the usemail directive is set to yes, unless specified otherwise, all other
 * directives are required.
 *
 * NOTE: Users can find the IP of the machine services is running on by examining
 * mail headers. If you do not want your IP known, you should set up a mail relay
 * to strip the relevant headers.
 */
mail
{
/*
* If set, this option enables the mail commands in Services. You may choose
* to disable it if you have no Sendmail-compatible mailer installed. Whilst
* this directive (and entire block) is optional, it is required if
* nickserv:registration is set to yes.
*/
usemail = yes

/*
* This is the command-line that will be used to call the mailer to send an
* e-mail. It must be called with all the parameters needed to make it
* scan the mail input to find the mail recipient; consult your mailer
* documentation.
*
* Postfix users must use the compatible sendmail utility provided with
* it. This one usually needs no parameters on the command-line. Most
* sendmail applications (or replacements of it) require the -t option
* to be used.
*/
sendmailpath = "/usr/sbin/sendmail -t"

/*
* This is the e-mail address from which all the e-mails are to be sent from.
* It should really exist.
*/
sendfrom = "services@localhost.net"

/*
* This controls the minimum amount of time a user must wait before sending
* another e-mail after they have sent one. It also controls the minimum time
* a user must wait before they can receive another e-mail.
*
* This feature prevents users from being mail bombed using Services and
* it is highly recommended that it be used.
*
* This directive is optional, but highly recommended.
*/
delay = 5m

/*
* If set, Services will not attempt to put quotes around the TO: fields
* in e-mails.
*
* This directive is optional, and as far as we know, it's only needed
* if you are using ESMTP or QMail to send out e-mails.
*/
#dontquoteaddresses = yes

/*
* The subject and message of emails sent to users when they register accounts.
*/
registration_subject = "Nickname registration for %n"
registration_message = "Hi,

You have requested to register the nickname %n on %N.
Please type \" /msg NickServ CONFIRM %c \" to complete registration.

If you don't know why this mail was sent to you, please ignore it silently.

%N administrators."

/*
* The subject and message of emails sent to users when they request a new password.
*/
reset_subject = "Reset password request for %n"
reset_message = "Hi,

You have requested to have the password for %n reset.
To reset your password, type \" /msg NickServ CONFIRM %n %c \"

If you don't know why this mail was sent to you, please ignore it silently.

%N administrators."

/*
* The subject and message of emails sent to users when they request a new email address.
*/
emailchange_subject = "Email confirmation"
emailchange_message = "Hi,

You have requested to change your email address to %e.
Please type \" /msg NickServ CONFIRM %c \" to confirm this change.

If you don't know why this mail was sent to you, please ignore it silently.

%N administrators."

/*
* The subject and message of emails sent to users when they receive a new memo.
*/
memo_subject = "New memo"
memo_message = "Hi %n,

You've just received a new memo from %s. This is memo number %d.

Memo text:

%t"
}

/*
 * [REQUIRED] Database configuration.
 *
 * This section is used to configure databases used by Anope.
 * You should at least load one database method, otherwise any data you
 * have will not be stored!
 */

/*
 * [DEPRECATED] db_old
 *
 * This is the old binary database format from late Anope 1.7.x, Anope 1.8.x, and
 * early Anope 1.9.x. This module only loads these databases, and will NOT save them.
 * You should only use this to upgrade old databases to a newer database format by loading
 * other database modules in addition to this one, which will be used when saving databases.
 */
#module
{
name = "db_old"

/*
* This is the encryption type used by the databases. This must be set correctly or
* your passwords will not work. Valid options are: md5, oldmd5, sha1, and plain.
* You must also be sure to load the correct encryption module below in the Encryption
* Modules section so that your passwords work.
*/
#hash = "md5"
}

/*
 * [RECOMMENDED] db_flatfile
 *
 * This is the default flatfile database format.
 */
module
{
name = "db_flatfile"

/*
* The database name db_flatfile should use
*/
database = "anope.db"

/*
* Sets the number of days backups of databases are kept. If you don't give it,
* or if you set it to 0, Services won't backup the databases.
*
* NOTE: Services must run 24 hours a day for this feature to work.
*
* This directive is optional, but recommended.
*/
keepbackups = 3

/*
* Allows Services to continue file write operations (i.e. database saving)
* even if the original file cannot be backed up. Enabling this option may
* allow Services to continue operation under conditions where it might
* otherwise fail, such as a nearly-full disk.
*
* NOTE: Enabling this option can cause irrecoverable data loss under some
* conditions, so make CERTAIN you know what you're doing when you enable it!
*
* This directive is optional, and you are discouraged against enabling it.
*/
#nobackupokay = yes

/*
* If enabled, services will fork a child process to save databases.
*
* This is only useful with very large databases, with hundreds
* of thousands of objects, that have a noticeable delay from
* writing databases.
*
* If your database is large enough cause a noticeable delay when
* saving you should consider a more powerful alternative such
* as db_sql or db_redis, which incrementally update their
* databases asynchronously in real time.
*/
fork = no
}

/*
 * db_sql and db_sql_live
 *
 * db_sql module allows saving and loading databases using one of the SQL engines.
 * This module loads the databases once on startup, then incrementally updates
 * objects in the database as they are changed within Anope in real time. Changes
 * to the SQL tables not done by Anope will have no effect and will be overwritten.
 *
 * db_sql_live module allows saving and loading databases using one of the SQL engines.
 * This module reads and writes to SQL in real time. Changes to the SQL tables
 * will be immediately reflected into Anope. This module should not be loaded
 * in conjunction with db_sql.
 *
 */
#module
{
name = "db_sql"
#name = "db_sql_live"

/*
* The SQL service db_sql(_live) should use, these are configured in modules.conf.
* For MySQL, this should probably be mysql/main.
*/
engine = "sqlite/main"

/*
* An optional prefix to prepended to the name of each created table.
* Do not use the same prefix for other programs.
*/
#prefix = "anope_db_"

/* Whether or not to import data from another database module in to SQL on startup.
* If you enable this, be sure that the database services is configured to use is
* empty and that another database module to import from is loaded before db_sql.
* After you enable this and do a database import you should disable it for
* subsequent restarts.
*
* Note that you can not import databases using db_sql_live. If you want to import
* databases and use db_sql_live you should import them using db_sql, then shut down
* and start services with db_sql_live.
*/
import = false
}

/*
 * db_redis.
 *
 * This module allows using Redis (http://redis.io) as a database backend.
 * This module requires that m_redis is loaded and configured properly.
 *
 * Redis 2.8 supports keyspace notifications which allows Redis to push notifications
 * to Anope about outside modifications to the database. This module supports this and
 * will internally reflect any changes made to the database immediately once notified.
 * See docs/REDIS for more information regarding this.
 */
#module
{
name = "db_redis"

/*
* Redis database to use. This must be configured with m_redis.
*/
engine = "redis/main"
}

/*
 * [RECOMMENDED] Encryption modules.
 *
 * The encryption modules are used when dealing with passwords. This determines how
 * the passwords are stored in the databases, and does not add any security as
 * far as transmitting passwords over the network goes.
 *
 * Without any encryption modules loaded users will not be able to authenticate unless
 * there is another module loaded that provides authentication checking, such as
 * m_ldap_authentication or m_sql_authentication.
 *
 * With enc_none, passwords will be stored in plain text, allowing for passwords
 * to be recovered later but it isn't secure and therefore is not recommended.
 *
 * The other encryption modules use one-way encryption, so the passwords can not
 * be recovered later if those are used.
 *
 * The first encryption module loaded is the primary encryption module. All new passwords are
 * encrypted by this module. Old passwords stored in another encryption method are
 * automatically re-encrypted by the primary encryption module on next identify.
 *
 * NOTE: enc_old is Anope's previous (broken) MD5 implementation which is present in
 * versions prior to Anope 1.7.17. If your databases were made using that module,
 * use this and not enc_md5.
 *
 * NOTE: enc_sha1 relies on how the OS stores 2+ byte data internally, and is
 * potentially broken when moving between 2 different OSes, such as moving from
 * Linux to Windows. It is recommended that you use enc_sha256 instead if you want
 * to use an SHA-based encryption. If you choose to do so, it is also recommended
 * that you first try to get everyone's passwords converted to enc_sha256 before
 * switching OSes by placing enc_sha256 at the beginning of the list.
 *
 */

#module { name = "enc_bcrypt" }
module { name = "enc_sha256" }
#module { name = "enc_md5" }
#module { name = "enc_sha1" }

/*
 * When using enc_none, passwords will be stored without encryption. This isn't secure
 * therefore it is not recommended.
 */
#module { name = "enc_none" }

/*
 * enc_old is Anope's previous (broken) MD5 implementation used from 1.4.x to 1.7.16.
 * If your databases were made using that module, load it here to allow conversion to the primary
 * encryption method.
 */
#module { name = "enc_old" }


/* Extra (optional) modules. */
include
{
type = "file"
name = "modules.example.conf"
}

/*
 * Chanstats module.
 * Requires a MySQL Database.
 */
#include
{
type = "file"
name = "chanstats.example.conf"
}

/*
 * IRC2SQL Gateway
 * This module collects data about users, channels and servers. It doesn't build stats
 * itself, however, it gives you the database, it's up to you how you use it.
 *
 * Requires a MySQL Database and MySQL version 5.5 or higher
 */
#include
{
type = "file"
name = "irc2sql.example.conf"
}

As far as I know server name is correct, port is correct too. Kind regards.
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Adam on November 09, 2014, 11:03:06 PM
Quote
name = "services.localhost.net"
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 09, 2014, 11:19:09 PM
Didn't affect the error message. I assume it has something to do with the protocol section of my services.conf?
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Adam on November 09, 2014, 11:20:31 PM
Set it to services.glx-alliance.com.
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 09, 2014, 11:21:33 PM
I have done, still I get the same error message.
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: Craig Fairhurst on November 10, 2014, 12:04:59 PM
Can anybody help?
Title: Re: ERROR: Link denied (No matching link configuration)
Post by: katsklaw on November 11, 2014, 04:08:26 PM
I answered this tread on the Unreal IRCd forum.