Appendix |
Your Aspera applications can be configured to maximize system and content security. The following sections describe the recommended settings and practices that best protect your content when using IBM Aspera Enterprise or Connect Server, IBM Aspera Faspex, IBM Aspera Shares, and IBM Aspera Console.
Contents
Securing the Systems that Run Aspera SoftwareThe systems that run Aspera software can be secured by keeping them up to date, by applying security fixes, and by configuring them using the recommended settings.
Updates
Aspera continually improves the built-in security of its products, as do the producers of third-party components used by Aspera, such as Apache, Nginx, and OpenSSH. One of the first lines of defense is keeping your products up to date to ensure that you are using versions with the latest security upgrades:
Security Fixes
Rarely, security vulnerabilities are detected in the operating systems and third-party components that are used by Aspera. Aspera publishes security bulletins immediately that describe the affected products and recommended remediation steps. To be automatically notified when a new security bulletin is published to the Aspera knowledge base, go to http://support.asperasoft.com, click Announcements > Security Bulletins > Follow this section.
Security Configuration
Recommended security settings vary depending on the products you are using and how they interact. See the following subsections for your Aspera products.
If you do not have an existing configuration for OpenSSH, or need to update an existing one, Aspera recommends the following reference: https://wiki.mozilla.org/Security/Guidelines/OpenSSH.
#Port 22 Port 33001
Connect Server admins must also update the SshPort value in the <WEB...> section of aspera.conf.
Once this setting takes effect:
AllowTcpForwarding no Match Group root AllowTcpForwarding yes
Depending on your sshd_config file, you might have additional instances of AllowTCPForwarding that are set to the default Yes. Review your sshd_config file for other instances and disable if necessary.
Disabling TCP forwarding does not improve security unless users are also denied shell access, because with shell access they can still install their own forwarders. Aspera recommends assigning users to aspshell, described in the following section.Add or uncomment PubkeyAuthentication yes and comment out PasswordAuthentication yes:
PubkeyAuthentication yes #PasswordAuthentication yes PasswordAuthentication no
PermitEmptyPasswords no
Comment out PermitRootLogin yes and add PermitRootLogin No:
#PermitRootLogin yes PermitRootLogin no
To restart or reload your SSH server, run the following commands:
$ sudo service sshd restart
$ sudo /etc/init.d/ssh restart
Aspera requires inbound access on the following ports:
# /opt/aspera/bin/asconfigurator -x "set_server_data;ssl_protocol,tlsv1.2"
Aspera recommends that you configure an Nginx reverse proxy with a valid, signed SSL certificate.
# asconfigurator -x "set_server_data;https_port,9092"
http {
…
include /etc/nginx/conf.d/*.conf;
}
If it is not present, add it to the file then save your changes and close the file.
#
# Aspera configuration - reverse proxy for asperanoded
#
server {
listen 443;
server_name your.servername.com;
ssl_certificate /path/to/server_cert.pem;
ssl_certificate_key /path/to/server_key.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/node-api.access.log
location / {
proxy_pass https://127.0.0.1:9092;
proxy_read_timeout 60;
proxy_redirect https://127.0.0.1:9092 https://your.servername.com
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
In this configuration, Nginx listens externally on port 443, not 9092. Edit the configuration with the following information:
# service nginx restart
# asconfigurator -x "set_user_data;user_name,xfer;authorization_transfer_in_value,token" # asconfigurator -x "set_user_data;user_name,xfer;authorization_transfer_out_value,token"
Set the token encryption key to a string of at least 20 characters:
# asconfigurator -x "set_user_data;user_name,xfer;token_encryption_key,token_string"
Do not use UUIDs for this key because they might not be generated using cryptographically secure methods.
Run the following command to change the user login shell to aspshell:
# sudo usermod -s /bin/aspshell username
Confirm that the user's shell updated by running the following command and looking for /bin/aspshell at the end of the output:
# grep username /etc/passwd
username:x:501:501:...:/home/username:/bin/aspshell
# asconfigurator -x "set_node_data;absolute,docroot" # asconfigurator -x "set_user_data;user_name,username;absolute,docroot"
Replace username with the username and docroot with the directory path to which the user should have access.
# asconfigurator -x "set_node_data;file_restriction,|storage_path" # asconfigurator -x "set_user_data;user_name,username;file_restriction,|storage_path"
Replace username with the username and storage_path with the path to which the user has access. Restriction syntax is specific to the storage:
Storage Type | Format Example |
---|---|
local storage | file:////* |
S3 and IBM Cloud Object Storage | s3://* |
Swift storage | swift//* |
Azure storage | azu://* |
Azure Files | azure-files://* |
Google Cloud Storage | gs://* |
Hadoop (HDFS) | hdfs://* |
The "|" is a delimiter, and you can add additional restrictions. For example, to restrict the system user xfer to s3://s3.amazonaws.com/bucket_xyz/folder_a/* and not allow access to key files, run the following command:
# asconfigurator -x "set_user_data;user_name,xfer;file_restriction,|s3://s3.amazonaws.com/bucket_xyz/folder_a/*|!*.key"
# asconfigurator -x "set_node_data;read_allowed,false;write_allowed,false;dir_allowed,false"
Run the following commands to enable permissions per user, as required:
# asconfigurator -x "set_user_data;user_name,username;read_allowed,false" # asconfigurator -x "set_user_data;user_name,username;write_allowed,false" # asconfigurator -x "set_user_data;user_name,username;dir_allowed,false"
# asconfigurator -x "set_node_data;authorization_transfer_in_value,deny" # asconfigurator -x "set_node_data;authorization_transfer_out_value,deny"
Allow transfers for specific users by running the following commands for each user:
# asconfigurator -x "set_user_data;user_name,username;authorization_transfer_in_value,allow" # asconfigurator -x "set_user_data;user_name,username;authorization_transfer_out_value,allow"
# asconfigurator -x "set_user_data;user_name,username;token_encryption_key,token_string" # asconfigurator -x "set_group_data;group_name,groupname;token_encryption_key,token_string"
The token string should be at least 20 random characters.
# asconfigurator -x "set_node_data;transfer_encryption_allowed_cipher,aes-128"
By default, your server is configured to transfer (as a client) using AES-128 encryption. If you require higher encryption, change this value by running the following command:
# asconfigurator -x "set_client_data;transport_cipher,value"
You can also specify the encryption level in the command line by using -c cipher with ascp and async transfers. ascp4 transfers use AES-128 encryption.
To verify the authenticity of the transfer server, the web app passes the client a trusted SSH host key fingerprint of the transfer server. The client confirms the server's authenticity by comparing the server's fingerprint with the trusted fingerprint. In order to do this, the host key fingerprint or path must be set in the server's aspera.conf.
If you set the host key path, the fingerprint is automatically extracted from the key file and you do not extract it manually.
Retreiving and setting the host key fingerprint:
# cat /etc/ssh/ssh_host_rsa_key.pub | awk '{print $2}' | base64 -d | sha1sum
# asconfigurator -x "set_server_data;ssh_host_key_fingerprint,fingerprint"
This command creates a line similar to the following example of the <server> section of aspera.conf:
<ssh_host_key_fingerprint>7qdOwebGGeDeN7Wv+2dP3HmWfP3 </ssh_host_key_fingerprint>
# /etc/init.d/asperanoded restart
Setting the host key path: To set the SSH host key path instead of the fingerprint, from which the fingerprint will be extracted automatically, run the following command:
# asconfigurator -x "set_server_data;ssh_host_key_path,ssh_key_filepath"
This command creates a line similar to the following in the <server> section of aspera.conf:
<ssh_host_key_path>/etc/ssh/ssh_host_rsa_key.pub </ssh_host_key_path>
Restart the node service to activate your changes, as described for "Retreiving and setting the host key fingerprint".
# asconfigurator -x "set_node_data;authorization_transfer_in_value,deny" # asconfigurator -x "set_node_data;authorization_transfer_out_value,deny"
Allow transfers for "faspex" by running the following commands:
# asconfigurator -x "set_user_data;user_name,faspex;authorization_transfer_in_value,token" # asconfigurator -x "set_user_data;user_name,faspex;authorization_transfer_out_value,token"
SSLProtocol ALL -SSLv2 -SSLv3
SSLProtocol TLSv1.2
# asctl apache:restart
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
You can also secure the Console application and its network of nodes by restricting user permissions:
Limitations and Other Considerations
To enable server-side EAR:
# asconfigurator -x "set_user_data;user_name,username;absolute,file:///path"
# asconfigurator -x "set_user_data;user_name,username;transfer_encryption_content_protection_secret,passphrase"
# asconfigurator -x "set_node_data;transfer_encryption_content_protection_required,true" # asconfigurator -x "set_node_data;transfer_encryption_content_protection_strong_pass_required,true"
If you cannot use private key authentication and use password authentication, use strong passwords and change them periodically.
Client configuration
The client specifies a password and the files are uploaded to the server with a .aspera-env extension. Anyone downloading these .aspera-env files must have the password to decrypt them. Users can enable client-side EAR in the GUI or on the ascp command line.
GUI: Go to Connections > connection_name > Security. Select Encrypt uploaded files with a password and set the password. Select Decrypt password-protected files downloaded and enter the password.
Ascp command line: Set the encryption and decryption password as the environment variable ASPERA_SCP_FILEPASS. For uploads (--mode=send), use --file-crypt=encrypt. For downloads (--mode=recv), use --file-crypt=decrypt.
Server configuration
To configure the server to require client-side EAR and to require strong content protection passwords, run the following commands:
# asconfigurator -x "set_node_data;transfer_encryption_content_protection_required,true" # asconfigurator -x "set_node_data;transfer_encryption_content_protection_strong_pass_required,true"
# export ASPERA_SCP_FILEPASS=password # /opt/aspera/bin/asprotect -o filename.aspera-env filename
# export ASPERA_SCP_FILEPASS=password # /opt/aspera/bin/asprotect -o filename filename.aspera-env