| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #!/usr/bin/env perl
- use strict;
- use warnings;
- use Data::Dumper;
- my $DRY_RUN = $ARGV[0] ? 1 : 0;
- # Build rules, apply rules.
- # Enable every available service.
- # Don't use tCMS on hosts that do anything else.
- my $list = qx{ufw app list};
- my @apps = split(/\n/, $list);
- shift @apps;
- @apps = map { s/^\s+//; $_ } @apps;
- # Sane defaults
- my @rules = (
- [qw{reset}],
- [qw{enable}],
- [qw{default deny outgoing}],
- [qw{default deny incoming}],
- );
- # Allow, but rate limit
- foreach my $app (@apps) {
- push(@rules,
- ["allow", "out", $app],
- );
- # HTTP tends to request lots of stuff simultaneously
- if ($app =~ m/^Nginx/i) {
- push(@rules,
- ["allow", "in", $app]
- );
- } else {
- push(@rules,
- ["limit", "in", $app],
- );
- }
- }
- @rules = map { unshift(@{$_}, '--dry-run'); $_ } @rules if $DRY_RUN;
- @rules = map { unshift(@{$_}, 'ufw'); $_ } @rules;
- foreach my $rule (@rules) {
- system(@$rule);
- }
|