Here's some pertinent information from the unreal docs:
Full version here: ?unreal32docs


6 – User & Channel Modes

Mode
Description
Channel Modes
A
Only Administrators may join
a <nick>
Makes the user a channel admin
b <nick!user@host>
Bans the given user from the channel
c
No ANSI color can be sent to the channel
C
No CTCP's allowed in the channel
e <nick!user@host>
Exception ban – If someone matches this, they can join a channel even if they match an existing ban
f [<number><type>]:<seconds>
Channel flood protection. See section 3.12 above for an extended description.
G
Makes channel G rated. Checks for words listed in the Badword Blocks, and replaces them with the words specified
h <nick>
Gives half-op status to the user
i
Invite required
I <nick!user@host>
Invite exceptions ("invex") - if someone matches this, they can bypass +i requirements to enter the channel.
j <joins:seconds>
Throttles joins per-user to joins per seconds seconds
K
/knock is not allowed
k <key>
Sets a key needed to join
l <##>
Sets max number of users
L <Chan>
If the amount set by +l has been reached, users will be sent to this channel
M
A registered nickname (+r) is required to talk
m
Moderated channel. Only +v/o/h users may speak
N
No nick name changes permitted
n
No messages from outside channels
O
Only IRCops may join
o <nick>
Gives a user channel operator status
p
Makes channel private
q <nick>
Sets channel owner
Q
Only U:Lined servers can kick users
R
Requires a registered nickname to join
S
Strips all incoming colors
s
Makes channel secret
t
Only chanops can set topic
T
No NOTICE's allowed in the channel
u
Auditorium – Makes /names and /who #channel only show channel ops
V
/invite is not allowed
v <nick>
Gives a voice to users. (May speak in +m channels)
z
Only clients on a Secure (SSL) Connection may join

 

Mode
Description
User Modes
A
Server Admin (Set in Oper Block)
a
Services Admin (Set in Oper Block)
B
Marks you as being a Bot
C
Co-Admin (Set in Oper Block)
d
Makes it so you can not receive channel PRIVMSGs
G
Filters out all the bad words per configuration
g
Can send & read globops and locops
H
Hide IRCop Status (IRCop Only)
h
Available for help (HelpOp) (Set in OperBlock)
i
Invisible (not shown in /who)
N
Network Administrator (Set in Oper Block)
O
Local IRC Operator (Set in Oper Block)
o
Global IRC Operator (Set in Oper Block)
p
Hides the channels you are in from /whois
q
Only U:Lines can kick you (Services Admins Only)
R
Allows you to only receive PRIVMSGs/NOTICEs from registered (+r) users
r
Identifies the nick as being registered
S
Used to protect Services Daemons
s
Can listen to server notices (see section 3.3 above for more information)
T
Prevents you from receiving CTCPs
t
Says you are using a /vhost
V
Marks you as a WebTV user
v
Receives infected DCC Send Rejection notices
W
Lets you see when people do a /whois on you (IRCops Only)
w
Can listen to wallop messages
x
Gives user a hidden hostname
z
Indicates that you are an SSL client

Further info from the docs

3.12 - Anti-Flood features

Throttling
Throttling is a method that allows you to limit how fast a user can disconnect and then reconnect to your server. You can config it in your set::throttle block to allow X connections in YY seconds from the same IP.
Channel modes
There are also some channel modes which can be very effective against floods. To name a few:
K = no /knock, N = no nickchanges, C = no CTCPs, M = only registered users can talk, j = join throttling (per-user basis)
As of beta18 there's also a much more advanced channelmode +f...
Channel mode f
Instead of using scripts and bots to protect against channel floods it is now build into the ircd.
An example +f mode is: *** Blah sets mode: +f [10j]:15
This means 10 joins per 15 seconds are allowed in the channel, if the limit is hit, the channel will be set +i automatically.
The following floodtypes are available:

type:name:default action:other avail. actions:comments
cCTCPsauto +Cm, M 
jjoinsauto +iR 
kknocksauto +K (counted for local clients only)
mmessages/noticesauto +mM 
nnickchangesauto +N  
ttextkickbper-user messages/notices like the old +f. Will kick or ban the user.

  Example:

*** ChanOp sets mode: +f [20j,50m,7n]:15
<ChanOp> lalala

*** Evil1 (~fdsdsfddf@Clk-17B4D84B.blah.net) has joined #test
*** Evil2 (~jcvibhcih@Clk-3472A942.xx.someispcom) has joined #test
*** Evil3 (~toijhlihs@Clk-38D374A3.aol.com) has joined #test
*** Evil4 (~eihjifihi@Clk-5387B42F.dfdfd.blablalba.be) has joined #test
-- snip XX lines --
*** Evil21 (~jiovoihew@Clk-48D826C3.e.something.org) has joined #test
-server1.test.net:#test *** Channel joinflood detected (limit is 20 per 15 seconds), putting +i
*** server1.test.net sets mode: +i
<Evil2> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil12> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil15> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl

