@JS's Notes

Site with notes from my work.

Wprowadzenie do Firewalld w systemach Fedora 30 / CentOS 8 / RHEL 8

2019-10-05 System @JS
Strefy

Strefy to zestaw predefiniowanych reguł firewalla. Pliki z regułami dla każdej ze stref znajdują się w katalogu /usr/lib/firewalld/zones/.

$ ls -l /usr/lib/firewalld/zones/
-rw-r--r--. 1 root root 299 08-01 17:25 block.xml
-rw-r--r--. 1 root root 293 08-01 17:25 dmz.xml
-rw-r--r--. 1 root root 291 08-01 17:25 drop.xml
-rw-r--r--. 1 root root 304 08-01 17:25 external.xml
-rw-r--r--. 1 root root 343 08-01 17:25 FedoraServer.xml
-rw-r--r--. 1 root root 525 08-01 17:25 FedoraWorkstation.xml
-rw-r--r--. 1 root root 369 08-01 17:25 home.xml
-rw-r--r--. 1 root root 384 08-01 17:25 internal.xml
-rw-r--r--. 1 root root 340 08-01 17:25 public.xml
-rw-r--r--. 1 root root 162 08-01 17:25 trusted.xml
-rw-r--r--. 1 root root 336 08-01 17:25 work.xml

$ cat /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="mdns"/>
  <service name="dhcpv6-client"/>
</zone>

Predefiniowane strefy:

  • block - wszystkie przychodzące połączenia sieciowe są odrzucane. Możliwe są tylko połączenia sieciowe inicjowane z poziomu systemu,
  • dmz - strefa zdemilitaryzowana (DMZ), która zapewnia ograniczony dostęp do sieci LAN i zezwala na ruch przychodzący na wybrane porty,
  • drop - wszystkie przychodzące połączenia sieciowe są odrzucane, a dozwolone są tylko połączenia wychodzące,
  • external - strefa wykorzystywana w zastosowaniach typu router dla interfejsu przychodzącego,
  • home - strefa dla zastosowań takich jak stacja robocza, laptop, komputer stacjonarny w sieci LAN, w której ufamy innym komputerom. Zezwala na ruchu sieciowy na wybranych portach TCP/IP.
  • internal - strefa do użytku w sieciach wewnętrznych LAN, gdy w większości ufamy innym serwerom lub komputerom,
  • public - strefa, w której nie ufamy żadnym innym urządzeniom i zezwalamy na ruch sieciowy tylko na wymaganych portach i dla określonych usług,
  • trusted - strefa gdzie wszystkie połączenia sieciowe są akceptowane,
  • work - strefa do użytku w miejscu pracy, w którym ufasz współpracownikom i innym serwerom.

W systemie Fedora Linux dodatkowo znajdziemy strefy FedoraServer i FedoraWorkstation zawierające predefiniowane reguły dla tego typu zastosowań (w przypadku instalacji serwera, strefa FedoraSerwer jest strefą domyślną).

Przykłady użycia firewall-cmd

Wykaz wszystkich stref przy uruchomionym w systemie firewallu:

$ firewall-cmd --get-zones

Wyświetlenie domyślnej strefy firewalla:

$ firewall-cmd --get-default-zone

Informacja o aktywnych strefach i przypisanych do nich interfejsach sieciowych:

$ firewall-cmd --get-active-zones

Wyświetlenie reguł zapory i usług dla strefy public:

$ sudo firewall-cmd --list-all --zone=public
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client mdns ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Przykład usuwania dostępu do usług dhcpv6-client i mdns:

$ sudo firewall-cmd --remove-service=dhcpv6-client --permanent
$ sudo firewall-cmd --remove-service=mdns --permanent
$ sudo firewall-cmd --reload

Listowanie aktywnych usług:

$ sudo firewall-cmd --list-services

Sprawdzenie dozwolonych usług i otwartych portów w bieżącej strefie:

$ sudo firewall-cmd --list-all

Sprawdzenie dozwolonych usług we wszystkich strefach:

$ sudo firewall-cmd --list-all-zones

Sprawdzenie stanu zapory:

$ sudo firewall-cmd --state

Polecenie ponownego załadowania konfiguracji firewalld po wprowadzeniu zmian w regułach:

$ sudo firewall-cmd --reload

Zmiany konfiguracji zapory do momentu dodania do stałego zestawu reguł są tymczasowe. Następujące polecenia tymczasowo otworzą porty TCP 80/443 (http/https). Powyższe reguły nie są zachowywane podczas ponownego uruchomienia systemu lub podczas restartowania usługi firewalld:

$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Aby dodać regułę na stałe, należy na końcu dodać –permanent i ponownie przeładować reguły firewalld.

