firewall.test.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { describe, it, expect } from 'vitest';
  2. import { buildUfwCommands, buildNftablesRuleset, type FirewallOptions } from './firewall';
  3. const options: FirewallOptions = {
  4. allowSsh: true,
  5. sshPort: 22,
  6. ports: [
  7. { port: 443, protocol: 'tcp', label: 'inbound' },
  8. { port: 51820, protocol: 'udp', label: 'wireguard' },
  9. { port: 2053, protocol: 'both', label: 'panel' },
  10. ],
  11. };
  12. describe('buildUfwCommands', () => {
  13. it('emits ufw allow rules per protocol plus ssh and enable', () => {
  14. const out = buildUfwCommands(options);
  15. expect(out).toContain('ufw allow 22/tcp');
  16. expect(out).toContain('ufw allow 443/tcp');
  17. expect(out).toContain('ufw allow 51820/udp');
  18. // 'both' expands to tcp + udp
  19. expect(out).toContain('ufw allow 2053/tcp');
  20. expect(out).toContain('ufw allow 2053/udp');
  21. expect(out.trim().endsWith('ufw enable')).toBe(true);
  22. });
  23. });
  24. describe('buildNftablesRuleset', () => {
  25. it('emits a drop-by-default inet table with accept rules', () => {
  26. const out = buildNftablesRuleset(options);
  27. expect(out).toContain('table inet filter');
  28. expect(out).toContain('policy drop;');
  29. expect(out).toContain('ct state established,related accept');
  30. expect(out).toContain('tcp dport 443 accept');
  31. expect(out).toContain('udp dport 51820 accept');
  32. expect(out).toContain('tcp dport 2053 accept');
  33. expect(out).toContain('udp dport 2053 accept');
  34. });
  35. });