Well-known · Cross-platform

21 FTP control

TCP Yes
UDP Assigned
SCTP Yes
DCCP

What it is

File Transfer Protocol command/control channel.

When / why

Cleartext credentials — restrict tightly or replace with SFTP (22).

Protocol status detail

TransportStatusMeaning
TCP Yes Assigned by IANA and standardized, specified, or widely used on this port.
UDP Assigned Assigned by IANA, but not standardized, specified, or widely used on this port.
SCTP Yes Assigned by IANA and standardized, specified, or widely used on this port.
DCCP Not applicable for this transport.

Port range

Well-known (0–1023). System port for a core service. On Unix-like systems, binding it requires superuser privileges.

Browse all ports →

Firewall rules for port 21

Copy-ready inbound rules for the active transports. Replace every <source> placeholder with the specific host, subnet, or CIDR that should reach this port.

⚠ Unencrypted or unauthenticated by default — prefer a TLS variant or tunnel over VPN/SSH rather than exposing this port directly.

ufw

sudo ufw allow proto tcp from <source> to any port 21

Allow TCP 21 (FTP control). Replace <source> with the network/host that should reach it.

firewalld

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<source>" port port="21" protocol="tcp" accept'

Allow TCP 21 (FTP control) from <source>. Run 'firewall-cmd --reload' afterwards.

nftables

nft add rule inet filter input ip saddr <source> tcp dport 21 accept

Allow TCP 21 (FTP control). Assumes table 'inet filter' with an 'input' chain.

iptables

sudo iptables -A INPUT -p tcp -s <source> --dport 21 -j ACCEPT

Allow TCP 21 (FTP control). Persist with iptables-save/netfilter-persistent.

Azure NSG

az network nsg rule create -g <resource-group> --nsg-name <nsg> -n Allow-ftpcontrol-21 --priority 1000 --access Allow --direction Inbound --protocol TCP --source-address-prefixes <source> --destination-port-ranges 21

Inbound rule for 21 (FTP control). Set <source> to a CIDR; lower priority number = higher precedence.

AWS Security Group

aws ec2 authorize-security-group-ingress --group-id <sg-id> --ip-permissions IpProtocol=tcp,FromPort=21,ToPort=21,IpRanges="[{CidrIp=<source-cidr>}]"

Inbound TCP 21 (FTP control). Replace <source-cidr> (e.g. 10.0.0.0/16).

GCP firewall

gcloud compute firewall-rules create allow-ftpcontrol-21 --direction=INGRESS --action=ALLOW --rules=tcp:21 --source-ranges=<source-cidr> --network=<network>

Ingress rule for 21 (FTP control). Scope with --source-ranges and optionally --target-tags.

Windows netsh

netsh advfirewall firewall add rule name="Allow FTP control 21/TCP" dir=in action=allow protocol=TCP localport=21 remoteip=<source>

Inbound TCP 21 (FTP control). Set remoteip to a host/subnet; 'any' is discouraged.

Windows PowerShell

New-NetFirewallRule -DisplayName "Allow FTP control 21/TCP" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 21 -RemoteAddress <source>

Inbound TCP 21 (FTP control). Replace <source> with a host or subnet.

Rules are generated only for transports marked active for this port. They default to an inbound allow with an explicit source placeholder — never any. Review direction, scope, and rule precedence before applying in production.