Aby znaleźć listę usług obsługiwanych przez firewalld można posłużyć się przykładowymi poleceniami:

$ sudo firewall-cmd --get-services
$ sudo firewall-cmd --get-services | grep https
$ ls -l /usr/lib/firewalld/services/
$ cat /usr/lib/firewalld/services/ssh.xml

Przykład dodania na stałe i usunięcia na stałe usługi dns (port TCP/UDP 53) z reguł firewalla:

$ sudo firewall-cmd --zone=public --add-service=dns --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --zone=public --remove-service=dns --permanent
$ sudo firewall-cmd --reload

Otwarcie portu TCP:

$ sudo firewall-cmd --zone=public --add-port=1313/tcp --permanent

Wyświetlenie portów dodanych do reguł firewalla:

$ sudo firewall-cmd --zone=internal --list-ports

Usunięcie na stałe portu z regul firewalla:

$ sudo firewall-cmd --zone=public --remove-port=1313/tcp --permanent

Przekierowanie i usunięcie przekierowania portu 80 do 8080 na tym samym systemie:

$ sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080 --permanent
$ sudo firewall-cmd --reload

Masquerading ruchu z portu 443 do portu 443 serwera o adresie IP 192.168.1.187

$ sudo firewall-cmd --zone=public --add-masquerade
$ sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.187 --permanent

Usunięcie powyższej reguły z reguł firewalla:

$ sudo firewall-cmd --zone=public --remove-masquerade
$ sudo firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.187 --permanent

Wyświetlenie listy reguł:

$ firewall-cmd --zone=public --list-all --permanent

Zezwolenie na dostęp do portu SSH 22 tylko z adresu IP 192.168.1.113:

$ sudo firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.113" port port=22 protocol=tcp accept'

Weryfikacja nowej reguły:

$ sudo firewall-cmd --list-rich-rules --permanent

Zezwolenie na dostęp do portu TCP 11111 z sieci 192.168.1.0/24:

$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="11111" accept'

Usunięcie powyższych reguł:

$ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.1.113" port port=22 protocol=tcp accept' --permanent
$ sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" port port="11111" protocol="tcp" accept' --permanent

Fix Yum error database disk image is malformed

2019-10-05 System @JS

My test platform: CentOS Linux release 7.6.1810 (Core)

Requirements: user with root privileges or non-root user with sudo privileges.

# clean the database cache
yum clean dbcache

# if the above command fails to work, try running the series of below
yum clean all				#delete entries in /var/cache/yum/directory
yum clean metadata			#clear XML metadata		
yum clean dbcache			#clear the cached files for database
yum makecache		        #make cache

# rebuild the RPM system database
mv /var/lib/rpm/__db* /tmp
rpm --rebuilddb

# update your system
yum update

Memcached on Ubuntu 18.10

2019-10-05 System @JS

Requirements: user with root privileges or non-root user with sudo privileges.

$ sudo apt update && sudo apt upgrade -y
$ sudo apt install memcached libmemcached-tools -y
$ systemctl status memcached
$ sudo systemctl enable memcached
Continue reading

Instalacja serwera i klienta NTP w systemach Fedora 30 / CentOS 7 / RHEL 8

2019-10-05 System @JS

W RHEL 8 pakiet ntp nie jest już dostępny a obsługa protokołu NTP jest realizowana przez demona chronyd, który dostarcza nam pakiet o nazwie chrony. Do wykonania instalacji oraz konfiguracji wymagany jest użytkownik root lub dowolny użytkownik z uprawnieniami sudo.

Środowisko testowe:

  1. NTP serwer - Fedora 30 / RHEL 8: 192.168.1.187 (ctx07vm.local.lnxorg)
  2. NTP klient - Centos 7: 192.168.1.183 (ctx03vm.local.lnxorg)

W obu przypadkach pakiet chrony został domyślnie zainstalowany wraz z instalacją systemu. W przypadku jego braku zainstalujemy go poleceniem:

# Fedora 30 / RHEL 8
dnf update -y && dnf install chrony -y
# Centos 7
yum update -y && yum install chrony -y

Stan usługi sprawdzamy za pomocą polecenia systemctl. W przypadku gdy pakiet został doinstalowany, uruchamiamy usługę chronyd oraz włączamy automatyczne uruchamianie wraz z systemem:

systemctl status chronyd.service
sudo systemctl start chronyd.service
sudo systemctl enable chronyd.service

Na serwerze edytujemy plik konfiguracyjny /etc/chrony.conf i ustawiamy dyrektywę allow na adres sieci, z której klienci będą się łączyć do naszego serwera NTP, np.:

allow 192.168.1.0/24

