AlmaLinux9 - hpaluch/hpaluch.github.io GitHub Wiki
Here are my tips on AlmaLinux 9.
Here is list of packages I install:
# dnf install bash-completion vim-enhanced curl wget tmux lsof bind-utils net-tools man-pagesIn AlmaLinux8 it was enough to edit /etc/default/grub and
append net.ifnames=0 to variable GRUB_CMDLINE_LINUX and
regenerate grub2-mkconfig -o /boot/grub2/grub.cfg.
But now there is grubby wrapper (or sdgrubby wrapper for UEFI machines) -
I simply appended net.ifnames=0 to all files
/boot/loader/entries/*.conf on line options ...
After reboot there is little cosmetic problem - new eth0 connection is
called Wired connection 1 as shown below:
# nmcli c
NAME UUID TYPE DEVICE
Wired connection 1 64fc151c-e7a9-339c-b5b6-8e1557c15989 ethernet eth0
lo 3b231043-38cc-46d2-9d73-ef8fa3f2551d loopback lo
enp1s0 989c6717-f865-3198-9f80-0e71d8ec0374 ethernet -- First rename ID Wired connection 1 to eth0 using:
# nmcli c modify "Wired connection 1" connection.id eth0
# nmcli c
NAME UUID TYPE DEVICE
eth0 64fc151c-e7a9-339c-b5b6-8e1557c15989 ethernet eth0
lo 3b231043-38cc-46d2-9d73-ef8fa3f2551d loopback lo
enp1s0 989c6717-f865-3198-9f80-0e71d8ec0374 ethernet -- Note
Notice that "ID" is actually called "NAME" on nmcli c output...
Finally we can delete now obsolete enp1s0 connection:
# nmcli c del enp1s0
# nmcli c
NAME UUID TYPE DEVICE
eth0 64fc151c-e7a9-339c-b5b6-8e1557c15989 ethernet eth0
lo 3b231043-38cc-46d2-9d73-ef8fa3f2551d loopback lo I also like to see current IP address on console modifying /etc/issue with:
# echo -e "IP: \4{eth0}\n" >> /etc/issueEPEL is repository that contains many packages from Fedora ported to RHEL (and clones). We can enable it following: https://wiki.almalinux.org/repos/Extras
dnf install epel-releaseExample of package "wordpress" that is only in EPEL (but not in stock RHEL distribution):
$ dnf repoquery --location wordpress
https://ftp.sh.cvut.cz/fedora/epel/9/Everything/x86_64/Packages/w/wordpress-6.7.1-1.el9.noarch.rpmNotice epel in package URL.
Firewalld is service wrapper on top of Linux firewall (in the past on iptables now on nftables).
Firewalld settings should be modified with command firewall-cmd
Tested following version:
$ rpm -q firewalld
firewalld-1.3.4-7.el9.noarchYou can find which firewall is used by grepping:
# grep '^FirewallBackend=' /etc/firewalld/firewalld.conf
FirewallBackend=nftablesIn case of nftables you can check real rules using:
nft list rulesetNow ensure that firewalld is enabled using:
# firewall-cmd --state
runningNow we need to find to what Zone is assigned to which Interface:
# firewall-cmd --get-active-zones
public
interfaces: eth0Note: Zone can be assigned to interface (e.g., eth0) or source (e.g., IPv4 address ragne 192.168.0.1/32).
Above example of public zone has assigned interface only.
And now dump details on our public zone:
# firewall-cmd --info-zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: Default public zone definition is stored in /usr/lib/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<forward/>
</zone>Why was public zone assigned to our new eth0 interface? Because it is default:
# firewall-cmd --get-default-zone
publicYou can find Firewalld service definitions under /usr/lib/firewalld/services/,
for example /usr/lib/firewalld/services/cockpit.xml:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Cockpit</short>
<description>Cockpit lets you access and configure your server remotely.</description>
<port protocol="tcp" port="9090"/>
</service>NOTE: defaults are generally stored under /usr/lib/firewalld/, but current configuration
is stored under /etc/firebird/.
Runtime vs. permanent:
- any command without
--permanentwill be applied immediately (=Runtime) but lost after firewall reload or restart (!) - any command with
--permanentwill store changes, but they will be not applied (=Runtime) until reload or restart
There are 2 ways how apply changes both Runtime and Permanent:
- Add
--permanentto your command and then runfirewall-cmd --reload - When you finish changing runtime rules run
firewall-cmdi --runtime-to-permanent
Example: remove cockipt (management Web UI access) from public zone both Runtime and permanently:
# Runtime change (applied immediatelly but lost on reload/restart):
firewall-cmd --zone=public --remove-service=cockpit
# apply all runtime changes permanently:
firewall-cmd --runtime-to-permanentNow verify that cockpit is no longer here:
# firewall-cmd --info-zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: Fist I enable unicast logging (unicast means deny messages for single IP address targets:
firewall-cmd --set-log-denied=unicastNote: there is no --permanent option in above command - it is always applied immediately.
Logs are visible with dmesg or this systemd command:
SYSTEMD_COLORS=false journalctl -k -p 4 -g 'filter_.* MAC=' --no-pagerWhere -k prints kernel-only messages, -p 4 is priority filter, -g is
"regex grep". Variable SYSTEMD_COLORS=false removes color highlight, and
--no-pager will stop shortening lines (and paging).
Systemd is so annoying that I rather created script for that called
/usr/local/sbin/dump-firewall.sh
#!/bin/bash
set -euo pipefail
sudo SYSTEMD_COLORS=false journalctl -k -p 4 -g 'filter_.* MAC=' --no-pager
exit 0By default Firewalld allows SSH access from any IP address, which is too dangerous today...
We will follow modified example from: https://serverfault.com/a/684739
TODO: ...
Normally any output connection is enabled which is not safe. We can find example how to limit it on: https://access.redhat.com/solutions/7013886
TODO: ...
This work is licensed under a