Skip to content

Commit

Permalink
fix: bump flood ban messages config (#3799)
Browse files Browse the repository at this point in the history
Description
---
- bump the allowable max message rate to 100_000 per 100 seconds (up from 10_000) 
- add a short ban duration for max message rate ban (60 mins instead of 6 hours)
- update ban message to include the configured values and received rate
  • Loading branch information
Byron Hambly authored Feb 7, 2022
1 parent 10f6f51 commit bbd0e1e
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 19 deletions.
4 changes: 2 additions & 2 deletions applications/launchpad/backend/assets/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ track_reorgs = true

[base_node.dibbler]
db_type = "lmdb"
flood_ban_max_msg_count = 10000
flood_ban_max_msg_count = 100_000
allow_test_addresses = false
use_libtor = false
base_node_identity_file = "/var/tari/base_node/config/dibbler/tari_base_node_id.json"
Expand All @@ -65,7 +65,7 @@ grpc_base_node_address = "0.0.0.0:18142"

[base_node.igor]
db_type = "lmdb"
flood_ban_max_msg_count = 10000
flood_ban_max_msg_count = 100_000
allow_test_addresses = false
use_libtor = false
base_node_identity_file = "/var/tari/base_node/config/igor/base_node_id.json"
Expand Down
4 changes: 2 additions & 2 deletions applications/launchpad/docker_rig/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ track_reorgs = true

[base_node.dibbler]
db_type = "lmdb"
flood_ban_max_msg_count = 10000
flood_ban_max_msg_count = 100_000
data_dir = "/blockchain/dibbler"
force_sync_peers = []
allow_test_addresses = false
Expand All @@ -64,7 +64,7 @@ console_wallet_tor_identity_file = "config/dibbler/console_wallet_tor.json"

[base_node.igor]
db_type = "lmdb"
flood_ban_max_msg_count = 10000
flood_ban_max_msg_count = 100_000
data_dir = "/blockchain/igor"
force_sync_peers = []
allow_test_addresses = false
Expand Down
12 changes: 6 additions & 6 deletions common/config/presets/base_node.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ db_type = "lmdb"
# is "0", which indicates an archival node without any pruning.
#pruning_horizon = 0

# The amount of messages that will be permitted in the flood ban timespan of 100s (Default dibbler = 1000,
# default mainnet = 10000)
flood_ban_max_msg_count = 10000
# The amount of messages that will be permitted in the flood ban timespan of 100s (Default dibbler = 100000,
# default mainnet = 100000)
flood_ban_max_msg_count = 100_000

# The relative path to store persistent data
data_dir = "dibbler"
Expand Down Expand Up @@ -223,9 +223,9 @@ db_type = "lmdb"
# is "0", which indicates an archival node without any pruning.
#pruning_horizon = 0

# The amount of messages that will be permitted in the flood ban timespan of 100s (Default weatherwax = 1000,
# default mainnet = 10000)
flood_ban_max_msg_count = 10000
# The amount of messages that will be permitted in the flood ban timespan of 100s (Default igor = 100000,
# default mainnet = 100000)
flood_ban_max_msg_count = 100_000

# The relative path to store persistent data
data_dir = "igor"
Expand Down
8 changes: 4 additions & 4 deletions common/src/configuration/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ pub fn default_config(bootstrap: &ConfigBootstrap) -> Config {
cfg.set_default("base_node.mainnet.grpc_base_node_address", "127.0.0.1:18142")
.unwrap();
cfg.set_default("wallet.grpc_address", "127.0.0.1:18143").unwrap();
cfg.set_default("base_node.mainnet.flood_ban_max_msg_count", 10000)
cfg.set_default("base_node.mainnet.flood_ban_max_msg_count", 100_000)
.unwrap();

//---------------------------------- Weatherwax Defaults --------------------------------------------//
Expand All @@ -175,7 +175,7 @@ pub fn default_config(bootstrap: &ConfigBootstrap) -> Config {
cfg.set_default("base_node.weatherwax.pruning_horizon", 0).unwrap();
cfg.set_default("base_node.weatherwax.pruned_mode_cleanup_interval", 50)
.unwrap();
cfg.set_default("base_node.weatherwax.flood_ban_max_msg_count", 10000)
cfg.set_default("base_node.weatherwax.flood_ban_max_msg_count", 100_000)
.unwrap();
cfg.set_default("base_node.weatherwax.peer_seeds", Vec::<String>::new())
.unwrap();
Expand Down Expand Up @@ -220,7 +220,7 @@ pub fn default_config(bootstrap: &ConfigBootstrap) -> Config {
cfg.set_default("base_node.igor.pruning_horizon", 0).unwrap();
cfg.set_default("base_node.igor.pruned_mode_cleanup_interval", 50)
.unwrap();
cfg.set_default("base_node.igor.flood_ban_max_msg_count", 10000)
cfg.set_default("base_node.igor.flood_ban_max_msg_count", 100_000)
.unwrap();
cfg.set_default("base_node.igor.grpc_enabled", false).unwrap();
cfg.set_default("base_node.igor.grpc_base_node_address", "127.0.0.1:18142")
Expand All @@ -236,7 +236,7 @@ pub fn default_config(bootstrap: &ConfigBootstrap) -> Config {
}

fn set_common_network_defaults(cfg: &mut Config) {
for network in ["mainnet", "weatherwax", "igor", "localnet"] {
for network in ["mainnet", "dibbler", "igor", "localnet"] {
let key = format!("base_node.{}.dns_seeds_name_server", network);
cfg.set_default(&key, "1.1.1.1:853/cloudflare-dns.com").unwrap();

Expand Down
10 changes: 7 additions & 3 deletions comms/dht/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,14 @@ pub struct DhtConfig {
/// Length of time to ban a peer if the peer misbehaves at the DHT-level.
/// Default: 6 hrs
pub ban_duration: Duration,
/// Length of time to ban a peer for a "short" duration.
/// Default: 30 mins
pub ban_duration_short: Duration,
/// This allows the use of test addresses in the network.
/// Default: false
pub allow_test_addresses: bool,
/// The maximum number of messages over `flood_ban_timespan` to allow before banning the peer (for `ban_duration`)
/// Default: 1000 messages
/// The maximum number of messages over `flood_ban_timespan` to allow before banning the peer (for
/// `ban_duration_short`) Default: 100_000 messages
pub flood_ban_max_msg_count: usize,
/// The timespan over which to calculate the max message rate.
/// `flood_ban_max_count / flood_ban_timespan (as seconds) = avg. messages per second over the timespan`
Expand Down Expand Up @@ -151,8 +154,9 @@ impl Default for DhtConfig {
join_cooldown_interval: Duration::from_secs(10 * 60),
network_discovery: Default::default(),
ban_duration: Duration::from_secs(6 * 60 * 60),
ban_duration_short: Duration::from_secs(60 * 60),
allow_test_addresses: false,
flood_ban_max_msg_count: 10000,
flood_ban_max_msg_count: 100_000,
flood_ban_timespan: Duration::from_secs(100),
offline_peer_cooldown: Duration::from_secs(2 * 60 * 60),
}
Expand Down
7 changes: 5 additions & 2 deletions comms/dht/src/connectivity/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,11 @@ impl DhtConnectivity {
self.connectivity
.ban_peer_until(
peer,
self.config.ban_duration,
"Exceeded maximum message rate".to_string(),
self.config.ban_duration_short,
format!(
"Exceeded maximum message rate. Config: {}/{:#?}. Rate: {:.2} m/s",
self.config.flood_ban_max_msg_count, self.config.flood_ban_timespan, mps
),
)
.await?;
}
Expand Down

0 comments on commit bbd0e1e

Please sign in to comment.