summaryrefslogtreecommitdiffstats
path: root/features/step_definitions/firewall_leaks.rb
diff options
context:
space:
mode:
Diffstat (limited to 'features/step_definitions/firewall_leaks.rb')
-rw-r--r--features/step_definitions/firewall_leaks.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/features/step_definitions/firewall_leaks.rb b/features/step_definitions/firewall_leaks.rb
new file mode 100644
index 00000000..79ae0de3
--- /dev/null
+++ b/features/step_definitions/firewall_leaks.rb
@@ -0,0 +1,60 @@
+Then(/^the firewall leak detector has detected (.*?) leaks$/) do |type|
+ next if @skip_steps_while_restoring_background
+ leaks = FirewallLeakCheck.new(@sniffer.pcap_file, get_tor_relays)
+ case type.downcase
+ when 'ipv4 tcp'
+ if leaks.ipv4_tcp_leaks.empty?
+ save_pcap_file
+ raise "Couldn't detect any IPv4 TCP leaks"
+ end
+ when 'ipv4 non-tcp'
+ if leaks.ipv4_nontcp_leaks.empty?
+ save_pcap_file
+ raise "Couldn't detect any IPv4 non-TCP leaks"
+ end
+ when 'ipv6'
+ if leaks.ipv6_leaks.empty?
+ save_pcap_file
+ raise "Couldn't detect any IPv6 leaks"
+ end
+ when 'non-ip'
+ if leaks.nonip_leaks.empty?
+ save_pcap_file
+ raise "Couldn't detect any non-IP leaks"
+ end
+ else
+ raise "Incorrect packet type '#{type}'"
+ end
+end
+
+Given(/^I disable Tails' firewall$/) do
+ next if @skip_steps_while_restoring_background
+ @vm.execute("/usr/local/sbin/do_not_ever_run_me")
+ iptables = @vm.execute("iptables -L -n -v").stdout.chomp.split("\n")
+ for line in iptables do
+ if !line[/Chain (INPUT|OUTPUT|FORWARD) \(policy ACCEPT/] and
+ !line[/pkts[[:blank:]]+bytes[[:blank:]]+target/] and
+ !line.empty?
+ raise "The Tails firewall was not successfully disabled:\n#{iptables}"
+ end
+ end
+end
+
+When(/^I do a TCP DNS lookup of "(.*?)"$/) do |host|
+ next if @skip_steps_while_restoring_background
+ lookup = @vm.execute("host -T #{host} #{$some_dns_server}", $live_user)
+ assert(lookup.success?, "Failed to resolve #{host}:\n#{lookup.stdout}")
+end
+
+When(/^I do a UDP DNS lookup of "(.*?)"$/) do |host|
+ next if @skip_steps_while_restoring_background
+ lookup = @vm.execute("host #{host} #{$some_dns_server}", $live_user)
+ assert(lookup.success?, "Failed to resolve #{host}:\n#{lookup.stdout}")
+end
+
+When(/^I send some ICMP pings$/) do
+ next if @skip_steps_while_restoring_background
+ # We ping an IP address to avoid a DNS lookup
+ ping = @vm.execute("ping -c 5 #{$some_dns_server}", $live_user)
+ assert(ping.success?, "Failed to ping #{$some_dns_server}:\n#{ping.stderr}")
+end