Software /
code /
prosody-modules
Comparison
mod_firewall/README.markdown @ 4236:c316ad1087d4
mod_firewall: Some additional documentation improvements, particularly adding section links where needed
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 06 Nov 2020 11:17:30 +0000 |
parent | 4235:45606c9f529a |
child | 4583:bb8459c220c9 |
comparison
equal
deleted
inserted
replaced
4235:45606c9f529a | 4236:c316ad1087d4 |
---|---|
71 Firewall rules should be written into text files, e.g. `ruleset.pfw` file. | 71 Firewall rules should be written into text files, e.g. `ruleset.pfw` file. |
72 One or more rule files can be specified in the configuration using: | 72 One or more rule files can be specified in the configuration using: |
73 | 73 |
74 firewall_scripts = { "path/to/ruleset.pfw", "path/to/ruleset2.pfw" } | 74 firewall_scripts = { "path/to/ruleset.pfw", "path/to/ruleset2.pfw" } |
75 | 75 |
76 If multiple files are specified and they both add rules to the same chains, | 76 If multiple files are specified and they both add rules to the same [chains](#chains), |
77 each file's rules will be processed in order, but the order of files is undefined. | 77 each file's rules will be processed in order, but the order of files is undefined. |
78 | 78 |
79 Reloading Prosody's configuration also reloads firewall rules. | 79 Reloading Prosody's configuration also reloads firewall rules. |
80 | 80 |
81 Make sure that `firewall_scripts` is in the global section of the configuration file | 81 Make sure that `firewall_scripts` is in the global section of the configuration file |
177 The "when-sni" default disables certificate verification when Prosody's HTTP client API doesn't support SNI, | 177 The "when-sni" default disables certificate verification when Prosody's HTTP client API doesn't support SNI, |
178 as in Prosody 0.11.6 and earlier. | 178 as in Prosody 0.11.6 and earlier. |
179 | 179 |
180 #### CHECK LIST | 180 #### CHECK LIST |
181 | 181 |
182 Checks whether a simple expression is found in a given list. | 182 Checks whether a simple [expression](#expressions) is found in a given list. |
183 | 183 |
184 Example: | 184 Example: |
185 | 185 |
186 %LIST blacklist: file:/etc/prosody/blacklist.txt | 186 %LIST blacklist: file:/etc/prosody/blacklist.txt |
187 | 187 |
257 `FROM` The JID in the 'from' attribute matches the given JID. | 257 `FROM` The JID in the 'from' attribute matches the given JID. |
258 `TO` The JID in the 'to' attribute matches the given JID. | 258 `TO` The JID in the 'to' attribute matches the given JID. |
259 `TO SELF` The stanza is sent by any of a user's resources to their own bare JID. | 259 `TO SELF` The stanza is sent by any of a user's resources to their own bare JID. |
260 `TO FULL JID` The stanza is addressed to a valid full JID on the local server (full JIDs include a resource at the end, and only exist for the lifetime of a single session, therefore the recipient must be online, or this check will not match). | 260 `TO FULL JID` The stanza is addressed to a valid full JID on the local server (full JIDs include a resource at the end, and only exist for the lifetime of a single session, therefore the recipient must be online, or this check will not match). |
261 | 261 |
262 The TO and FROM conditions both accept wildcards in the JID when the wildcard | 262 The TO and FROM conditions both accept wildcards in the JID when it is |
263 expression is enclosed in angle brackets ('\<...\>'). For example: | 263 enclosed in angle brackets ('\<...\>'). For example: |
264 | 264 |
265 # All users at example.com | 265 # All users at example.com |
266 FROM: <*>@example.com | 266 FROM: <*>@example.com |
267 | 267 |
268 # The user 'admin' on any subdomain of example.com | 268 # The user 'admin' on any subdomain of example.com |
278 # Match admin@example.com, and admin1@example.com, etc. | 278 # Match admin@example.com, and admin1@example.com, etc. |
279 FROM: <<admin%d*>>@example.com | 279 FROM: <<admin%d*>>@example.com |
280 | 280 |
281 **Note:** It is important to know that 'example.com' is a valid JID on | 281 **Note:** It is important to know that 'example.com' is a valid JID on |
282 its own, and does **not** match 'user@example.com'. To perform domain | 282 its own, and does **not** match 'user@example.com'. To perform domain |
283 whitelists or blacklists, use Zones. | 283 whitelists or blacklists, use [Zones](#zones). |
284 | 284 |
285 Condition Matches | 285 Condition Matches |
286 ---------------- --------------------------------------------------------------- | 286 ---------------- --------------------------------------------------------------- |
287 `FROM_EXACTLY` The JID in the 'from' attribute exactly matches the given JID | 287 `FROM_EXACTLY` The JID in the 'from' attribute exactly matches the given JID |
288 `TO_EXACTLY` The JID in the 'to' attribute exactly matches the given JID | 288 `TO_EXACTLY` The JID in the 'to' attribute exactly matches the given JID |
293 match all resources if no resource is specified to match. | 293 match all resources if no resource is specified to match. |
294 | 294 |
295 **Note:** Some chains execute before Prosody has performed any | 295 **Note:** Some chains execute before Prosody has performed any |
296 normalisation or validity checks on the to/from JIDs on an incoming | 296 normalisation or validity checks on the to/from JIDs on an incoming |
297 stanza. It is not advisable to perform access control or similar rules | 297 stanza. It is not advisable to perform access control or similar rules |
298 on JIDs in these chains (see the chain documentation for more info). | 298 on JIDs in these chains (see the [chain documentation](#chains) for more info). |
299 | 299 |
300 #### INSPECT | 300 #### INSPECT |
301 | 301 |
302 INSPECT takes a 'path' through the stanza to get a string (an attribute | 302 INSPECT takes a 'path' through the stanza to get a string (an attribute |
303 value or text content). An example is the best way to explain. Let's | 303 value or text content). An example is the best way to explain. Let's |
358 TYPE and PAYLOAD matched what we wanted before reaching the INSPECT rule). | 358 TYPE and PAYLOAD matched what we wanted before reaching the INSPECT rule). |
359 | 359 |
360 ### Roster | 360 ### Roster |
361 | 361 |
362 These functions access the roster of the recipient (only). Therefore they cannot (currently) | 362 These functions access the roster of the recipient (only). Therefore they cannot (currently) |
363 be used in some chains, such as for outgoing messages (the recipient may be on another server). | 363 be used in some [chains](#chains), such as for outgoing messages (the recipient may be on another server). |
364 | 364 |
365 Performance note: this check can potentially cause storage access (especially if the recipient | 365 Performance note: this check can potentially cause storage access (especially if the recipient |
366 is currently offline), so you may want to limit its use in high-traffic situations, and place | 366 is currently offline), so you may want to limit its use in high-traffic situations, and place |
367 it below other checks (such as a rate limiter). | 367 it below other checks (such as a rate limiter). |
368 | 368 |
381 #### SUBSCRIBED | 381 #### SUBSCRIBED |
382 | 382 |
383 Tests whether the recipient is subscribed to the sender, ie will receive | 383 Tests whether the recipient is subscribed to the sender, ie will receive |
384 presence updates from them. | 384 presence updates from them. |
385 | 385 |
386 Note that this *does* work, regardless of direction and which chain is | 386 Note that this *does* work, regardless of direction and which [chain](#chain) is |
387 used, since both the sender and the recipient will have mirrored roster | 387 used, since both the sender and the recipient will have mirrored roster |
388 entries. | 388 entries. |
389 | 389 |
390 ### Groups | 390 ### Groups |
391 | 391 |
516 | 516 |
517 You can use the 'on' keyword for this, like so: | 517 You can use the 'on' keyword for this, like so: |
518 | 518 |
519 LIMIT: normal on EXPRESSION | 519 LIMIT: normal on EXPRESSION |
520 | 520 |
521 For more information on expressions, see the section later in this document. | 521 For more information on [expressions](#expressions), see the section later in this document. |
522 | 522 |
523 Each value of 'EXPRESSION' has to be tracked individually in a table, which uses a small amount of memory. To prevent | 523 Each value of 'EXPRESSION' has to be tracked individually in a table, which uses a small amount of memory. To prevent |
524 memory exhaustion, the number of tracked values is limited to 1000 by default. You can override this by setting the | 524 memory exhaustion, the number of tracked values is limited to 1000 by default. You can override this by setting the |
525 maximum number of table entries when you define the rate: | 525 maximum number of table entries when you define the rate: |
526 | 526 |
618 | 618 |
619 Action Description | 619 Action Description |
620 --------------- ------------------------------------------------------------------------------------------------------------------------ | 620 --------------- ------------------------------------------------------------------------------------------------------------------------ |
621 `LOG=message` Logs the given message to Prosody's log file. Optionally prefix it with a log level in square brackets, e.g. `[debug]` | 621 `LOG=message` Logs the given message to Prosody's log file. Optionally prefix it with a log level in square brackets, e.g. `[debug]` |
622 | 622 |
623 You can include expressions in log messages, using `$(...)` syntax. For example, to log the stanza that matched the rule, you can use `$(stanza)`, | 623 You can include [expressions](#expressions) in log messages, using `$(...)` syntax. For example, to log the stanza that matched the rule, |
624 or to log just the top tag of the stanza, use `$(stanza:top_tag())`. | 624 you can use `$(stanza)`, or to log just the top tag of the stanza, use `$(stanza:top_tag())`. To fetch the sender JID, use `$(stanza.attr.from)`. |
625 To fetch the sender JID, use `$(stanza.attr.from)`. | |
626 | 625 |
627 Example: | 626 Example: |
628 | 627 |
629 # Log all stanzas to user@example.com: | 628 # Log all stanzas to user@example.com: |
630 TO: user@example.com | 629 TO: user@example.com |