Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
centos:rsynd_c8 [04.07.2020 21:59. ] – [Firewall-Daemon anpassen] django | centos:rsynd_c8 [18.11.2024 19:02. ] (aktuell) – Externe Bearbeitung 127.0.0.1 |
---|
===== Installation und Konfiguration ===== | ===== Installation und Konfiguration ===== |
==== manuelle Weg ==== | ==== manuelle Weg ==== |
=== TFTP-Server installieren === | === rsync-Daemon installieren === |
Als erstes installieren wir uns die für den rsyslog-Daemon-Server notwendigen Pakete via **''dnf''**. | Als erstes installieren wir uns die für den rsyslog-Daemon-Server notwendigen Pakete via **''dnf''**. |
# dnf install rsync-daemon rsync -y | # dnf install rsync-daemon rsync -y |
# rpm -qil rsync-daemon | # rpm -qil rsync-daemon |
# rpm -qil rsync | # rpm -qil rsync |
| |
| |
| |
| |
| |
| |
=== rsync-Daemon konfigurieren === | === rsync-Daemon konfigurieren === |
# hostname and IP address. If none of the patterns match, then the connec- | # hostname and IP address. If none of the patterns match, then the connec- |
# tion is rejected. | # tion is rejected. |
# hosts allow = *.mailserver.guru | # hosts allow = *.nausch.org |
| |
# Module examples: | # Module examples: |
# outgoing chmod = 0644 | # outgoing chmod = 0644 |
# lock file = /var/lock/object.lock | # lock file = /var/lock/object.lock |
# hosts allow = *.mailserver.guru | # hosts allow = *.nausch.org |
| |
#[REPO] | #[REPO] |
#path = /srv/public/mailserver.guru/ | #path = /srv/public/nausch.org/ |
#comment = repo.mailserver.guru | #comment = repo.nausch.org |
#allow = 88.217.171.167 | #allow = 88.217.171.167 |
| |
[TFTP] | [demo] |
max connections = 2 | max connections = 2 |
path = /var/lib/tftpboot/ | path = /var/lib/tftpboot/ |
list = yes | list = yes |
hosts allow = 10.0.0.0/24</file> | hosts allow = 10.0.0.0/24</file> |
| |
| === rsynd.service starten ===== |
| Nun ist es an der Zeit unseren rsync-Daemon Server das erste mal mit Hilfe von **systemd** zu starten. |
| # systemctl start rsyncd.service |
| |
| Im Syslog wird uns der Start des Daemon entsprechend protokolliert. |
| <code>Jul 5 00:03:30 vml000190 rsyncd[5920]: rsyncd version 3.1.3 starting, listening on port 873 |
| </code> |
| |
| Ob auf unserem Server nun der TFTP Server läuft und auf Port **69** horcht können wir bei Bedarf auch noch überprüfen. |
| # netstat -tulpen | grep 873 |
| |
| <html><pre class="code"> |
| <font style="color: rgb(0, 0, 0)">tcp 0 0 0.0.0.0:</font><font style="color: rgb(255, 0, 0)"<b>873</b></font><font style="color: rgb(0, 0, 0)"> 0.0.0.0:* LISTEN 0 428589 5920/rsync<font> |
| <font style="color: rgb(0, 0, 0)">tcp6 0 0 :::</font><font style="color: rgb(255, 0, 0)"<b>873</b></font><font style="color: rgb(0, 0, 0)"> :::* LISTEN 0 428590 5920/rsync</font></pre> |
| </html> |
| |
| |
| Ebenso kann man den Status des Daemons mit Hilfe des Befehls **systemctl** abfragen. |
| # systemctl status rsyncd.service |
| |
| <html><pre class="code"> |
| <font style="color: rgb(29, 180, 29)"><b>●</b></font> rsyncd.service - fast remote file copy program daemon |
| Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled) |
| Active:<font style="color: rgb(29, 180, 29)"><b>active (running)</b></font> since Sun 2020-07-05 00:03:30 CEST; 3min 48s ago |
| Main PID: 5920 (rsync) |
| Tasks: 1 (limit: 12494) |
| Memory: 264.0K |
| CGroup: /system.slice/rsyncd.service |
| └─5920 /usr/bin/rsync --daemon --no-detach |
| |
| Jul 05 00:03:30 vml000190.dmz.nausch.org systemd[1]: Started fast remote file copy program daemon. |
| Jul 05 00:03:30 vml000190.dmz.nausch.org rsyncd[5920]: rsyncd version 3.1.3 starting, listening on port 873</font></pre> |
| </html> |
| |
| Den automatischen Start unseres TFTP-Serverdienstes aktivieren wir für den Systemstart nun noch mit: |
| # systemctl enable rsyncd.service |
| |
| Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service. |
| |
| Ob der rsyncd-Service gestartet wird können wir bei Bedarf wie folgt abfragen: |
| # systemctl is-enabled rsyncd.service |
| |
| enabled |
| |
| |
=== Firewall-Daemon anpassen === | === Firewall-Daemon anpassen === |
Damit die Clients später Verbindungsanfragen zu dem geöffneten Port **tftp/873**unseres rsync-Daemon stellen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. | Damit die Clients später Verbindungsanfragen zu dem geöffneten Port **tftp/873**unseres rsync-Daemon stellen können, müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. |
| |
Unter **[[#tftp-server_installieren|CentOS 8]]** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbiundungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden. | Unter **[[#tftp-server_installieren|CentOS 8]]** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbindungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden. |
| |
Im ersten Konfigurationsbeispiel werden wir nun den Port **873/tcp** für alle öffnen, also unabhängig von der source-IP-Adresse können alle vbeliebeigen clients Daten synchronisieren. Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public** für den Port ***873/tcp** an. | Im ersten Konfigurationsbeispiel werden wir nun den Port **873/tcp** für alle öffnen, also unabhängig von der source-IP-Adresse können alle vbeliebeigen clients Daten synchronisieren. Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public** für den Port ***873/tcp** an. |
| |
| |
| ==== automatisierter Weg mit Hilfe von Ansible ==== |
| Da wir aber in unserer Produktiven Umgebung alle Server, Dienste und Services mit Hilfe von **[[centos:ansible:start|Ansible]]** werden wir natürlich auch für unseren **rsync**-Daemon dies über eine entsprechende **[[centos:ansible:detail#grundlagen|Ansible-Rolle]] {{:centos:pxe_c8:ansible-role-rsync.tar.gz|ansible-role-rsync.tar.gz}}**((Version v1 vom 05.07.2020)) erledigen lassen. |
| |
| /* |
| Erzeugen des tar.gz einer Ansible-Rolle: |
| $ cd ~/ansible/roles |
| $ tar -czvPf /tmp/ansible-role-tftp.tar.gz tftp/ |
| */ |
| |
| |
| Wir holen uns also das Verzeichnis mit der **role** auf unseren Rechner. |
| $ wget https://dokuwiki.nausch.org/lib/exe/fetch.php/centos:pxe_c8:ansible-role-rsync.tar.gz -O ansible-role-rsync.tar.gz |
| |
| Da wir bei der Installation und **[[centos:ansible:first#ansibledirectory_layout|Konfiguration]]** von Ansible bereits das **''Ansible Directory Layout''** erzeugt hatten, brauchen wir nur noch das heruntergeladene Archiv an Ort und Stelle entpacken. |
| $ tar -xvf ansible-role-rsync.tar.gz -C ~/ansible/roles/ |
| |
| Jetzt brauchen wir nur noch die Rolle unserem Server **rsync-server** zuordnen. |
| $ vim ~/ansible/rsync.yml |
| |
| <file yml ~/ansible/rsync.yml>--- # Start des Playbooks für den rsyncd-Server |
| - hosts: rsync-server |
| |
| roles: |
| #- base # Basiskonfiguration (User anlegen) |
| #- chrony # Installation und Konfiguration NTP-Client |
| - rsync # Installation und Konfiguration rsync-Daemon |
| |
| ... # Ende des Playbooks für den rsyncd-Server |
| </file> |
| |
| Bevor wir nun das Playbook ausführen, passen wir noch ggf. die Firewall-Einstellungen an. Beispiele dazu sind im entsprechenden **''task''** bereits vermerkt. |
| $ vim ~/ansible/roles/rsync/tasks/firewall.yml |
| <file bash ~/ansible/roles/rsync/tasks/firewall.yml>--- |
| - name: "*{{ daemon_name }}* : Firewall-Daemon für den {{ daemon_name }} anpassen" |
| firewalld: #https://docs.ansible.com/ansible/latest/modules/firewalld_module.html |
| zone: public |
| port: 873/tcp |
| permanent: yes |
| immediate: yes |
| state: enabled |
| # |
| #zone: public |
| #rich_rule: rule family="ipv4" source address="88.217.171.167/32" port protocol="tcp" port="873" destination address="10.0.0.190/32" accept |
| #permanent: yes |
| #immediate: yes |
| #state: enabled</file> |
| |
| Die Definition der Parameter für den **''rsyncd''** erfolgt über die Variablen-Datei **''~/ansible/roles/rsync/vars/main.yml''** |
| $ vim ~/ansible/roles/rsync/vars/main.yml |
| <file yml ~/ansible/roles/rsync/vars/main.yml>--- # Definition der rollenspezifische Variablen zum rsync Daemon |
| daemon_name : rsyncd |
| config_file : /etc/rsyncd.conf |
| config_backup_file : /etc/rsyncd.conf.orig |
| template_file : templates/rsyncd.conf.j2 |
| # rsyncd config-options |
| rsyncd_motd : "# motd file" |
| rsyncd_pid : "# pid file = /var/run/rsyncd.pid" |
| rsyncd_port : "# port 873" |
| rsyncd_address : "# address" |
| rsyncd_uid : "uid = nobody" |
| rsyncd_gid : "gid = nobody" |
| rsyncd_log_file : "# log file = /var/log/rsyncd.log" |
| rsyncd_syslog_tag : "# syslog tag = rsyncd" |
| rsyncd_syslog_facility : "# syslog facility = daemon" |
| rsyncd_transfer_logging : "transfer logging = yes" |
| rsyncd_max_connections : "# max connections = 0" |
| rsyncd_path : "# path = /home/ftp" |
| rsyncd_exclude : "# exclude = lost+found/" |
| rsyncd_use_chroot : "# use chroot = yes" |
| rsyncd_timeout : "timeout = 600" |
| rsyncd_ignore_nonreadable: "# ignore nonreadable = yes" |
| rsyncd_dont_compress : "dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2" |
| rsyncd_module : "[demo]\nmax connections = 2\npath = /srv/tftp/test\ncomment = Demo für rsync Daemon Artikel in Djangos WIKI\nlist = yes\nhosts allow = 10.10.10.0/26\n" |
| </file> |
| |
| <WRAP center round tip 80%> |
| Wenn man die hostspezfische Konfiguration des rsync-Daemon lieber in der Host-spezifischen Konfiguration vornehmen möchte, braucht man die **# rsyncd config-options** nur hier bei der Rolle auskommentieren bzw. löschen und in die Hostvariable im Inverntory aufnehmen. |
| <WRAP center round important 100%> |
| **WICHTIG**: Variablen in der Rollen-Konfiguration überschreiben (gleichlautende) Variablen-Definitionen aus dem Inventory! |
| </WRAP> |
| </WRAP> |
| |
| Nun brauchen wir nur noch das Playbook ausführen und unser TFTP-Server steht bereit. |
| $ ansible-playbook -v ~/ansible/rsync.yml |
| |
| <html><pre class="code"> |
| <font style="color: rgb(43, 100, 164)">Using /home/ansible/.ansible.cfg as config file</font> |
| <font style="color: rgb(0, 0, 0)">BECOME password: |
| |
| PLAY [rsync-server] ******************************************************************************************************************** |
| |
| TASK [Gathering Facts] *****************************************************************************************************************</font> |
| <font style="color: rgb(25, 100, 5)">ok: [rsync-server]</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Installation der relevanten Pakete (in der aktuellsten Version) für den rsyncd] ***************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "msg": "", "rc": 0, "results": ["Installed: rsync-daemon-3.1.3-7.el8.noarch", "Installed: rsync-3.1.3-7.el8.x86_64"]}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : 1) Überprüfen ob das Backup der Konfigurationsdatei '/etc/rsyncd.conf' bereits existiert] *****************************</font> |
| <font style="color: rgb(25, 100, 5)">ok: [rsync-server] => {"changed": false, "stat": {"exists": false}}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : 2) Von der bestehenden originalen Konfigurationsdatei '/etc/rsyncd.conf' ein Backup '/etc/rsyncd.conf.orig' erstellen]*</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "checksum": "5400f2739a22e6831dbf9a26a8946821c21ce844", "dest": "/etc/rsyncd.conf.orig", "gid": 0, "group": "root", "md5sum": "c63fccb45c0dcbbbe17d0f4bdba920ec", "mode": "0644", "owner": "root", "secontext": "system_u:object_r:etc_t:s0", "size": 458, "src": "/etc/rsyncd.conf", "state": "file", "uid": 0}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Template Konfigurationsdatei an Ort und Stelle kopieren und Variablen setzen] *****************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "checksum": "0b4dff047064222e2952157d9840b2a93f89b26a", "dest": "/etc/rsyncd.conf", "gid": 0, "group": "root", "md5sum": "5f18235a7e8444010877fe3975641c9d", "mode": "0644", "owner": "root", "secontext": "system_u:object_r:rsync_etc_t:s0", "size": 9459, "src": "/home/ansible/.ansible/tmp/ansible-tmp-1593968476.9547315-8021-252894376954121/source", "state": "file", "uid": 0}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Firewall-Daemon für den rsyncd anpassen] ******************************************************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "msg": "Permanent and Non-Permanent(immediate) operation, Changed port 873/tcp to enabled"}</font><br> |
| <font style="color: rgb(0, 0, 0)">TASK [*rsyncd* : Sicherstellen dass der rsyncd gestartet wird und läuft] ***************************************************************</font> |
| <font style="color: rgb(196, 160, 0)">changed: [rsync-server] => {"changed": true, "enabled": true, "name": "rsyncd.service", "state": "started", "status": {"ActiveEnterTimestampMonotonic": "0", "ActiveExitTimestampMonotonic": "0", "ActiveState": "inactive", "After": "systemd-journald.socket basic.target sysinit.target system.slice", "AllowIsolate": "no", "AllowedCPUs": "", "AllowedMemoryNodes": "", "AmbientCapabilities": "", "AssertResult": "no", "AssertTimestampMonotonic": "0", "Before": "shutdown.target", "BlockIOAccounting": "no", "BlockIOWeight": "[not set]", "CPUAccounting": "no", "CPUAffinity": "", "CPUQuotaPerSecUSec": "infinity", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "[not set]", "CPUUsageNSec": "[not set]", "CPUWeight": "[not set]", "CacheDirectoryMode": "0755", "CanIsolate": "no", "CanReload": "no", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_fsetid cap_kill cap_setgid cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend", "CollectMode": "inactive", "ConditionResult": "no", "ConditionTimestampMonotonic": "0", "ConfigurationDirectoryMode": "0755", "Conflicts": "shutdown.target", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "fast remote file copy program daemon", "DevicePolicy": "auto", "DynamicUser": "no", "EffectiveCPUs": "", "EffectiveMemoryNodes": "", "EnvironmentFiles": "/etc/sysconfig/rsyncd (ignore_errors=no)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "0", "ExecMainStartTimestampMonotonic": "0", "ExecMainStatus": "0", "ExecStart": "{ path=/usr/bin/rsync ; argv[]=/usr/bin/rsync --daemon --no-detach $OPTIONS ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/rsyncd.service", "GID": "[not set]", "GuessMainPID": "yes", "IOAccounting": "no", "IOSchedulingClass": "0", "IOSchedulingPriority": "0", "IOWeight": "[not set]", "IPAccounting": "no", " |