<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.leurent.eu/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marc</id>
	<title>Leurent - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.leurent.eu/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marc"/>
	<link rel="alternate" type="text/html" href="https://www.leurent.eu/wiki/Special:Contributions/Marc"/>
	<updated>2026-05-14T14:59:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=File:Nextcloud_change_password.png&amp;diff=420</id>
		<title>File:Nextcloud change password.png</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=File:Nextcloud_change_password.png&amp;diff=420"/>
		<updated>2022-04-06T21:35:36Z</updated>

		<summary type="html">&lt;p&gt;Marc: Marc uploaded a new version of File:Nextcloud change password.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Nextcloud_Leurent&amp;diff=419</id>
		<title>Nextcloud Leurent</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Nextcloud_Leurent&amp;diff=419"/>
		<updated>2022-04-06T21:34:52Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Changer son mot de passe */ Change password&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Nextcloud Leurent&#039;&#039;&#039; est un logiciel qui permet aux membres de la famille de gérer facilement leurs fichiers: &#039;&#039;Archives&#039;&#039;, &#039;&#039;Photos&#039;&#039;, &#039;&#039;Vidéos&#039;&#039;, &#039;&#039;Musique&#039;&#039;, mais aussi &#039;&#039;Contact&#039;&#039;, &#039;&#039;Calendrier&#039;&#039;, &#039;&#039;Emails&#039;&#039;. Il permet de partager facilement des fichiers avec des membres de la famille, mais aussi avec des personnes externes via l&#039;option de partage.&lt;br /&gt;
