Debian12.5 ; SSH , Firewall Setting

1. SSH Service Security Settings

The SSH service allows the root user to log in by default, and since the root user already knows the user name and can log in to the server with administrative privileges once the password is known, we will deny this setting.

1.1 Creating a General User

If you have created a general user when installing Debian, this procedure is not necessary.
If the only user created on the server is root, remote login via SSH will not be possible, so if a user has not been created during OS installation, a user must be created in advance.

Users can be created with the "useradd" command. The "-m" option creates a home directory and the "-p" option specifies the password.
For example, to set "debianuser" as the user account name and "123456" as the password, execute the following

1.2 SSH service configuration file changes

Modify the configuration file to change the SSH service settings, which is located in "/etc/ssh/sshd_config".
This time, we will proceed by changing the default SSH port from 22 to 2244.

#Add ssh connection port 2244 on line 16
# port 22
Port 2244

#Uncomment line 17
#ListenAddress 0.0.0.0
ListenAddress 0.0.0.0

#Change the "PermitRootLogin prohibit-password" parameter, which is found near line 34.
The parameter "inhibit-password" implies that password authentication is disabled for root.
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password

PermitRootLogin prohibit-password

Restart SSH service

2. Firewall Settings

Since Debian often uses software called "ufw" to configure firewalls, we will configure firewall settings using ufw.
Since ufw is not installed when the OS is installed, the ufw package must be installed prior to configuration. The following is a procedure to configure minimal filter settings after installation.
Filter rules to be set in ufw
• All packets forwarded to the server are rejected
• All packets sent from the server to the outside are allowed
• The first port to allow is the port for SSH
• Limit packets coming into the server

2.1 Installing the ufw package

Confirmation after installation of ufw package

The installed "ufw package" is now displayed
Run the "systemctl status" command to check the status of ufw

It can be confirmed that the ufw service is stopped by displaying "Active: inactive (dead)".

Enable ufw.

You can see that ufw is running(active (exited))

2.2 Basic firewall rule configuration

When ufw is enabled, default firewall rules are applied. If you enable it as is, you may lose communication with the server, so set up some basic rules before enabling ufw.

2.2.1 Incoming packets Default rule settings

First, set the rules for incoming packets. The general rule is to deny all incoming packets except for specific communications. Execute "ufw default deny incoming" to basically deny all incoming packets.

2.2.2 Outgoing packets Default rule settings

The general rule is to allow all outgoing packets. Execute "ufw default allow outgoing" to basically allow outgoing packets.

2.3 SSH Port Permissions

Enable automatic startup of ufw. but set SSH connection permissions first, as you may not be able to connect SSH remotely. The default SSH port is 22. Set permissions with the following command

If you have set your own 2244 port (e.g.)

2.4  Confirmation of ufw settings

Check the rules set in the firewall after enabling.

2.5 Permission to limit packets coming into the server

If you want to "allow communication coming to port number ◯◯" in ufw settings, use the following command
# ufw allow [port number]
On the other hand, if you want to "disallow communication coming to port number ◯◯", use the following command
# ufw deny [port number]

2.5.1 Do not allow connections from IP addresses that access continuously

Explained using the SSH port 2244 that was just configured as an example
They will try to gain access to port 2244 by typing in the appropriate password and attempting to match it by chance so that they can log in. This is also called a brute force attack.
As a countermeasure for this, set "Do not allow connections from IP addresses that access continuously".

This will set the "do not allow IP addresses with more than 6 connection attempts in a 30 second period" rule.
Check the settings. Display as follows.

2.5.2 Only allow ssh connections from specific networks

Even with the above settings, the ssh port is open to the external Internet, so even if you set a limit on the number of connections, the password could be guessed in some way and a connection could be made, or a vulnerability could be exploited to gain access.
Therefore, it is recommended that ssh connections be allowed only from internal networks and all external ssh connections be set to not be allowed.
As an example, there is a host in the local area network that is assigned the IP address "192.168.11.10". Allow ssh connections only from this host. Or, allow ssh connections only from this network (192.168.11.0/24).

If you check the settings, you will see that

Delete the rule with LIMIT. View the rule number and confirm the setting.

Delete rule 1 by specifying its number.

2.5.3 Permission for web services and other services

You can also specify a port number to allow connections, or specify an application.
You can see a list of applications with the following command.

For example, to enable http and https for web services

2.5.4 Disable ipv6 ufw

Restart the firewall after all work

Copied title and URL