Implement UFW firewall configuration in the ConfigureCommand with comprehensive SSH lockout prevention. This task adds firewall security while ensuring SSH access is preserved through careful configuration sequencing and port management.
This is the second phase of system security configuration, following the security updates implementation. It has higher risk due to potential SSH lockout scenarios.
Goals
Specifications
Safety-First Implementation
Critical Requirements:
- Allow SSH BEFORE enabling firewall - Never enable UFW before SSH rules are in place
- Use configured SSH port - Support
user_inputs.ssh_port (defaults to 22)
- Dual SSH protection - Allow both port number and SSH service name
- Verify SSH access - Confirm SSH rules are active before completing
Domain Integration
Update ConfigureStep enum in src/domain/environment/state/configure_failed.rs:
/// Steps in the configure workflow
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ConfigureStep {
/// Installing Docker
InstallDocker,
/// Installing Docker Compose
InstallDockerCompose,
/// Configuring automatic security updates
ConfigureSecurityUpdates,
/// Configuring UFW firewall
ConfigureFirewall, // <- NEW
}
New Application Step
Create src/application/steps/system/configure_firewall.rs:
- Implements ConfigureFirewallStep with SSH port variable resolution
- Uses AnsibleClient with Tera template for dynamic SSH port
- Comprehensive error handling for SSH lockout scenarios
- Follows established patterns while handling template variables
New Ansible Template
Create templates/ansible/configure-firewall.yml.tera (Tera template for SSH port):
- Reset UFW to clean state
- Set restrictive default policies (deny incoming, allow outgoing)
- CRITICALLY: Allow SSH on
{{ ssh_port }} BEFORE enabling firewall
- Allow SSH service by name as additional safety measure
- Enable UFW only after SSH rules are confirmed
- Verify SSH access is preserved
Implementation Approach
This is a higher risk implementation that:
- Requires Tera template for SSH port variable resolution
- Must prevent SSH lockout through careful sequencing
- Needs comprehensive testing with SSH connectivity validation
- Follows the template pattern similar to inventory.yml.tera
Acceptance Criteria
Dependencies
Depends On: #17 (Configure Automatic Security Updates)
Parent Epic: #16 - Finish ConfigureCommand - System Security Configuration
Risk Assessment
Medium Risk due to:
- Potential SSH lockout if improperly sequenced
- Network-level changes affecting remote access
- Tera template complexity for SSH port resolution
Mitigation Strategies:
- Comprehensive E2E testing with SSH verification
- Careful implementation sequencing (SSH rules before firewall activation)
- Detailed error handling for SSH connectivity issues
- Multiple safety checks and verification steps
Estimated Effort: 2-3 days
Full specification: UFW Firewall Documentation
Implement UFW firewall configuration in the
ConfigureCommandwith comprehensive SSH lockout prevention. This task adds firewall security while ensuring SSH access is preserved through careful configuration sequencing and port management.This is the second phase of system security configuration, following the security updates implementation. It has higher risk due to potential SSH lockout scenarios.
Goals
ConfigureFirewallto theConfigureStepenumSpecifications
Safety-First Implementation
Critical Requirements:
user_inputs.ssh_port(defaults to 22)Domain Integration
Update
ConfigureStepenum insrc/domain/environment/state/configure_failed.rs:New Application Step
Create
src/application/steps/system/configure_firewall.rs:New Ansible Template
Create
templates/ansible/configure-firewall.yml.tera(Tera template for SSH port):{{ ssh_port }}BEFORE enabling firewallImplementation Approach
This is a higher risk implementation that:
Acceptance Criteria
user_inputs.ssh_portvalue correctlyDependencies
Depends On: #17 (Configure Automatic Security Updates)
Parent Epic: #16 - Finish ConfigureCommand - System Security Configuration
Risk Assessment
Medium Risk due to:
Mitigation Strategies:
Estimated Effort: 2-3 days
Full specification: UFW Firewall Documentation