Skip to content

Commit ff26a27

Browse files
committed
Delete existing ufw rules before adding new ones
1 parent 7204747 commit ff26a27

3 files changed

Lines changed: 9 additions & 12 deletions

File tree

src/dstack/_internal/core/backends/base/compute.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,12 +668,15 @@ def get_setup_cloud_instance_commands(
668668
),
669669
]
670670
if not skip_firewall_setup:
671-
for subnet in firewall_allow_from_subnets:
672-
commands.append(f"ufw allow from {subnet}")
673671
commands += [
674-
"ufw allow ssh",
672+
"ufw --force reset", # Some OS images have default rules like `allow 80`. Delete them
675673
"ufw default deny incoming",
676674
"ufw default allow outgoing",
675+
"ufw allow ssh",
676+
]
677+
for subnet in firewall_allow_from_subnets:
678+
commands.append(f"ufw allow from {subnet}")
679+
commands += [
677680
"ufw --force enable",
678681
]
679682
return commands

src/dstack/_internal/core/backends/digitalocean_base/compute.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@
2626
logger = get_logger(__name__)
2727

2828
MAX_INSTANCE_NAME_LEN = 60
29-
30-
# Setup commands for DigitalOcean instances
31-
SETUP_COMMANDS = [
32-
"sudo ufw delete limit ssh",
33-
]
34-
3529
DOCKER_INSTALL_COMMANDS = [
3630
"export DEBIAN_FRONTEND=noninteractive",
3731
"mkdir -p /etc/apt/keyrings",
@@ -91,9 +85,9 @@ def create_instance(
9185
size_slug = instance_offer.instance.name
9286

9387
if not instance_offer.instance.resources.gpus:
94-
backend_specific_commands = SETUP_COMMANDS + DOCKER_INSTALL_COMMANDS
88+
backend_specific_commands = DOCKER_INSTALL_COMMANDS
9589
else:
96-
backend_specific_commands = SETUP_COMMANDS
90+
backend_specific_commands = None
9791

9892
project_id = None
9993
if self.config.project_name:

src/dstack/_internal/core/backends/gcp/compute.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ def _get_user_data(
951951
bin_path=bin_path,
952952
backend_shim_env=backend_shim_env,
953953
# Instance-level firewall is optional on GCP. The main protection comes from GCP firewalls.
954-
# So only set up instance-level firewall if ufw is available.
954+
# So only set up instance-level firewall as an additional measure if ufw is available.
955955
skip_firewall_setup=not is_ufw_installed,
956956
)
957957

0 commit comments

Comments
 (0)