[[File:Nextcloud menu.png|alt=Nextcloud menu|thumb|Menu d&#039;Nextcloud Leurent visible en cliquant sur le lien en haut à gauche de la page]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nextcloud Leurent&#039;&#039;&#039; est hébergé dans un cloud privé, installé sur un serveur dédié leurent.eu appelé &amp;quot;tidus&amp;quot;, vos données restent personnelles et sont chiffrées par des clefs complexes débloquées par votre mot de passe: même les administrateurs du serveur ne peuvent pas lire vos données, mais peuvent les sauvegarder.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Voici une présentation des quelques fonctionnalités disponibles:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Fichiers&#039;&#039;&#039;: Permet d&#039;accéder aux fichiers de votre Cloud, mais aussi de les partager, de restaurer une ancienne version d&#039;un fichier,...&lt;br /&gt;
* &#039;&#039;&#039;Activité&#039;&#039;&#039;: Permet de voir les dernières activités de votre cloud: upload, download, nouvelle version de fichier, partage,...&lt;br /&gt;
* &#039;&#039;&#039;Talk&#039;&#039;&#039;: Permet de faire des appels Visio avec la famille&lt;br /&gt;
* &amp;lt;strike&amp;gt;&#039;&#039;&#039;Documents&#039;&#039;&#039;: (non utile, on accède à cette fonctionnalité depuis Fichiers) Permet d&#039;éditer certains documents depuis l&#039;interface web&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Galerie&#039;&#039;&#039;: Permet de visualiser les photos présentent dans des dossiers ( en vue mosaïque ou diaporama )&lt;br /&gt;
* &#039;&#039;&#039;Contacts&#039;&#039;&#039;: Permet de visualiser et gérer les contacts de votre webmail, téléphones (iPhone / Android) et ordi Windows / MacOS / Linux&lt;br /&gt;
* &#039;&#039;&#039;Agenda&#039;&#039;&#039;: Permet de visualiser et gérer votre calendrier synchronisés sur vos téléphones (iPhone / Android) et ordi Windows / MacOS / Linux&lt;br /&gt;
* &#039;&#039;&#039;Audio Player&#039;&#039;&#039;: Si vous avez de la musique dans vos fichiers, une belle interface vous permettra de les lires depuis l&#039;interface web&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;: Un simple bloc note synchronisé avec votre PC ou Téléphone&lt;br /&gt;
* &#039;&#039;&#039;Webmail&#039;&#039;&#039;: Le webmail de votre adresse @leurent.eu&lt;br /&gt;
* &#039;&#039;&#039;Tâches&#039;&#039;&#039;: Sous-section du calendrier, vous permet de gérer des listes de tâches ou de courses...&lt;br /&gt;
&lt;br /&gt;
{{Notice|N&#039;hésitez pas à me contacter pour que vous aide à découvrir le Cloud Leurent, je peux même simplement vous aider même à distance en utilisant un petit logiciel du nom de [https://www.teamviewer.com/fr/download/ TeamViewer]}}&lt;br /&gt;
&lt;br /&gt;
= Nextcloud =&lt;br /&gt;
== Se connecter au Nextcloud Leurent ==&lt;br /&gt;
[[File:Nextcloud login.png|alt=Nextcloud login|thumb|Nextcloud Leurent - Fenêtre de login vers Nextcloud Leurent|none|600x600px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Changer son mot de passe ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer votre mot de passe sur l&#039;adresse https://{{SERVERNAME}}/nextcloud/index.php/settings/user/security&lt;br /&gt;
[[File:Nextcloud change password.png|alt=Nextcloud change password|thumb|Nextcloud - Menu de changement de mot de passe|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers ==&lt;br /&gt;
[[File:Nextcloud file list.png|alt=Nextcloud File|thumb|Nextcloud Leurent - Gestion des fichiers|none|600x600px]] &lt;br /&gt;
&lt;br /&gt;
== Galerie ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Talk ==&lt;br /&gt;
[[File:Nextcloud talk visio conf.png|alt=Nextcloud Talk|thumb|Nextcloud Leurent - Conf Call Visio (de https://nextcloud.com/talk/)|none|600x600px]] &lt;br /&gt;
&lt;br /&gt;
== Webmail ==&lt;br /&gt;
&lt;br /&gt;
[[File:Roundcube login.png|alt=Roundcube login|thumb|Webmail Leurent - Fenêtre de login vers Roundcube|none|600x600px]] &lt;br /&gt;
[[File:Roundcube change password.png|alt=Roundcube change password|thumb|Roundcube - Menu de changemenent de mot de passe|none|600x600px]] &lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
== Activités ==&lt;br /&gt;
&lt;br /&gt;
== Audio Player ==&lt;br /&gt;
[[File:Nextcloud audio player.png|alt=Nextcloud Audio Player|thumb|Nextcloud Leurent - Listen your Music|none|600x600px]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
{{:Nextcloud_Leurent:Client}}&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=417</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=417"/>
		<updated>2021-07-12T20:07:09Z</updated>

		<summary type="html">&lt;p&gt;Marc: ddns-scripts_nsupdate name changes to ddns-scripts-nsupdate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
# Install SNMP&lt;br /&gt;
opkg install snmpd luci-app-snmpd&lt;br /&gt;
&lt;br /&gt;
# Be able to mound USB drivers&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-usb-storage-uas kmod-fs-hfs kmod-fs-hfsplus &lt;br /&gt;
&lt;br /&gt;
# Install samba4&lt;br /&gt;
opkg install luci-app-samba4 samba4-server samba4-utils&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libcap libncurses6 libuv1 libpopt0 kmod-nls-utf8 libopenssl1.1 libsmartcols1 libusb-1.0-0 bind-client samba4-server libavahi-dbus-support ddns-scripts libpcap1 libattr luci-app-ddns terminfo diffutils libexpat ddns-scripts-nsupdate libtirpc attr libdbus hostapd-utils block-mount kmod-fs-hfs libavahi-client libgnutls zlib dbus lsof samba4-utils kmod-usb-storage kmod-fs-exfat libnettle7 vim kmod-fs-hfsplus libuuid1 kmod-fs-vfat libpci mount-utils avahi-dbus-daemon libtasn1 kmod-fs-ntfs snmpd kmod-scsi-core kmod-usb-storage-uas tcpdump usbutils libpam luci-compat libdaemon htop libgmp10 kmod-nls-cp437 luci-lib-ipkg libreadline8 kmod-fs-ext4 libmount1 kmod-nls-iso8859-1 libblkid1 wpad kmod-crypto-crc32c libatomic1 samba4-libs libnetsnmp luci-app-samba4 luci-app-snmpd bind-libs screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts-nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts-nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts-nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=416</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=416"/>
		<updated>2021-04-11T19:31:08Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* NextCloud */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
=== Install Face Recognition ===&lt;br /&gt;
 apt install php7.3-bz2&lt;br /&gt;
&lt;br /&gt;
== Coturn ==&lt;br /&gt;
 apt install coturn&lt;br /&gt;
 adduser turnserver ssl-cert&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
cf https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=119545242&lt;br /&gt;
 apt install libgeoip2-perl libmaxmind-db-reader-xs-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=415</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=415"/>
		<updated>2021-03-30T19:14:35Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* List overlay installed packages */ Update list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
# Install SNMP&lt;br /&gt;
opkg install snmpd luci-app-snmpd&lt;br /&gt;
&lt;br /&gt;
# Be able to mound USB drivers&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-usb-storage-uas kmod-fs-hfs kmod-fs-hfsplus &lt;br /&gt;
&lt;br /&gt;
# Install samba4&lt;br /&gt;
opkg install luci-app-samba4 samba4-server samba4-utils&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libcap libncurses6 libuv1 libpopt0 kmod-nls-utf8 libopenssl1.1 libsmartcols1 libusb-1.0-0 bind-client samba4-server libavahi-dbus-support ddns-scripts libpcap1 libattr luci-app-ddns terminfo diffutils libexpat ddns-scripts_nsupdate libtirpc attr libdbus hostapd-utils block-mount kmod-fs-hfs libavahi-client libgnutls zlib dbus lsof samba4-utils kmod-usb-storage kmod-fs-exfat libnettle7 vim kmod-fs-hfsplus libuuid1 kmod-fs-vfat libpci mount-utils avahi-dbus-daemon libtasn1 kmod-fs-ntfs snmpd kmod-scsi-core kmod-usb-storage-uas tcpdump usbutils libpam luci-compat libdaemon htop libgmp10 kmod-nls-cp437 luci-lib-ipkg libreadline8 kmod-fs-ext4 libmount1 kmod-nls-iso8859-1 libblkid1 wpad kmod-crypto-crc32c libatomic1 samba4-libs libnetsnmp luci-app-samba4 luci-app-snmpd bind-libs screen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:macOS&amp;diff=414</id>
		<title>FAQ:macOS</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:macOS&amp;diff=414"/>
		<updated>2021-03-28T20:36:15Z</updated>

		<summary type="html">&lt;p&gt;Marc: Find File duplicates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= How to create a bootable USB stick on OS X =&lt;br /&gt;
&lt;br /&gt;
I use https://www.balena.io/etcher/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= File Management =&lt;br /&gt;
&lt;br /&gt;
== Find File duplicates ==&lt;br /&gt;
&lt;br /&gt;
Install fdupes&lt;br /&gt;
 brew install fdupes&lt;br /&gt;
Search for duplicates files&lt;br /&gt;
 bdupes -r .&lt;br /&gt;
Search for diplicates and keep only the 1st one&lt;br /&gt;
 fdupes -rdN .&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Multimedia =&lt;br /&gt;
&lt;br /&gt;
== Be able to Read DVDs and Blu-Ray with VLC and RIP them with Handbrake ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Both VLC and Handbrake will need libdvdcss to read DVDs and libaacs to decrypt Blue-Rays. You can install them manually one shot, but I prefer using brew to be able to maintain them up to date ( bug fix + security updates )}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Install Brew that will allow you to install https://brew.sh/&lt;br /&gt;
# Install VLC using &amp;quot;brew install vlc&amp;quot; or https://www.videolan.org/vlc/&lt;br /&gt;
# Install Handbrake using &amp;quot;brew install handbrake&amp;quot; or download it from https://handbrake.fr/&lt;br /&gt;
# Install libdvdcss and libaacs and get the KEYDB.cfg from the internet&lt;br /&gt;
 brew install libdvdcss libaacs&lt;br /&gt;
 mkdir ~/Library/Preferences/aacs/&lt;br /&gt;
 cd ~/Library/Preferences/aacs/&lt;br /&gt;
 wget link to KEYDB.cfg&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Test&amp;diff=413</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Test&amp;diff=413"/>
		<updated>2021-03-11T16:29:02Z</updated>

		<summary type="html">&lt;p&gt;Marc: other tests&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;file://///srv-bus-fs01/public/&lt;br /&gt;
&lt;br /&gt;
file:////srv-bus-fs01/public/&lt;br /&gt;
&lt;br /&gt;
file://srv-bus-fs01/public/&lt;br /&gt;
&lt;br /&gt;
smb://srv-bus-fs01/public/&lt;br /&gt;
&lt;br /&gt;
http://bob.fr&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Test&amp;diff=412</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Test&amp;diff=412"/>
		<updated>2021-03-11T16:22:10Z</updated>

		<summary type="html">&lt;p&gt;Marc: Test2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;file:////srv-bus-fs01/public/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
smb://srv-bus-fs01/public/&lt;br /&gt;
&lt;br /&gt;
http://bob.fr&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Test&amp;diff=411</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Test&amp;diff=411"/>
		<updated>2021-03-11T16:19:12Z</updated>

		<summary type="html">&lt;p&gt;Marc: Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;file:////srv-bus-fs01/public/&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=410</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=410"/>
		<updated>2021-03-02T18:59:17Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* SpamAssassin + GeoIP */ Add link to doc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Coturn ==&lt;br /&gt;
 apt install coturn&lt;br /&gt;
 adduser turnserver ssl-cert&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
cf https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=119545242&lt;br /&gt;
 apt install libgeoip2-perl libmaxmind-db-reader-xs-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=409</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=409"/>
		<updated>2021-03-02T18:57:10Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* SpamAssassin + GeoIP */ Add libgeoip2-perl libmaxmind-db-reader-xs-perl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Coturn ==&lt;br /&gt;
 apt install coturn&lt;br /&gt;
 adduser turnserver ssl-cert&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeoip2-perl libmaxmind-db-reader-xs-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=408</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=408"/>
		<updated>2021-03-02T18:54:42Z</updated>

		<summary type="html">&lt;p&gt;Marc: Undo revision 407 by Marc (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Coturn ==&lt;br /&gt;
 apt install coturn&lt;br /&gt;
 adduser turnserver ssl-cert&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=407</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=407"/>
		<updated>2021-03-02T18:52:40Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */ Add libgeo-ip-perl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Coturn ==&lt;br /&gt;
 apt install coturn&lt;br /&gt;
 adduser turnserver ssl-cert&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python libgeo-ip-perl&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=406</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=406"/>
		<updated>2021-02-22T19:36:22Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install basic packages */ Add luci-app-snmpd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
# Install SNMP&lt;br /&gt;
opkg install snmpd luci-app-snmpd&lt;br /&gt;
&lt;br /&gt;
# Be able to mound USB drivers&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-usb-storage-uas kmod-fs-hfs kmod-fs-hfsplus &lt;br /&gt;
&lt;br /&gt;
# Install samba4&lt;br /&gt;
opkg install luci-app-samba4 samba4-server samba4-utils&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libncurses6 kmod-nls-utf8 libopenssl1.1 libsmartcols1 libusb-1.0-0 bind-client ddns-scripts libpcap1 luci-app-ddns terminfo diffutils ddns-scripts_nsupdate libtirpc block-mount libext2fs2 zlib lsof cfdisk kmod-usb-storage kmod-fs-exfat libss2 libcomerr0 libuuid1 kmod-fs-vfat libpci mount-utils snmpd kmod-scsi-core e2fsprogs tcpdump usbutils luci-compat htop kmod-nls-cp437 luci-lib-ipkg libfdisk1 kmod-fs-ext4 libmount1 kmod-nls-iso8859-1 libblkid1 kmod-crypto-crc32c libatomic1 libnetsnmp luci-app-snmpd bind-libs screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=405</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=405"/>
		<updated>2021-01-06T18:33:16Z</updated>

		<summary type="html">&lt;p&gt;Marc: Install samba4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
# Install SNMP&lt;br /&gt;
opkg install snmpd&lt;br /&gt;
&lt;br /&gt;
# Be able to mound USB drivers&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-usb-storage-uas kmod-fs-hfs kmod-fs-hfsplus &lt;br /&gt;
&lt;br /&gt;
# Install samba4&lt;br /&gt;
opkg install luci-app-samba4 samba4-server samba4-utils&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libncurses6 kmod-nls-utf8 libopenssl1.1 libsmartcols1 libusb-1.0-0 bind-client ddns-scripts libpcap1 luci-app-ddns terminfo diffutils ddns-scripts_nsupdate libtirpc block-mount libext2fs2 zlib lsof cfdisk kmod-usb-storage kmod-fs-exfat libss2 libcomerr0 libuuid1 kmod-fs-vfat libpci mount-utils snmpd kmod-scsi-core e2fsprogs tcpdump usbutils luci-compat htop kmod-nls-cp437 luci-lib-ipkg libfdisk1 kmod-fs-ext4 libmount1 kmod-nls-iso8859-1 libblkid1 kmod-crypto-crc32c libatomic1 libnetsnmp luci-app-snmpd bind-libs screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=404</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=404"/>
		<updated>2020-11-18T22:51:55Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  System */ install coturn&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Coturn ==&lt;br /&gt;
 apt install coturn&lt;br /&gt;
 adduser turnserver ssl-cert&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=399</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=399"/>
		<updated>2020-11-01T14:27:18Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Wireguard */ User profile creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
&lt;br /&gt;
=== Server Setup ===&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a user profile file ===&lt;br /&gt;
* Generate a public and private key for a user&lt;br /&gt;
 wg genkey | tee wg-user5.key | wg pubkey &amp;gt; wg-user5.pub&lt;br /&gt;
&lt;br /&gt;
* Update the content of /etc/wireguard/wg0.conf with the content of the wg-user5.pub&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = SaSha9oquuhai2ahghoongFAKEKEY=&lt;br /&gt;
 AllowedIPs = 172.16.99.5/32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart wireguard on the server&lt;br /&gt;
 systemctl restart wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
* Create a user configuration file wg-user5.conf&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 [Interface]&lt;br /&gt;
 Address = 172.16.99.5/24&lt;br /&gt;
 ListenPort = 47824&lt;br /&gt;
 DNS = 172.16.99.1&lt;br /&gt;
 PrivateKey = PRIVATELEYUSER5=&lt;br /&gt;
 &lt;br /&gt;
 [Peer]&lt;br /&gt;
 PublicKey = PUBLICKEYVPNSERVER=&lt;br /&gt;
 AllowedIPs = 0.0.0.0/0, ::/0&lt;br /&gt;
 Endpoint = vpn.example.com:5544&lt;br /&gt;
 PersistentKeepalive = 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Convert the .conf file as a .png to easily set it up on a mobile device&lt;br /&gt;
 qrencode -t png -r wg-user5.conf -o wg-user5.png&lt;br /&gt;
&lt;br /&gt;
* To use the VPN&lt;br /&gt;
# Install Wireguard app on your PC/MacBook/iOS/Android, cf https://www.wireguard.com/install/&lt;br /&gt;
# Import the profile .conf file in Wireguard app / or Scan the QR code visible in the .png&lt;br /&gt;
# Start the VPN&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=398</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=398"/>
		<updated>2020-10-20T19:17:04Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* MariaDB */ Add automysqlbackup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client automysqlbackup&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=397</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=397"/>
		<updated>2020-10-18T17:37:11Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  System */ Add Wireguard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
== Wireguard ==&lt;br /&gt;
 # Debian backports needed&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
 # Config file in /etc/wireguard/wg0.conf&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
 systemctl start wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=396</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=396"/>
		<updated>2020-10-17T22:19:22Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  System */  Install fail2ban&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== Fail2ban ==&lt;br /&gt;
 apt install fail2ban&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=395</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=395"/>
		<updated>2020-10-17T21:46:56Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */ Spamassassin is not rebootproof&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 apt install spamassassin&lt;br /&gt;
 systemctl enable spamassassin&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.private&lt;br /&gt;
 chown root:opendkim /etc/postfix/dkim/mail.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=394</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=394"/>
		<updated>2020-10-17T21:33:55Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=393</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=393"/>
		<updated>2020-10-17T20:08:27Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  System */ Install redis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redis ==&lt;br /&gt;
&lt;br /&gt;
 apt install redis-server redis-tools&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=392</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=392"/>
		<updated>2020-10-17T20:05:03Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Apache2 and php ==&lt;br /&gt;
&lt;br /&gt;
 apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip php-ldap php-apcu php-apcu-bc php-auth-sasl php-bcmath php-common php-curl php-dompdf php-font-lib php-gd php-gmp php-igbinary php-imagick php-intl php-json php-ldap php-mail-mime php-mbstring php-mysql php-net-sieve php-net-smtp php-net-socket php-pear php-php-gettext php-phpseclib php-pspell php-redis php-smbclient php-snmp php-twig php-wikidiff2 php-xml php-zip pkg-php-tools&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=391</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=391"/>
		<updated>2020-10-17T17:20:01Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 gpasswd -a postfix opendkim&lt;br /&gt;
 gpasswd -a postfix opendmarc&lt;br /&gt;
 mkdir /var/spool/postfix/opendkim&lt;br /&gt;
 mkdir /var/spool/postfix/opendmarc&lt;br /&gt;
 chown -R opendkim:opendkim /var/spool/postfix/opendkim&lt;br /&gt;
 chown -R opendmarc:opendmarc /var/spool/postfix/opendmarc&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=390</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=390"/>
		<updated>2020-10-17T16:12:11Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */ Add opendkim and opendmarc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install opendkim opendkim-tools opendmarc&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=389</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=389"/>
		<updated>2020-10-17T15:41:26Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-lmtpd&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=388</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=388"/>
		<updated>2020-10-10T08:00:16Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install basic packages */ USB drive update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
# Install SNMP&lt;br /&gt;
opkg install snmpd&lt;br /&gt;
&lt;br /&gt;
# Be able to mound USB drivers&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-usb-storage-uas kmod-fs-hfs kmod-fs-hfsplus &lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libncurses6 kmod-nls-utf8 libopenssl1.1 libsmartcols1 libusb-1.0-0 bind-client ddns-scripts libpcap1 luci-app-ddns terminfo diffutils ddns-scripts_nsupdate libtirpc block-mount libext2fs2 zlib lsof cfdisk kmod-usb-storage kmod-fs-exfat libss2 libcomerr0 libuuid1 kmod-fs-vfat libpci mount-utils snmpd kmod-scsi-core e2fsprogs tcpdump usbutils luci-compat htop kmod-nls-cp437 luci-lib-ipkg libfdisk1 kmod-fs-ext4 libmount1 kmod-nls-iso8859-1 libblkid1 kmod-crypto-crc32c libatomic1 libnetsnmp luci-app-snmpd bind-libs screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=387</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=387"/>
		<updated>2020-10-03T19:09:08Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* LDAP user backend */ import config&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 0 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=386</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=386"/>
		<updated>2020-10-03T13:32:01Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install all my basic useful tools */ Add tcpdump&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip tcpdump&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=385</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=385"/>
		<updated>2020-09-25T21:46:04Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* 50-apt : display upgrades to perform */ keep it simple&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=384</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=384"/>
		<updated>2020-09-25T21:45:32Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Others */ Add update-motd.d : Dynamic motd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== update-motd.d : Dynamic motd ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10-logo : figlet to create ASCII test ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 20-date : Display uptime and date ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 20-date&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo&lt;br /&gt;
echo &amp;quot;uptime is $( uptime )&amp;quot;&lt;br /&gt;
echo &amp;quot;date   is $( date   )&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 50-apt : display upgrades to perform ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@ifrit:[/etc/update-motd.d]# cat 50-apt&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# List upgradable packages&lt;br /&gt;
echo -n &amp;quot;LIST OF UPGRADABLE PACKAGES&amp;quot;&lt;br /&gt;
apt list --upgradable&lt;br /&gt;
#apt-get --just-print upgrade 2&amp;gt;&amp;amp;1 | perl -ne &#039;if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print &amp;quot;PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n&amp;quot;}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=383</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=383"/>
		<updated>2020-09-25T21:13:30Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables */ Add geoipsets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GeoIP : Use of geoipsets ===&lt;br /&gt;
&lt;br /&gt;
Please refer to https://github.com/chr0mag/geoipsets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=382</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=382"/>
		<updated>2020-09-25T20:52:56Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install all my basic useful tools */ Add unzip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate unzip&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=381</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=381"/>
		<updated>2020-09-25T20:50:32Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install all my basic useful tools */ Add geoipupdate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet geoipupdate&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=380</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=380"/>
		<updated>2020-07-23T21:13:26Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables */ Fix warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=&amp;lt;nowiki&amp;gt;Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=379</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=379"/>
		<updated>2020-05-20T17:31:35Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install preview generator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
cf https://docs.nextcloud.com/server/18/admin_manual/configuration_server/config_sample_php_parameters.html#previews&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=378</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=378"/>
		<updated>2020-05-20T17:25:59Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* NextCloud */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install preview generator ===&lt;br /&gt;
&lt;br /&gt;
 apt install ffmpeg&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=377</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=377"/>
		<updated>2020-05-19T19:13:02Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* List overlay installed packages */ Update list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
opkg install snmpd&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-fs-hfs kmod-fs-hfsplus kmod-nls-cp437 kmod-nls-iso8859-1&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libncurses6 kmod-nls-utf8 libopenssl1.1 libsmartcols1 libusb-1.0-0 bind-client ddns-scripts libpcap1 luci-app-ddns terminfo diffutils ddns-scripts_nsupdate libtirpc block-mount libext2fs2 zlib lsof cfdisk kmod-usb-storage kmod-fs-exfat libss2 libcomerr0 libuuid1 kmod-fs-vfat libpci mount-utils snmpd kmod-scsi-core e2fsprogs tcpdump usbutils luci-compat htop kmod-nls-cp437 luci-lib-ipkg libfdisk1 kmod-fs-ext4 libmount1 kmod-nls-iso8859-1 libblkid1 kmod-crypto-crc32c libatomic1 libnetsnmp luci-app-snmpd bind-libs screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=376</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=376"/>
		<updated>2020-01-10T20:48:41Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* List overlay installed packages */ update list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
opkg install snmpd&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-fs-hfs kmod-fs-hfsplus kmod-nls-cp437 kmod-nls-iso8859-1&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
&lt;br /&gt;
opkg install librt libncurses6 collectd-mod-iwinfo collectd-mod-ping libopenssl1.1 libusb-1.0-0 bind-client curl ddns-scripts luci-app-ddns terminfo diffutils ddns-scripts_nsupdate collectd-mod-rrdtool libtirpc librrd1 libltdl7 zlib lsof collectd-mod-cpu collectd-mod-load vim ethtool luci-app-statistics liboping collectd-mod-memory usbutils luci-compat collectd-mod-interface luci-app-adblock adblock htop collectd-mod-wireless luci-lib-iptparser luci-lib-ipkg libcurl4 collectd collectd-mod-network libatomic1 rrdtool1 ca-bundle libmbedtls12 bind-libs screen&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=375</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=375"/>
		<updated>2019-12-16T20:45:28Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* figlet to create ASCII test */ too many quotes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Main_Page&amp;diff=374</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Main_Page&amp;diff=374"/>
		<updated>2019-12-12T20:43:51Z</updated>

		<summary type="html">&lt;p&gt;Marc: Bob&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenue sur le wiki {{SERVERNAME}}&lt;br /&gt;
&lt;br /&gt;
=Services du Cloud Leurent=&lt;br /&gt;
Ci-dessous, vous trouverez un lien vers le Cloud Leurent, Le Webmail Leurent ainsi qu&#039;à leur présentation. Si vous le désirez, vous pouvez ensuite configurer votre Téléphone ou PC ou Macbook afin d&#039;utiliser votre client de messagerie préféré&lt;br /&gt;
{|&lt;br /&gt;
![[File:nextcloud.png|180px|link=https://{{SERVERNAME}}/nextcloud|Nextcloud Leurent]]&lt;br /&gt;
!&lt;br /&gt;
*&#039;&#039;&#039;URL Nextcloud Leurent&#039;&#039;&#039;: https://{{SERVERNAME}}/nextcloud&lt;br /&gt;
*&#039;&#039;&#039;Documentation du Cloud&#039;&#039;&#039;: [[Nextcloud_Leurent]] [[File:Book notice.svg|30x30px|link=Nextcloud_Leurent]]&lt;br /&gt;
|-&lt;br /&gt;
![[File:roundcube.png|180px|link=https://www.leurent.eu/roundcube|Webmail Leurent]]&lt;br /&gt;
!&lt;br /&gt;
*&#039;&#039;&#039;URL&#039;&#039;&#039; Webmail Leurent: https://{{SERVERNAME}}/roundcube&lt;br /&gt;
*&#039;&#039;&#039;Documentation du Webmail&#039;&#039;&#039;: [[Roundcube_Leurent]] [[File:Book notice.svg|30x30px|link=Roundcube_Leurent]]&lt;br /&gt;
|-&lt;br /&gt;
!WebTree Familly Leurent&lt;br /&gt;
!&lt;br /&gt;
*URL WebTrees: https://{{SERVERNAME}}/webtrees/index.php?ctype=gedcom&amp;amp;ged=leurent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Actu=&lt;br /&gt;
{{Special:RecentChanges/limit=10}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Admin Tools=&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
![[File:centreon.png|100px|link=https://{{SERVERNAME}}/centreon|Centreon Leurent]]&lt;br /&gt;
![[File:cacti3.png|100px|link=https://www.leurent.eu/cacti|Cacti Leurent]]&lt;br /&gt;
![[File:tuxtools.png|100px|link=Tools|Useful Tools]]&lt;br /&gt;
![[File:faq.png|100px|link=FAQ|FAQ on Linux, Raspberry, ...]]&lt;br /&gt;
![[File:librespeed.png|100px|link=https://speed.leurent.eu|SpeedTest speed.leurent.eu]]&lt;br /&gt;
|-&lt;br /&gt;
![https://{{SERVERNAME}}/centreon Centreon]&lt;br /&gt;
![https://{{SERVERNAME}}/cacti Cacti]&lt;br /&gt;
!&#039;&#039;&#039;[[Tools|Useful Tools]]&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039;&lt;br /&gt;
!https://speed.leurent.eu&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Main_Page&amp;diff=373</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Main_Page&amp;diff=373"/>
		<updated>2019-12-12T20:43:38Z</updated>

		<summary type="html">&lt;p&gt;Marc: Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenue sur le wiki {{SERVERNAME}}&lt;br /&gt;
&lt;br /&gt;
Test &lt;br /&gt;
&lt;br /&gt;
=Services du Cloud Leurent=&lt;br /&gt;
Ci-dessous, vous trouverez un lien vers le Cloud Leurent, Le Webmail Leurent ainsi qu&#039;à leur présentation. Si vous le désirez, vous pouvez ensuite configurer votre Téléphone ou PC ou Macbook afin d&#039;utiliser votre client de messagerie préféré&lt;br /&gt;
{|&lt;br /&gt;
![[File:nextcloud.png|180px|link=https://{{SERVERNAME}}/nextcloud|Nextcloud Leurent]]&lt;br /&gt;
!&lt;br /&gt;
*&#039;&#039;&#039;URL Nextcloud Leurent&#039;&#039;&#039;: https://{{SERVERNAME}}/nextcloud&lt;br /&gt;
*&#039;&#039;&#039;Documentation du Cloud&#039;&#039;&#039;: [[Nextcloud_Leurent]] [[File:Book notice.svg|30x30px|link=Nextcloud_Leurent]]&lt;br /&gt;
|-&lt;br /&gt;
![[File:roundcube.png|180px|link=https://www.leurent.eu/roundcube|Webmail Leurent]]&lt;br /&gt;
!&lt;br /&gt;
*&#039;&#039;&#039;URL&#039;&#039;&#039; Webmail Leurent: https://{{SERVERNAME}}/roundcube&lt;br /&gt;
*&#039;&#039;&#039;Documentation du Webmail&#039;&#039;&#039;: [[Roundcube_Leurent]] [[File:Book notice.svg|30x30px|link=Roundcube_Leurent]]&lt;br /&gt;
|-&lt;br /&gt;
!WebTree Familly Leurent&lt;br /&gt;
!&lt;br /&gt;
*URL WebTrees: https://{{SERVERNAME}}/webtrees/index.php?ctype=gedcom&amp;amp;ged=leurent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Actu=&lt;br /&gt;
{{Special:RecentChanges/limit=10}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Admin Tools=&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
![[File:centreon.png|100px|link=https://{{SERVERNAME}}/centreon|Centreon Leurent]]&lt;br /&gt;
![[File:cacti3.png|100px|link=https://www.leurent.eu/cacti|Cacti Leurent]]&lt;br /&gt;
![[File:tuxtools.png|100px|link=Tools|Useful Tools]]&lt;br /&gt;
![[File:faq.png|100px|link=FAQ|FAQ on Linux, Raspberry, ...]]&lt;br /&gt;
![[File:librespeed.png|100px|link=https://speed.leurent.eu|SpeedTest speed.leurent.eu]]&lt;br /&gt;
|-&lt;br /&gt;
![https://{{SERVERNAME}}/centreon Centreon]&lt;br /&gt;
![https://{{SERVERNAME}}/cacti Cacti]&lt;br /&gt;
!&#039;&#039;&#039;[[Tools|Useful Tools]]&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039;&lt;br /&gt;
!https://speed.leurent.eu&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=372</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=372"/>
		<updated>2019-12-02T21:21:22Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* figlet to create ASCII test */ Add update-motd.d example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of usage&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[/etc/update-motd.d]# cat /etc/update-motd.d/10-logo&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Display the hostname with a fancy ASCII mode&lt;br /&gt;
figlet -w 120 -t `hostname -f``&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=371</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=371"/>
		<updated>2019-12-02T20:55:00Z</updated>

		<summary type="html">&lt;p&gt;Marc: figlet to create ASCII test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync figlet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;br /&gt;
&lt;br /&gt;
= Others =&lt;br /&gt;
&lt;br /&gt;
== figlet to create ASCII test ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
(SSH):marc@cloud:[~]$ figlet cloud&lt;br /&gt;
      _                 _ &lt;br /&gt;
  ___| | ___  _   _  __| |&lt;br /&gt;
 / __| |/ _ \| | | |/ _` |&lt;br /&gt;
| (__| | (_) | |_| | (_| |&lt;br /&gt;
 \___|_|\___/ \__,_|\__,_|&lt;br /&gt;
                          &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=370</id>
		<title>FAQ:OpenWRT</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:OpenWRT&amp;diff=370"/>
		<updated>2019-11-13T20:18:37Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Perso */ List overlay installed packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Perso =&lt;br /&gt;
&lt;br /&gt;
== Install basic packages ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install diffutils lsof usbutils htop screen&lt;br /&gt;
&lt;br /&gt;
opkg install snmpd&lt;br /&gt;
opkg install mount-utils block-mount kmod-usb-storage kmod-fs-ext4 kmod-fs-vfat kmod-fs-exfat kmod-fs-ntfs kmod-fs-hfs kmod-fs-hfsplus kmod-nls-cp437 kmod-nls-iso8859-1&lt;br /&gt;
&lt;br /&gt;
opkg install dnsmasq-full&lt;br /&gt;
# Go in http://10.146.199.1/cgi-bin/luci/admin/network/dhcp Advanced Settings and enable both DNSSEC option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List overlay installed packages ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Information&#039;&#039;&#039;: Tip is extracted from https://openwrt.org/docs/guide-user/installation/generic.sysupgrade&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# find /usr/lib/opkg/info -name &amp;quot;*.control&amp;quot; \( \&lt;br /&gt;
         \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \&lt;br /&gt;
         \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \&lt;br /&gt;
         \( -exec echo {} unknown \; \) \&lt;br /&gt;
         \) | sed -e &#039;s,.*/,,;s/\.control /\t/&#039; | grep overlay | awk &#039;{print $1}&#039; | tr &amp;quot;\n&amp;quot; &amp;quot; &amp;quot; | xargs echo opkg install &lt;br /&gt;
opkg install librt librpc bind-client ddns-scripts luci-app-ddns terminfo diffutils ddns-scripts_nsupdate zlib lsof libncurses usbutils htop libusb-1.0 libopenssl bind-libs screen&lt;br /&gt;
root@OpenWrt:~# &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DDNS =&lt;br /&gt;
&lt;br /&gt;
== Install ddns-scripts_nsupdate ==&lt;br /&gt;
&lt;br /&gt;
* On the server that will generate Kopenwrt.+157+55429.key and Kopenwrt.+157+55429.private files&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnssec-keygen -a HMAC-md5 -b 512 -n USER openwrt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the /etc/bind9/named.conf.local, update section like this one&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
key openwrt {&lt;br /&gt;
        algorithm HMAC-MD5;&lt;br /&gt;
        secret &amp;quot;ADDTHEKEYFROM_openwrt_PRIVATE_FILE&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        notify yes;&lt;br /&gt;
        file &amp;quot;/etc/bind/leurent/leurent.eu.db&amp;quot;;&lt;br /&gt;
        update-policy { grant openwrt name openwrt.leurent.eu A; };&lt;br /&gt;
        ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* On openwrt box, you can install ddns-scripts_nsupdate + LUCI Interface and have a look at /usr/lib/ddns/update_nsupdate.sh to see how it works&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install ddns-scripts_nsupdate luci-app-ddns&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Now you can go in LUCI &#039;&#039;&#039;Services&#039;&#039;&#039; / &#039;&#039;&#039;Dynamic DNS&#039;&#039;&#039; section&lt;br /&gt;
# Use the bind-nsupdate client&lt;br /&gt;
## In Basic Settings&lt;br /&gt;
### Set &#039;&#039;&#039;Lookup Hostname&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;DDNS Service provider [IPv4]&#039;&#039;&#039; = bind-nsupdate&lt;br /&gt;
### Set &#039;&#039;&#039;Domain&#039;&#039;&#039; = openwrt.leurent.eu&lt;br /&gt;
### Set &#039;&#039;&#039;Username&#039;&#039;&#039; = openwrt&lt;br /&gt;
### Set &#039;&#039;&#039;Password&#039;&#039;&#039; = For the password copy the &amp;quot;secret&amp;quot; of the HMAC-MD5 key&lt;br /&gt;
## In Advanced Settings&lt;br /&gt;
### Set &#039;&#039;&#039;DNS-Server&#039;&#039;&#039; = ns1.leurent.eu&lt;br /&gt;
&lt;br /&gt;
= System Commands =&lt;br /&gt;
== Upgrade all packages ==&lt;br /&gt;
{{Warning|Start the command in a screen because if you upgrade netifd for exemple, you will loose connection and kill the upgrade in the middle of the process}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen&lt;br /&gt;
opkg update&lt;br /&gt;
opkg list-upgradable | cut -f 1 -d &#039; &#039; | xargs opkg upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
cf https://lede-project.org/docs/user-guide/opkg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Use a Huawei USB LTE HiLink Modem as 4G Backup on my OpenWRT Router =&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=These commands came from https://lecrabeinfo.net/installer-firmware-openwrt-sur-routeur-wi-fi.html#un-modem-lte-4g}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install usb-modeswitch and kmod-usb-net-rndis to switch the LTE stick from USB storage to USB LTE Modem&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install kmod-usb-net-rndis usb-modeswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify the mode did switch, otherwise insert back the key or reboot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# lsusb | grep LTE&lt;br /&gt;
Bus 002 Device 003: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that you have a new network interface (eth2 in my case)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@LEDE:~# dmesg | grep cdc_ether&lt;br /&gt;
[   16.075790] usbcore: registered new interface driver cdc_ether&lt;br /&gt;
[   19.232911] cdc_ether 2-1:1.0 eth2: register &#039;cdc_ether&#039; at usb-f10f8000.usb3-1, CDC Ethernet Device, 0c:5b:8f:xx:xx:xx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setup a new wwan interface with eth2 + DHCP mode&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci set network.wwan=interface&lt;br /&gt;
uci set network.wwan.ifname=&#039;eth2&#039;&lt;br /&gt;
uci set network.wwan.proto=&#039;dhcp&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable firewall on wwan&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uci add_list firewall.@zone[1].network=&#039;wwan&#039;&lt;br /&gt;
uci commit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart Router&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Go in LUCI Interfaces / &#039;&#039;&#039;Network&#039;&#039;&#039; / &#039;&#039;&#039;Interfaces&#039;&#039;&#039; - WWAN / &#039;&#039;&#039;Advanced Configuration&#039;&#039;&#039; / Set &#039;&#039;&#039;Use gateway metric&#039;&#039;&#039; = 10. So you can see afterwards that the route via WWAN interface is used as backup if the default route goes down&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@OpenWrt:~# ip route&lt;br /&gt;
default via 212.147.11.76 dev pppoe-wan &lt;br /&gt;
default via 192.168.8.1 dev eth2  src 192.168.8.100  metric 10 &lt;br /&gt;
10.146.199.0/24 dev br-lan scope link  src 10.146.199.1 &lt;br /&gt;
192.168.8.0/24 dev eth2 scope link  metric 10 &lt;br /&gt;
212.147.11.76 dev pppoe-wan scope link  src 83.228.247.238 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=Main_Page&amp;diff=369</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=Main_Page&amp;diff=369"/>
		<updated>2019-10-25T19:42:05Z</updated>

		<summary type="html">&lt;p&gt;Marc: Add speedtest&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenue sur le wiki {{SERVERNAME}} &lt;br /&gt;
&lt;br /&gt;
= Services du Cloud Leurent =&lt;br /&gt;
Ci-dessous, vous trouverez un lien vers le Cloud Leurent, Le Webmail Leurent ainsi qu&#039;à leur présentation. Si vous le désirez, vous pouvez ensuite configurer votre Téléphone ou PC ou Macbook afin d&#039;utiliser votre client de messagerie préféré&lt;br /&gt;
{|&lt;br /&gt;
![[File:nextcloud.png|180px|link=https://{{SERVERNAME}}/nextcloud|Nextcloud Leurent]]&lt;br /&gt;
!&lt;br /&gt;
* &#039;&#039;&#039;URL Nextcloud Leurent&#039;&#039;&#039;: https://{{SERVERNAME}}/nextcloud&lt;br /&gt;
* &#039;&#039;&#039;Documentation du Cloud&#039;&#039;&#039;: [[Nextcloud_Leurent]] [[File:Book notice.svg|30x30px|link=Nextcloud_Leurent]]&lt;br /&gt;
|-&lt;br /&gt;
![[File:roundcube.png|180px|link=https://www.leurent.eu/roundcube|Webmail Leurent]]&lt;br /&gt;
!&lt;br /&gt;
* &#039;&#039;&#039;URL&#039;&#039;&#039; Webmail Leurent: https://{{SERVERNAME}}/roundcube&lt;br /&gt;
* &#039;&#039;&#039;Documentation du Webmail&#039;&#039;&#039;: [[Roundcube_Leurent]] [[File:Book notice.svg|30x30px|link=Roundcube_Leurent]]&lt;br /&gt;
|-&lt;br /&gt;
!WebTree Familly Leurent&lt;br /&gt;
!&lt;br /&gt;
* URL WebTrees: https://{{SERVERNAME}}/webtrees/index.php?ctype=gedcom&amp;amp;ged=leurent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Actu =&lt;br /&gt;
{{Special:RecentChanges/limit=10}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Admin Tools =&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
![[File:centreon.png|100px|link=https://{{SERVERNAME}}/centreon|Centreon Leurent]]&lt;br /&gt;
![[File:cacti3.png|100px|link=https://www.leurent.eu/cacti|Cacti Leurent]]&lt;br /&gt;
![[File:tuxtools.png|100px|link=Tools|Useful Tools]]&lt;br /&gt;
![[File:faq.png|100px|link=FAQ|FAQ on Linux, Raspberry, ...]]&lt;br /&gt;
![[File:librespeed.png|100px|link=https://speed.leurent.eu|SpeedTest speed.leurent.eu]]&lt;br /&gt;
|-&lt;br /&gt;
![https://{{SERVERNAME}}/centreon Centreon]&lt;br /&gt;
![https://{{SERVERNAME}}/cacti Cacti]&lt;br /&gt;
!&#039;&#039;&#039;[[Tools|Useful Tools]]&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039;&lt;br /&gt;
!https://speed.leurent.eu&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=File:Librespeed.png&amp;diff=368</id>
		<title>File:Librespeed.png</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=File:Librespeed.png&amp;diff=368"/>
		<updated>2019-10-25T19:41:07Z</updated>

		<summary type="html">&lt;p&gt;Marc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=367</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=367"/>
		<updated>2019-10-24T17:27:43Z</updated>

		<summary type="html">&lt;p&gt;Marc: /*  Mail Platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Email AutoDiscover ===&lt;br /&gt;
&lt;br /&gt;
cf https://wiki.mozilla.org/Thunderbird:Autoconfiguration&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
	<entry>
		<id>https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=366</id>
		<title>FAQ:Linux</title>
		<link rel="alternate" type="text/html" href="https://www.leurent.eu/mediawiki/index.php?title=FAQ:Linux&amp;diff=366"/>
		<updated>2019-09-20T11:41:55Z</updated>

		<summary type="html">&lt;p&gt;Marc: /* Install Collabora Online */ Update link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Install =&lt;br /&gt;
&lt;br /&gt;
== Install all my basic useful tools ==&lt;br /&gt;
&lt;br /&gt;
Here is a command to install all the small tools that are quite useful&lt;br /&gt;
&lt;br /&gt;
 apt install vim screen zsh htop iftop iotop subversion git ndisc6 debian-goodies sipcalc pwgen lshw apt-file sudo lvm2 apticron vlan dnsutils whois ldap-utils apt-transport-https xfsprogs rsync&lt;br /&gt;
&lt;br /&gt;
= Network =&lt;br /&gt;
&lt;br /&gt;
== Setup IPv6 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Install the dibbler client&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install dibbler-client&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update the client-duid with the one gaven for IPv6 by your provider&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# cat /var/lib/dibbler/client-duid&lt;br /&gt;
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Edit your /etc/dibbler/client.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Defaults for dibbler-client.&lt;br /&gt;
# installed at /etc/dibbler/client.conf by the maintainer scripts&lt;br /&gt;
# DDUID is stored in /var/lib/dibbler/client-duid&lt;br /&gt;
&lt;br /&gt;
# 8 (Debug) is most verbose. 7 (Info) is usually the best option&lt;br /&gt;
#log-level 7&lt;br /&gt;
&lt;br /&gt;
# To perform stateless (i.e. options only) configuration, uncomment&lt;br /&gt;
# this line below and remove any &amp;quot;ia&amp;quot; keywords from interface definitions&lt;br /&gt;
# stateless&lt;br /&gt;
&lt;br /&gt;
auth-protocol reconfigure-key&lt;br /&gt;
auth-replay monotonic&lt;br /&gt;
auth-methods digest-hmac-md5&lt;br /&gt;
duid-type duid-ll&lt;br /&gt;
inactive-mode&lt;br /&gt;
log-level 8&lt;br /&gt;
&lt;br /&gt;
iface eth0 {&lt;br /&gt;
# ask for address&lt;br /&gt;
    #ia&lt;br /&gt;
    pd&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Update /etc/network/interfaces with the address to use&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iface eth0 inet6 static&lt;br /&gt;
         address 2001:bc8:1234:1234::1234&lt;br /&gt;
         netmask 64&lt;br /&gt;
         accept_ra 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== nftables Firewall : Now use nftables instead of (ip|ip6|arp|eb)tables ==&lt;br /&gt;
&lt;br /&gt;
{{Notice|1=Since Debian Buster, the default firewall is now nftables and not iptables anymore, it is time to switch to this new firewall which is really really powerful and merges (ip|ip6|arp|eb)tables into a single too}}&lt;br /&gt;
{{Notice|1=One of the main pros that I found was the possibility to merge IPv4 and IPv6 UDP/TCP ports into a single rule using the &amp;quot;table inet filter&amp;quot;}}&lt;br /&gt;
{{Notice|1=You can also use the &amp;quot;sets&amp;quot; to use set if IPs/ports/services/protocols that you can dynamically use in any rule and update it afterwards}}&lt;br /&gt;
{{Notice|1=In the end, the configuration file can be really tiny thanks to the flexibility of the tool}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|1=To start I really recommend you to read https://wiki.nftables.org/wiki-nftables/index.php/Main_Page and https://kernelnewbies.org/nftables_examples }}&lt;br /&gt;
&lt;br /&gt;
=== Enable nft autocompletion in ZSH !! ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Problem&#039;&#039;&#039;: At this time, zsh 5.7.1-1 doesn&#039;t include the _nftables completion script for nftables !!&lt;br /&gt;
* &#039;&#039;&#039;Solution&#039;&#039;&#039;: Manually enable it with the command below&lt;br /&gt;
 cd /usr/share/zsh/functions/Completion/Linux&lt;br /&gt;
 wget https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/_nftables&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:[~]# nft list ruleset&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0; policy drop;&lt;br /&gt;
                iif &amp;quot;lo&amp;quot; accept&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
                ct state invalid drop&lt;br /&gt;
                ip6 saddr fe80::/10 udp dport dhcpv6-client counter packets 26 bytes 3484 accept&lt;br /&gt;
                ip6 saddr fe80::/10 tcp dport dhcpv6-client counter packets 0 bytes 0 accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp accept&lt;br /&gt;
                ip6 nexthdr ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-done, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert, mld2-listener-report } accept&lt;br /&gt;
                ip protocol icmp icmp type { destination-unreachable, echo-request, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept&lt;br /&gt;
                tcp dport { ssh, http, https } ct state new accept&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain forward {&lt;br /&gt;
                type filter hook forward priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        chain output {&lt;br /&gt;
                type filter hook output priority 0; policy accept;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List all sets ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@cloud:~# nft add set inet filter blackhole {type ipv4_addr \; }&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft add element inet filter blackhole { 1.1.1.1, 2.2.2.2}&lt;br /&gt;
&lt;br /&gt;
root@cloud:~# nft list set inet filter blackhole&lt;br /&gt;
table inet filter {&lt;br /&gt;
        set blackhole {&lt;br /&gt;
                type ipv4_addr&lt;br /&gt;
                elements = { 1.1.1.1, 2.2.2.2 }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System =&lt;br /&gt;
&lt;br /&gt;
== MariaDB ==&lt;br /&gt;
 apt install mysql-server mysql-client&lt;br /&gt;
&lt;br /&gt;
== NextCloud ==&lt;br /&gt;
&lt;br /&gt;
=== Install Collabora Online ===&lt;br /&gt;
&lt;br /&gt;
Please follow https://www.collaboraoffice.com/code/linux-packages/&lt;br /&gt;
&lt;br /&gt;
== Bind9 ==&lt;br /&gt;
&lt;br /&gt;
 apt install bind9&lt;br /&gt;
&lt;br /&gt;
=== Enable DNSSEC for a domain ===&lt;br /&gt;
&lt;br /&gt;
https://kb.isc.org/docs/aa-00626&lt;br /&gt;
https://linux.die.net/man/1/dig&lt;br /&gt;
https://www.isc.org/downloads/bind/dnssec/&lt;br /&gt;
https://ftp.isc.org/isc/dnssec-guide/dnssec-guide.pdf&lt;br /&gt;
http://www.average.org/dnssec/dnssec-configuring-auto-signed-dynamic-zones.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verify if your domain is already secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
* Generate RSA keys to sign the Zone and RRs. Allow bind to read the private key to automatically sign&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# cd /etc/bind/keys&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair...+++++ ................................................................................................................+++++ &lt;br /&gt;
Kleurent.eu.+005+65487&lt;br /&gt;
root@link:[/etc/../keys]# dnssec-keygen -f KSK -K /etc/bind/keys leurent.eu&lt;br /&gt;
Generating key pair....+++++ .....................+++++ &lt;br /&gt;
Kleurent.eu.+005+36097&lt;br /&gt;
root@link:[/etc/../keys]# chmod g+r /etc/bind/keys/Kleurent.eu.*.private&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update your /etc/bind/named.conf.local zone &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
zone &amp;quot;leurent.eu&amp;quot; {&lt;br /&gt;
            ...&lt;br /&gt;
            ...&lt;br /&gt;
            # look for dnssec keys here:&lt;br /&gt;
            key-directory &amp;quot;/etc/bind/keys&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            # publish and activate dnssec keys:&lt;br /&gt;
            auto-dnssec maintain;&lt;br /&gt;
&lt;br /&gt;
            # use inline signing:&lt;br /&gt;
            inline-signing yes;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Reload bind9&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# systemctl reload bind9.service                                                                                                23:22 Wed 27/02/2019&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Once reloaded you should see an additional .signed version of the zone that will be automatically maintained&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[/etc/../leurent]# ll&lt;br /&gt;
total 36K&lt;br /&gt;
-rw-r--r-- 1 bind bind  515 Apr 11  2017 7.e.7.3.8.c.b.0.1.0.0.2.ip6.arpa.db&lt;br /&gt;
-rw-r--r-- 1 bind bind 2.0K Feb 27 23:03 leurent.eu.db&lt;br /&gt;
-rw-r--r-- 1 bind bind  512 Feb 27 23:08 leurent.eu.db.jbk&lt;br /&gt;
-rw-r--r-- 1 bind bind  19K Feb 27 23:22 leurent.eu.db.signed&lt;br /&gt;
-rw-r--r-- 1 bind bind 1.8K Feb 27 23:08 leurent.eu.db.signed.jnl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the public key of your 257 (KSK) and 256 (ZSK) &lt;br /&gt;
&lt;br /&gt;
* Verify the the DS and DNSKEY are visible&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DS leurent.eu @8.8.8.8 &lt;br /&gt;
65487 5 2 92937B171A4B9156CC812C1ECD74973AD48DF03A4733FD6E401C28B9 61A8F27A&lt;br /&gt;
36097 5 2 85619198D6D6EEFE608F59ADC3D3EFECF86452CE1667460B800334B0 B7BEFFC4&lt;br /&gt;
DS 8 2 86400 20190306222103 20190227212103 27363 eu. mBn1LoJ/OcNwgLpOYhpG9fkjZPtDfUPcc4ub+JdI0891/vJ1TcbEU6NU nQJ1poXJwps6L7j9gxLqiDR8+mTiSTgCH5JGHPn4wAWU4JEyhlrT3t+t CeFS8voKo70czMY0+LorM7/AnqV68DqLsxkpYlT4t3coQpkgpdEuI2Ev tZ8=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MBP-de-Marc:~ marc$ dig +dnssec +short DNSKEY leurent.eu @8.8.8.8 &lt;br /&gt;
257 3 5 AwEAAbKf831QWrZcZqzDtbXcdpyBIHvGsnGp3G8HUZvNRQnqKb/tiDDa /8gRzlsO0mFlN1HfBZJlLUWuicj+uV2qjtwfdZkktzD10UkpbbIXKzfP pKx5H77tzcsCa+3x1jzoF5/c0nTi3gLJLxfOVbpZEf1r9KPgxPErzXIl dxl1fP59V3bRLgznNh0TA2t1/+cP4imXyL8LZp3y7NW2nR91ARegGznX 9b5+lCN4WR2vxTU+s3YIbtHNN9bVScC+w58dVNRN4AylniN4ofGnsUpH C/t2uA3rNsSUzBbMbmFJCx9v2+nEB8ki5KSBrrSy8UIvOLLiD527XD0F 8piFl0H9Ln0=&lt;br /&gt;
256 3 5 AwEAAeaymGqZKkBwMXSj90IWRVcIbGvlM3JhPdzTmYWeQJPyVGkqgihg IiT+R3ftJ0wRiUSNJSVmRIQYP3UnUUb9AV4ti5xStmAvWbGI+q9Poasg feK8ZghMKPkPTOsfmrNVXIYzOGzv6z5VEpXJG5e7Ho3gVFqXSQZDfwBb tFs/0y6L&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 36097 leurent.eu. W+MlbgrDHCgxHmPB4dLMyyXyDwDxGNiH2FnMDt06dr+vSJBwuVdxwvKo fbxehQRXi/lM0P+/RinWni5dWFhhyhSqQKZj/E+gjxEQEHCuMosGiNx7 LR1KaofLLpeYRo1xEf6YWcc5BjIkA+FB22bdfBVBLhPy9PL6qQO+TGjX rufhkEyaPfsLkXSPraAiAu7IPA+QgE2TbqalsxBHh7rS4g16z3C5yCk2 FaV9BL6W9Dua3Xwnf/xEhrq+befqCPCFl97nhKbBlvXYiZEoqY5jAugS cKTQfNTxPSzmnewKmb6PKmiI2w178gldIA9J+TbyzvMqpCF+AfgAFACw /5PaVA==&lt;br /&gt;
DNSKEY 5 2 3600 20190329220145 20190227210145 65487 leurent.eu. w8AAJG/p0pHZE1TRiRN8dPz/b4eUZexQRuJJ8Zdx9QMLWlkc2fo/Dm/a CrLGbpTALBEG0oAAMg7A4qH+pp/LPSwf3QcgfrMF3bo7gb+lqKGCoX6+ JU2t5vJDcNkvl2NgxohVgwS/k4+Z8+xloYqKc9FtisCujHO2n22Z45ez Cxc=&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that your domain is now secured by DNSSEC using https://dnslookup.org/{{SERVERNAME}}/A/#dnssec&lt;br /&gt;
&lt;br /&gt;
== Certbot : Manage LetsEncrypt Certificate == &lt;br /&gt;
&lt;br /&gt;
{{Notice|1=The certificate will be automatically renewed before expiry from the cron file if necessary}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install certbot &amp;gt; 0.22 to get wildcard support ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# apt install certbot python-certbot-apache python3-certbot-dns-rfc2136&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* https://certbot-dns-rfc2136.readthedocs.io/en/stable/ will help you create a TSIG keys for auto updates&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~/LETSENCRYPT]# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST acme-challenge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.eu + *.leurent.eu ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Method using DNS to authenticate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@link:[~]# certbot -d leurent.eu -d &amp;quot;*.leurent.eu&amp;quot; certonly --dns-rfc2136 --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini --dns-rfc2136-propagation-seconds 10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a new cert for leurent.ch using webroot folder ===&lt;br /&gt;
* &#039;&#039;&#039;Method creating a file in the web folder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot --authenticator webroot --installer apache --webroot-path /home/web/www.leurent.ch -d leurent.ch -d www.leurent.ch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Force Renewal ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@tidus:[~]# certbot renew --force-renewal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GeoIP ==&lt;br /&gt;
=== Apache + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages ( NB: You need the contrib repo enabled )&#039;&#039;&#039;&lt;br /&gt;
 apt install libapache2-mod-geoip geoip-bin geoip-database-contrib&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is an extract of /etc/apache2/conf-enabled/cacti.conf to enable GeoIP Restriction&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf-enabled/cacti.conf&lt;br /&gt;
Alias /cacti /usr/share/cacti/site&lt;br /&gt;
&lt;br /&gt;
# Enable Geoip Module&lt;br /&gt;
GeoIPEnable On&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat IndexCache&lt;br /&gt;
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat IndexCache&lt;br /&gt;
# Allow only connection from Switzerland or France&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 FR AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE CH AllowCountry_cacti&lt;br /&gt;
SetEnvIf GEOIP_COUNTRY_CODE_V6 CH AllowCountry_cacti&lt;br /&gt;
&amp;lt;Directory /usr/share/cacti/site&amp;gt;&lt;br /&gt;
        Options +FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfVersion &amp;gt;= 2.3&amp;gt;&lt;br /&gt;
                Require env AllowCountry_cacti&lt;br /&gt;
                #Require all granted&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt; &lt;br /&gt;
        &amp;lt;IfVersion &amp;lt; 2.3&amp;gt;&lt;br /&gt;
                Order Allow,Deny&lt;br /&gt;
                Allow from env=AllowCountry_cacti&lt;br /&gt;
        &amp;lt;/IfVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        AddType application/x-httpd-php .php&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
                php_flag magic_quotes_gpc Off&lt;br /&gt;
                php_flag short_open_tag On&lt;br /&gt;
                php_flag register_globals Off&lt;br /&gt;
                php_flag register_argc_argv On&lt;br /&gt;
                php_flag track_vars On&lt;br /&gt;
                # this setting is necessary for some locales&lt;br /&gt;
                php_value mbstring.func_overload 0&lt;br /&gt;
                php_value include_path .&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        DirectoryIndex index.php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Iptables + GeoIP ===&lt;br /&gt;
* &#039;&#039;&#039;Install the needed packages&#039;&#039;&#039;&lt;br /&gt;
 apt install xtables-addons-dkms libtext-csv-xs-perl libnet-cidr-lite-perl&lt;br /&gt;
&lt;br /&gt;
* Get the /usr/lib/xtables-addons/xt_geoip_dl and /usr/lib/xtables-addons/xt_geoip_build of xtables-addons 3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Here is the cron file I use to download and format everything : /etc/cron.monthly/geoip&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# apt install libnet-cidr-lite-perl libtext-csv-xs-perl&lt;br /&gt;
&lt;br /&gt;
# Create Archives folder&lt;br /&gt;
XTGEOIP=/usr/share/xt_geoip/&lt;br /&gt;
cd $XTGEOIP&lt;br /&gt;
&lt;br /&gt;
# Download Last Version of GeoLite2-Country&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_dl&lt;br /&gt;
&lt;br /&gt;
# build copy GeoLite2 Country Databases&lt;br /&gt;
cd $XTGEOIP/GeoLite2-Country-CSV_*&lt;br /&gt;
/usr/lib/xtables-addons/xt_geoip_build -D $XTGEOIP $XTGEOIP/GeoLite2-Country-CSV_*/*.csv&lt;br /&gt;
&lt;br /&gt;
# remove download GeoLite2 Country Database&lt;br /&gt;
rm $XTGEOIP/GeoLite2-Country-CSV_* -rf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SpamAssassin + GeoIP ===&lt;br /&gt;
&lt;br /&gt;
 apt install libgeo-ip-perl&lt;br /&gt;
&lt;br /&gt;
== Kibana + Elasticsearch + Logstash: Log Analyser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kibana is a really powerful log analyser ( big data gathering and analyse )&lt;br /&gt;
&lt;br /&gt;
* Read https://www.elastic.co/guide/en/kibana/current/deb.html and install the repo&lt;br /&gt;
* Read https://github.com/robcowart/elastiflow to get up and running with some beautiful netflow analysis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&lt;br /&gt;
echo &amp;quot;deb https://artifacts.elastic.co/packages/6.x/apt stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list&lt;br /&gt;
echo &amp;quot;deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/curator.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install kibana elasticsearch elasticsearch-curator python-elasticsearch logstash &lt;br /&gt;
&lt;br /&gt;
systemctl enable logstash.service&lt;br /&gt;
systemctl enable elasticsearch.service&lt;br /&gt;
systemctl enable kibana.service&lt;br /&gt;
&lt;br /&gt;
systemctl start logstash.service&lt;br /&gt;
systemctl start elasticsearch.service&lt;br /&gt;
systemctl start kibana.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LDAP user backend ==&lt;br /&gt;
&lt;br /&gt;
* Install slapd&lt;br /&gt;
 apt install slapd&lt;br /&gt;
 dpkg-reconfigure slapd&lt;br /&gt;
&lt;br /&gt;
* Backup old server&lt;br /&gt;
  slapcat -n 0 -l /root/LDAP/slapcat_config_`date +%Y%m%d`.ldif &amp;amp;&amp;amp; slapcat -n 1 -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
&lt;br /&gt;
* Shutdown ldap server&lt;br /&gt;
 systemctl stop slapd&lt;br /&gt;
&lt;br /&gt;
* Delete config and import config from backup&lt;br /&gt;
 tar cvzf /root/LDAP/slapd.d_OLD.tgz /etc/ldap/slapd.d &amp;amp;&amp;amp; rm -r /etc/ldap/slapd.d&lt;br /&gt;
 mkdir /etc/ldap/slapd.d&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /etc/ldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
* Import Data&lt;br /&gt;
 tar cvzf /root/LDAP/LDAP-old-data.tgz /var/lib/ldap &amp;amp;&amp;amp; rm -r /var/lib/ldap&lt;br /&gt;
 mkdir /var/lib/ldap&lt;br /&gt;
 slapadd -n 1 -F /etc/ldap/slapd.d -l /root/LDAP/slapcat_data_`date +%Y%m%d`.ldif&lt;br /&gt;
 chown -R openldap:openldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
* Restart LDAP server&lt;br /&gt;
 systemctl start slapd&lt;br /&gt;
&lt;br /&gt;
* Install libpam-ldap and libnss-ldap and nscd&lt;br /&gt;
 # You will be asked for the admin account + an unpriviledged account&lt;br /&gt;
 apt install libnss-ldap libpam-ldap&lt;br /&gt;
&lt;br /&gt;
* Update /etc/nsswitch.conf to add ldap &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
--- /etc/nsswitch.conf.old      2019-07-20 10:02:48.743787771 +0200&lt;br /&gt;
+++ /etc/nsswitch.conf  2019-07-20 10:14:12.422547865 +0200&lt;br /&gt;
@@ -4,9 +4,9 @@&lt;br /&gt;
 # If you have the `glibc-doc-reference&#039; and `info&#039; packages installed, try:&lt;br /&gt;
 # `info libc &amp;quot;Name Service Switch&amp;quot;&#039; for information about this file.&lt;br /&gt;
 &lt;br /&gt;
-passwd:         files systemd&lt;br /&gt;
-group:          files systemd&lt;br /&gt;
-shadow:         files&lt;br /&gt;
+passwd:         files systemd ldap&lt;br /&gt;
+group:          files systemd ldap&lt;br /&gt;
+shadow:         files ldap&lt;br /&gt;
 gshadow:        files&lt;br /&gt;
 &lt;br /&gt;
 hosts:          files dns&lt;br /&gt;
zsh: exit 1     diff -u /etc/nsswitch.conf.old /etc/nsswitch.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install Phpldapadmin ==&lt;br /&gt;
&lt;br /&gt;
# Verify if it is available in a backport&lt;br /&gt;
 apt install phpldapadmin php-xml&lt;br /&gt;
# Disable anonymous-read&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Netflow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg install softflowd&lt;br /&gt;
softflowctl expire-all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mail Platform ==&lt;br /&gt;
&lt;br /&gt;
 apt install postfix spamassassin postfix-policyd-spf-python&lt;br /&gt;
 apt install dovecot-imapd dovecot-managesieved dovecot-pop3d dovecot-sieve&lt;br /&gt;
 apt install roundcube roundcube-mysql roundcube-plugins php-zip php-net-sieve&lt;br /&gt;
&lt;br /&gt;
 Update innodb_log_file_size=2024MB for the attachement upload&lt;/div&gt;</summary>
		<author><name>Marc</name></author>
	</entry>
</feed>