setup-rules 976 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5. my $DRY_RUN = $ARGV[0] ? 1 : 0;
  6. # Build rules, apply rules.
  7. # Enable every available service.
  8. # Don't use tCMS on hosts that do anything else.
  9. my $list = qx{ufw app list};
  10. my @apps = split(/\n/, $list);
  11. shift @apps;
  12. @apps = map { s/^\s+//; $_ } @apps;
  13. # Sane defaults
  14. my @rules = (
  15. [qw{reset}],
  16. [qw{enable}],
  17. [qw{default deny outgoing}],
  18. [qw{default deny incoming}],
  19. );
  20. # Allow, but rate limit
  21. foreach my $app (@apps) {
  22. push(@rules,
  23. ["allow", "out", $app],
  24. );
  25. # HTTP tends to request lots of stuff simultaneously
  26. if ($app =~ m/^Nginx/i) {
  27. push(@rules,
  28. ["allow", "in", $app]
  29. );
  30. } else {
  31. push(@rules,
  32. ["limit", "in", $app],
  33. );
  34. }
  35. }
  36. @rules = map { unshift(@{$_}, '--dry-run'); $_ } @rules if $DRY_RUN;
  37. @rules = map { unshift(@{$_}, 'ufw'); $_ } @rules;
  38. foreach my $rule (@rules) {
  39. system(@$rule);
  40. }