wafris 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/wafris/version.rb +1 -1
- data/lib/wafris/wafris_request.rb +2 -0
- data/lib/wafris.rb +85 -87
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b12f70edd52fc81916790101bddabe8e450b1d97683bc115be5737e5a4d3562a
|
4
|
+
data.tar.gz: cf42cbb5eb83750ad066b4762e3b42fead8c02ea3f7c18b6494c0bef1b0c6a48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6839912471ef9957061996a9376119f907cf6d99f5d6d92a48c08d57a0c7f106f1d3234b9be431ad6b53b99d6e026bbc614d4fe47398738b48cf935b507b8616
|
7
|
+
data.tar.gz: eca82696939268ef17064912d3d072686ebd01eac5d1a7aa32e35ca2f72c8d7073176c58cc9010a4d308b2113273c43b9f9b1af8a56b5ad559cbc837b3b3092c
|
data/lib/wafris/version.rb
CHANGED
data/lib/wafris.rb
CHANGED
@@ -164,9 +164,7 @@ module Wafris
|
|
164
164
|
end
|
165
165
|
|
166
166
|
def send_upsync_requests(requests_array)
|
167
|
-
|
168
167
|
begin
|
169
|
-
|
170
168
|
headers = {'Content-Type' => 'application/json'}
|
171
169
|
|
172
170
|
if Rails && Rails.application
|
@@ -214,23 +212,22 @@ module Wafris
|
|
214
212
|
# The 'rule' parameter represents the specific rule that was matched within the category
|
215
213
|
# ex: '192.23.5.4', 'SemRush', etc.
|
216
214
|
def queue_upsync_request(ip, user_agent, path, parameters, host, method, treatment, category, rule, request_id, request_timestamp)
|
217
|
-
|
218
215
|
if @configuration.upsync_status != 'Disabled' || @configuration.upsync_status != 'Uploading'
|
219
216
|
@configuration.upsync_status = 'Uploading'
|
220
217
|
|
221
218
|
# Add request to the queue
|
222
219
|
request = [ip, user_agent, path, parameters, host, method, treatment, category, rule, request_id, request_timestamp]
|
223
220
|
@configuration.upsync_queue << request
|
224
|
-
|
221
|
+
|
225
222
|
# If the queue is full, send the requests to the upsync server
|
226
223
|
if @configuration.upsync_queue.length >= @configuration.upsync_queue_limit || (Time.now.to_i - @configuration.last_upsync_timestamp) >= @configuration.upsync_interval
|
227
224
|
requests_array = @configuration.upsync_queue
|
228
225
|
@configuration.upsync_queue = []
|
229
226
|
@configuration.last_upsync_timestamp = Time.now.to_i
|
230
|
-
|
227
|
+
|
231
228
|
send_upsync_requests(requests_array)
|
232
229
|
end
|
233
|
-
|
230
|
+
|
234
231
|
@configuration.upsync_status = 'Enabled'
|
235
232
|
# Return the treatment - used to return 403 or 200
|
236
233
|
|
@@ -453,92 +450,93 @@ module Wafris
|
|
453
450
|
|
454
451
|
# This is the main loop that evaluates the request
|
455
452
|
# as well as sorts out when downsync and upsync should be called
|
456
|
-
def evaluate(ip, user_agent, path, parameters, host, method,
|
457
|
-
|
453
|
+
def evaluate(ip, user_agent, path, parameters, host, method, _headers, _body, request_id, request_timestamp)
|
454
|
+
@configuration ||= Wafris::Configuration.new
|
458
455
|
|
459
|
-
|
460
|
-
|
461
|
-
|
456
|
+
if @configuration.api_key.nil?
|
457
|
+
return "Passed"
|
458
|
+
else
|
459
|
+
rules_db_filename = current_db('custom_rules')
|
460
|
+
data_subscriptions_db_filename = current_db('data_subscriptions')
|
462
461
|
|
463
|
-
|
464
|
-
data_subscriptions_db_filename = current_db('data_subscriptions')
|
465
|
-
|
466
|
-
if rules_db_filename.to_s.strip != '' && data_subscriptions_db_filename.strip.to_s.strip != ''
|
467
|
-
|
468
|
-
rules_db = SQLite3::Database.new "#{@configuration.db_file_path}/#{rules_db_filename}"
|
469
|
-
data_subscriptions_db = SQLite3::Database.new "#{@configuration.db_file_path}/#{data_subscriptions_db_filename}"
|
462
|
+
if rules_db_filename.to_s.strip != '' && data_subscriptions_db_filename.strip.to_s.strip != ''
|
470
463
|
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
end
|
480
|
-
|
481
|
-
# Blocked IPs
|
482
|
-
if exact_match(ip, 'blocked_ips', rules_db)
|
483
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bi', ip, request_id, request_timestamp)
|
484
|
-
end
|
485
|
-
|
486
|
-
# Blocked CIDR Ranges
|
487
|
-
if ip_in_cidr_range(ip, 'blocked_cidr_ranges', rules_db)
|
488
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bc', ip, request_id, request_timestamp)
|
489
|
-
end
|
490
|
-
|
491
|
-
# Blocked Country Codes
|
492
|
-
country_code = get_country_code(ip, data_subscriptions_db)
|
493
|
-
if exact_match(country_code, 'blocked_country_codes', rules_db)
|
494
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bs', "G_#{country_code}", request_id, request_timestamp)
|
495
|
-
end
|
496
|
-
|
497
|
-
# Blocked Reputation IP Ranges
|
498
|
-
if ip_in_cidr_range(ip, 'reputation_ip_ranges', data_subscriptions_db)
|
499
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bs', "R", request_id, request_timestamp)
|
500
|
-
end
|
501
|
-
|
502
|
-
# Blocked User Agents
|
503
|
-
user_agent_match = substring_match(user_agent, 'blocked_user_agents', rules_db)
|
504
|
-
if user_agent_match
|
505
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bu', user_agent_match, request_id, request_timestamp)
|
506
|
-
end
|
507
|
-
|
508
|
-
# Blocked Paths
|
509
|
-
path_match = substring_match(path, 'blocked_paths', rules_db)
|
510
|
-
if path_match
|
511
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bp', path_match, request_id, request_timestamp)
|
512
|
-
end
|
513
|
-
|
514
|
-
# Blocked Parameters
|
515
|
-
parameters_match = substring_match(parameters, 'blocked_parameters', rules_db)
|
516
|
-
if parameters_match
|
517
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'ba', parameters_match, request_id, request_timestamp)
|
518
|
-
end
|
519
|
-
|
520
|
-
# Blocked Hosts
|
521
|
-
if exact_match(host, 'blocked_hosts', rules_db)
|
522
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bh', host, request_id, request_timestamp)
|
523
|
-
end
|
524
|
-
|
525
|
-
# Blocked Methods
|
526
|
-
if exact_match(method, 'blocked_methods', rules_db)
|
527
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bm', method, request_id, request_timestamp)
|
528
|
-
end
|
529
|
-
|
530
|
-
# Rate Limiting
|
531
|
-
rule_id = check_rate_limit(ip, path, method, rules_db)
|
532
|
-
if rule_id
|
533
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'brl', rule_id, request_id, request_timestamp)
|
534
|
-
end
|
535
|
-
|
464
|
+
rules_db = SQLite3::Database.new "#{@configuration.db_file_path}/#{rules_db_filename}"
|
465
|
+
data_subscriptions_db =
|
466
|
+
SQLite3::Database.new "#{@configuration.db_file_path}/#{data_subscriptions_db_filename}"
|
467
|
+
|
468
|
+
# Allowed IPs
|
469
|
+
if exact_match(ip, 'allowed_ips', rules_db)
|
470
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Allowed', 'ai',
|
471
|
+
ip, request_id, request_timestamp)
|
536
472
|
end
|
537
|
-
|
538
|
-
# Passed if no allow or block rules matched
|
539
|
-
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Passed', 'passed', '-', request_id, request_timestamp)
|
540
473
|
|
541
|
-
|
474
|
+
# Allowed CIDR Ranges
|
475
|
+
if ip_in_cidr_range(ip, 'allowed_cidr_ranges', rules_db)
|
476
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Allowed', 'ac', ip, request_id, request_timestamp)
|
477
|
+
end
|
478
|
+
|
479
|
+
# Blocked IPs
|
480
|
+
if exact_match(ip, 'blocked_ips', rules_db)
|
481
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bi', ip, request_id, request_timestamp)
|
482
|
+
end
|
483
|
+
|
484
|
+
# Blocked CIDR Ranges
|
485
|
+
if ip_in_cidr_range(ip, 'blocked_cidr_ranges', rules_db)
|
486
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bc', ip, request_id, request_timestamp)
|
487
|
+
end
|
488
|
+
|
489
|
+
# Blocked Country Codes
|
490
|
+
country_code = get_country_code(ip, data_subscriptions_db)
|
491
|
+
if exact_match(country_code, 'blocked_country_codes', rules_db)
|
492
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bs', "G_#{country_code}", request_id, request_timestamp)
|
493
|
+
end
|
494
|
+
|
495
|
+
# Blocked Reputation IP Ranges
|
496
|
+
if ip_in_cidr_range(ip, 'reputation_ip_ranges', data_subscriptions_db)
|
497
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bs', "R", request_id, request_timestamp)
|
498
|
+
end
|
499
|
+
|
500
|
+
# Blocked User Agents
|
501
|
+
user_agent_match = substring_match(user_agent, 'blocked_user_agents', rules_db)
|
502
|
+
if user_agent_match
|
503
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bu', user_agent_match, request_id, request_timestamp)
|
504
|
+
end
|
505
|
+
|
506
|
+
# Blocked Paths
|
507
|
+
path_match = substring_match(path, 'blocked_paths', rules_db)
|
508
|
+
if path_match
|
509
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bp', path_match, request_id, request_timestamp)
|
510
|
+
end
|
511
|
+
|
512
|
+
# Blocked Parameters
|
513
|
+
parameters_match = substring_match(parameters, 'blocked_parameters', rules_db)
|
514
|
+
if parameters_match
|
515
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'ba', parameters_match, request_id, request_timestamp)
|
516
|
+
end
|
517
|
+
|
518
|
+
# Blocked Hosts
|
519
|
+
if exact_match(host, 'blocked_hosts', rules_db)
|
520
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bh', host, request_id, request_timestamp)
|
521
|
+
end
|
522
|
+
|
523
|
+
# Blocked Methods
|
524
|
+
if exact_match(method, 'blocked_methods', rules_db)
|
525
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'bm', method, request_id, request_timestamp)
|
526
|
+
end
|
527
|
+
|
528
|
+
# Rate Limiting
|
529
|
+
rule_id = check_rate_limit(ip, path, method, rules_db)
|
530
|
+
if rule_id
|
531
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Blocked', 'brl', rule_id, request_id, request_timestamp)
|
532
|
+
end
|
533
|
+
|
534
|
+
end
|
535
|
+
|
536
|
+
# Passed if no allow or block rules matched
|
537
|
+
return queue_upsync_request(ip, user_agent, path, parameters, host, method, 'Passed', 'passed', '-', request_id, request_timestamp)
|
538
|
+
|
539
|
+
end # end api_key.nil?
|
542
540
|
end # end evaluate
|
543
541
|
|
544
542
|
def debug(api_key)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wafris
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Buckbee
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-10-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|