Restartujemy usługę chronyd. Jeśli korzystamy z zapory firewalld otwieramy port dla serwera NTP w jej konfiguracji:

systemctl restart chronyd.service
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload

Konfigurację klienta NTP również przeprowadzamy w pliku /etc/chrony.conf. Komentujemy domyślne serwery NTP określone jako wartość dyrektywy server i w ich miejsce ustawiamy adres naszego serwera:

server 192.168.1.187

Restartujemy usługę chronyd:

systemctl restart chronyd.service
systemctl status chronyd.service

Za pomocą polecenia chronyc sources wyświetlamy bieżące źródła czasu, do których chronyd uzyskuje dostęp. W wyniku powinien pojawić się adres naszego serwera NTP:

[serwis@ctx03vm ~]$ sudo chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ctx07vm.local.lnxorg          3   6    17     0   +523us[+4075us] +/-   55ms

Na serwerze uruchamiamy polecenie:

chronyc clients

Tym razem w wyniku powinna pojawić się informacja o klientach NTP podłączonych do naszego serwera.

[sysadmin@ctx07vm ~]$ sudo chronyc clients
Hostname                      NTP   Drop Int IntL Last     Cmd   Drop Int  Last
===============================================================================
ctx03vm.local.lnxorg            3      0   6   -    13       0      0   -     -

W pliku konfiguracyjnym można również wskazać lokalizację zawierającą klucze uwierzytelniające podnoszące bezpieczeństwo połączenia między serwerem a klientami. Odpowiada za to dyrektywa keyfile. Domyślną lokalizacją jest /etc/chrony.keys natomiast klucze generujemy za pomocą polecenia:

chronyc keygen

rdesktop - RDP client in the Centos 7 system

2019-10-05 System @JS

Requirements: user with root privileges or non-root user with sudo privileges.

$ sudo yum update -y
# sudo yum groupinstall "Narzędzia programistyczne"     # for a system with Polish locales
$ sudo yum groupinstall "Development Tools"
$ sudo yum install openssl-devel -y
$ cd #
$ mkdir source && cd source
$ wget https://github.com/rdesktop/rdesktop/releases/download/v1.8.6/rdesktop-1.8.6.tar.gz
$ tar xvzf rdesktop-1.8.6.tar.gz
$ cd rdesktop-1.8.6/
$ ./configure --disable-credssp --disable-smartcard
$ make
$ sudo make install

To connect to Windows using rdesktop we issue the command according to the formula:

$ rdesktop -u windowsuser windowsipaddress

Jak włączyć moduł Apache Userdir w systemie Centos 7

2019-10-05 System @JS

Do wprowadzenia zmian w konfiguracji serwera Apache wymagany jest użytkownik root lub użytkownik z uprawnieniami sudo.

Konfiguracja modułu Apache Userdir znajduje się w pliku /etc/httpd/conf.d/userdir.conf. Poniżej przykład podstawowej konfiguracji dla użytkownika o nazwie wwwweb:

<IfModule mod_userdir.c>
    UserDir enabled wwwweb
    UserDir public_html
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Aby zezwolić kilku użytkownikom na dostęp do katalogów UserDir, jednocześnie zabraniając pozostałym, używamy konfiguracji:

UserDir disabled
UserDir enabled webuser1 webuser2 webuser3

Aby pozwolić wszystkim użytkownikom na dostęp do katalogów UserDir, jednocześnie zabraniając wybranym, używamy konfiguracji:

UserDir enabled
UserDir disabled webuser4 webuser5 webuser6

W katalogach użytkowników należy utworzyć katalogi public_html oraz ustawić odpowiednie uprawnienia dla każdego z nich. Przykład tworzenia katalogów z poziomu użytkownika wwwweb:

[wwwweb@wmweb ~]$ mkdir public_html
[wwwweb@wmweb ~]$ chmod 711 /home/wwwweb
[wwwweb@wmweb ~]$ chmod 755 public_html

Przykład tworzenia katalogu dla użytkownika wwwweb przez innego użytkownika z uprawnieniami sudo:

[sysadmin@wmweb ~]$ sudo mkdir /home/wwwweb/public_html
[sysadmin@wmweb ~]$ sudo chmod 711 /home/wwwweb
[sysadmin@wmweb ~] sudo chown wwwweb: /home/wwwweb/public_html
[@wmweb ~]$ sudo chmod 755 /home/wwwweb/public_html

Dodatkowo ustawiamy poprawny kontekst SELinux:

setsebool -P httpd_enable_homedirs true
chcon -R -t httpd_sys_content_t /home/wwwweb/public_html

Po wprowadzeniu zmian w konfiguracji modułu UserDir należy zrestartować usługę httpd.

Older posts Newer posts