<Evil10> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
<Evil8> fsdjfdshfdkjfdkjfdsgdskjgsdjgsdsdfsfdujsflkhsfdl
-- snip XX lines --
-server1.test.net:#test *** Channel msg/noticeflood detected (limit is 50 per 15 seconds), putting +m
*** server1.test.net sets mode: +m
*** Evil1 is now known as Hmmm1
*** Evil2 is now known as Hmmm2
*** Evil3 is now known as Hmmm3
*** Evil4 is now known as Hmmm4

*** Evil5 is now known as Hmmm5
*** Evil6 is now known as Hmmm6
*** Evil7 is now known as Hmmm7
*** Evil8 is now known as Hmmm8
-server1.test.net:#test *** Channel nickflood detected (limit is 7 per 15 seconds), putting +N
*** server1.test.net sets mode: +N
In fact, it can get even more advanced/complicated:
Instead of the default action, you can for some floodtypes specify another one, for example: +f [20j#R,50m#M]:15
This will set the channel +R if the joinlimit is reached (>20 joins in 15 seconds), and will set the channel +M if the msg limit is reached (>50 messages in 15 seconds).

There's also a "remove mode after X minutes" feature: +f [20j#R5]:15 will set the channel +R if the limit is reached and will set -R after 5 minutes.
A server can have a default unsettime (set::modef-default-unsettime), so if you type +f [20j]:15 it could get transformed into +f [20j#i10]:15, it's just a default, you can still set [20j#i2]:15 or something like that, and you can also disable the remove-chanmode completely by doing a +f [20j#i0]:15 (an explicit 0).

The old +f mode (msgflood per-user) is also still available as 't', +f 10:6 is now called +f [10t]:6 and +f *20:10 is now +f [20t#b]:10. Currently the ircd will automatically convert old +f mode types to new ones. Note that there's no unsettime feature available for 't' bans ([20t#b30]:15 does not work).

What the best +f mode is heavily depends on the channel... how many users does it have? do you have a game that makes users msg a lot (eg: trivia) or do users often use popups? is it some kind of mainchannel or in auto-join? etc..
There's no perfect channelmode +f that is good for all channels, but to get you started have a look at the next example and modify it to suit your needs:
+f [30j#i10,40m#m10,7c#C15,10n#N15,30k#K10]:15
30 joins per 15 seconds, if limit is reached set channel +i for 10 minutes
40 messages per 15 seconds, if limit is reached set channel +m for 10 minutes
7 ctcps per 15 seconds, if limit is reached set channel +C for 15 minutes
10 nickchanges per 15 seconds, if limit is reached set channel +N for 15 minutes
30 knocks per 15 seconds, if limit is reached set channel +K for 10 minutes
If it's some kind of large user channel (>75 users?) you will want to increase the join sensitivity (to eg: 50) and the message limit as well (to eg: 60 or 75).
Especially the remove-mode times are a matter of taste.. you should think like.. what if no op is available to handle the situation, do I want to have the channel locked for like 15 minutes (=not nice for users) or 5 minutes (=likely the flooders will just wait 5m and flood again). It also depends on the floodtype, users unable to join (+i) or speak (+m) is worse than having them unable to change their nick (+N) or send ctcps to the channel (+C) so you might want to use different removal times.
Channel mode j
The +f mode includes a feature to prevent join floods, however this feature is "global." For example, if it is set to 5:10 and 5 different users join in 10 seconds, the flood protection is triggered. Channel mode +j is different. This mode works on a per-user basis. Rather than protecting against join floods, it is designed to protect against join-part floods (revolving door floods). The mode takes a parameter of the form X:Y where X is the number of joins and Y is the number of seconds. If a user exceeds this limit, he/she will be prevented from joining the channel.

3.13 - Ban types

Basic bantypes and cloaked hosts
UnrealIRCd supports the basic bantypes like +b nick!user@host.
Also, if a masked host of someone is 'rox-ACB17294.isp.com' and you place a ban *!*@rox-ACB17294.isp.com, then if the user sets himself -x (and his hosts becomes for example 'dial-123.isp.com) then the ban will still match. Bans are always checked against real hosts AND masked hosts.
IP bans are also available (eg: *!*@128.*) and are also always checked.

Bans on cloaked IPs require some explanation:
If a user has the IP 1.2.3.4 his cloaked host could be 341C6CEC.8FC6128B.303AEBC6.IP.
If you ban *!*@341C6CEC.8FC6128B.303AEBC6.IP you would ban *!*@1.2.3.4 (obvious...)
If you ban *!*@*.8FC6128B.303AEBC6.IP you ban *!*@1.2.3.*
If you ban *!*@*.303AEBC6.IP you ban *!*@1.2.*
This information might be helpful to you when deciding how broad a ban should be.

Extended bantypes
Extended bans look like ~[!]<type>:<stuff>. Currently the following types are available:

type:nameexplanation:
~qquietPeople matching these bans can join but are unable to speak, unless they have +v or higher. Ex: ~q:*!*@blah.blah.com
~nnickchangePeople matching these bans cannot change nicks, unless they have +v or higher. Ex: ~n:*!*@*.aol.com
~c[prefix]channelIf the user is in this channel then (s)he is unable to join. A prefix can also be specified (+/%/@/&/~) which means that it will only match if the user has that rights or higher on the specified channel. Ex: +b ~c:#lamers, +e ~c:@#trusted
~rrealnameIf the realname of a user matches this then (s)he is unable to join.
Ex: ~r:*Stupid_bot_script*
NOTE: an underscore ('_') matches both a space (' ') and an underscore ('_'), so this ban would match 'Stupid bot script v1.4'.
These bantypes are also supported in the channel exception list (+e).
Modules can also add other extended ban types.

3.14 - Spamfilter

Spamfilter is a new system to fight spam, advertising, worms and other things. It works a bit like the badwords system but has several advantages.

Spamfilters are added via the /spamfilter command which uses the following syntax:
/spamfilter [add|del|remove|+|-] [type] [action] [tkltime] [reason] [regex]

[type] specifies the target type:
Char:Config item:Description:
cchannelChannel message
pprivatePrivate message (from user->user)
nprivate-noticePrivate notice
Nchannel-noticeChannel notice
PpartPart reason
qquitQuit reason
ddccDCC filename
aawayAway message
ttopicSetting a topic
uuserUser ban, will be matched against nick!user@host:realname
You can specify multiple targets, like: cpNn
[action] specifies the action to be taken (only 1 action can be specified)
killkills the user
tempshunshuns the current session of the user (if [s]he reconnects the shun is gone)
shunputs a shun on the host
klineputs a kline on the host
glineputs a gline on the host
zlineputs a zline on the host
gzlineputs a gzline (global zline) on the host
blockblock the message only
dccblockmark the user so (s)he's unable to send any DCCs
viruschanpart all channels, join set::spamfilter::virus-help-channel, disables all commands except PONG, ADMIN, and msg/notices to set::spamfilter::virus-help-channel
[tkltime] The duration of the *line/shun added by the filter, use '-' to use the default or to skip (eg: if action = 'block')
[reason] Block/*line/shun reason.. you CANNOT use spaces in this, but underscores ('_') will be translated into spaces at runtime. And double underscore ('__') gets an underscore ('_'). Again, use '-' to use the default reason.
[regex] this is the actual regex or 'bad word' where we should block on and perform the action at

Here's an example: /spamfilter add pc gline - - Come watch me on my webcam
If the text come watch me on my webcam is found in either a private msg or a channel msg then the message will be blocked and a gline will be added immediately.
Another example: /spamfilter add pc block - - come to irc..+..+
This is a regex that will match on Hi, come to irc.blah.net etc....
And an example with specified time/reason:
/spamfilter add p gline 3h Please_go_to_www.viruscan.xx/nicepage/virus=blah Come watch me on my webcam
If come watch me on my webcam is found in a private msg then the user is glined for 3 hours with the reason Please go to www.viruscan.xx/nicepage/virus=blah.

Spamfilters added with /spamfilter are network-wide. They work regardless of whether the user/channel has mode +G set, only opers and ulines (services) are exempted from filtering.

You can also add spamfilters in the config file but these will be local spamfilters (not network-wide, though you could use remote includes for this). The syntax of these spamfilter { } blocks are explained here
Example:

spamfilter {
	regex "//write (.+|.+load -rs";
	target { private; channel; };
	reason "Generic  exploit";
	action block;
};

set::spamfilter::ban-time allows you to modify the default ban time for *lines/shuns added by spamfilter (default: 1 day)
set::spamfilter::ban-reason allows you to specify a default reason (default: 'Spam/advertising')
set::spamfilter::virus-help-channel allows you to specify the channel to join for action 'viruschan' (default: #help)
set::spamfilter::virus-help-channel-deny allows you to block any normal joins to virus-help-channel (default: no)