Firewall op CentOS 7

Bij mijn vorige webserver stond de firewall standaard uit. dat is natuurlijk niet zo verstandig, dus probeer ik het bij mijn huidige server aan te laten staan. Maar dat levert wel wat extra uitzoekwerk op, hier en daar. In deze blog verzamel ik de dingen die ik er over heb ontdekt. deze gaan dus specifiek over CentOS 7 en let op: maak een backup voordat je dingen probeert die ik hier opschrijf.

Status en aan/uitzetten

Om te zien of de firewall aan staat, gebruik:
systemctl status firewalld

De firewall helemaal uitzetten:
systemctl disable firewalld
systemctl stop firewalld

De firewall weer aanzetten:
systemctl enable firewalld
systemctl start firewalld

Zones

De firewall in CentOS maakt gebruik van Zones. De zone die voor mij interessant is is de Public zone. Dat is de zone waarop alle regels zijn ingesteld die voor de buitenwereld gelden. Om te zien welke poorten open staan van buitenaf:

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

Poort toevoegen

  • Om een poort (bijvoorbeeld 1234) open te stellen van buitenaf:
    firewall-cmd --permanent --zone=public --add-port=1234/tcp
  • Daarna moet de firewall deze instelling ook gaan gebruiken:
    firewall-cmd --reload

Port verwijderen

  • Een poort afsluiten (bijvoorbeeld 1234) van buitenaf gaat zo:
    firewall-cmd --permanent --zone=public --remove-port=2222/tcp
  • Daarna moet de firewall deze instelling nog gaan gebruiken:
    firewall-cmd --reload

Een poort openstellen alleen voor een bepaald ipadres

Als je bijvoorbeeld MySQL wilt kunnen bereiken vanaf je thuisadres, dan moet je al in DirectAdmin je eigen ipadres toevoegen aan adressen die bij de database mogen. maar als je een firewall hebt dan ben je er dan nog niet. Een nette methode is een speciale zone aanmaken voor de locatie waar je toegang toe wilt verlenen. Je hebt dus Public, maar nu voeg je bijvoorbeeld twee zones toe: Work en Home.

  • Voeg een zone toe:
    firewall-cmd --permanent --new-zone=home
  • Reload de firewall om deze zone actief te maken:
    firewall-cmd --reload
  • Koppel een ipadres (bijvoorbeeld 1.2.3.4) aan deze zone:
    firewall-cmd --permanent --zone=home --add-source=1.2.3.4/32
  • Open nu een poort (bijvoorbeeld 1234):
    firewall-cmd --permanent --zone=home --add-port=1234/tcp

Beveiligen van DirectAdmin

DirectAdmin (DA) is een veelgebruikt beheersysteem op Linux-systemen. En terecht, want het is zeer gebruikersvriendelijk en compleet. Zeker in combinatie met Installatron. Maar in de bekendheid van DirectAdmin schuilt ook een gevaar. Eventuele kwaadwillenden (zijn die er dan?) weten hoe het systeem werkt. Daarom heb ik enkele maatregelen genomen en een paar daarvan wil ik met jullie delen. Voor alle aanpassingen geldt uiteraard dat je eerst een snapshot moet maken als extra backup.

Schakel root-access uit

Standaard wordt CentOS al geleverd zonder directe root access. Je kunt dus niet zondemeer via SSH inloggen van buitenaf, alleen via een ander account. Dus log in met een bestaand account (met weinig rechten) en gebruik het ‘su’ commando samen met een degelijk root-wachtwoord om root-access te verkrijgen. Zo vaak hoef je dankzij DirectAdmin nou ook weer niet als root in te loggen.

Gebruik sowieso nooit algemene accountnamen zoals info, mail, server oid. Maak de accountnaam al lang en specifiek en gebruik altijd een degelijk wachtwoord.

Suspend het Admin account

In DirectAdmin is er altijd een gebruiker Admin, lekker makkelijk voor hackers dat ze de naam alvast weten. Je kunt die naam niet eenvoudig wijzigen, althans ik niet. Wat ik heb gedaan is een nieuwe admin aanmaken met een naam die al bijna een wachtwoord is, met natuurlijk ook een sterk wachtwoord. Daarna heb ik de Admin van DA op suspended gezet, zorg wel dat je dit doet voordat je websites aanmaakt, of draag je websites eerst over aan de nieuwe Admin.

Schakel SSH uit voor websites die het niet nodig hebben

Of beter nog, schakel het aan voor sites die het wel nodig hebben. Ik heb dat gedaan door dat in te stellen in de standaard Reseller package. Nieuwe sites erven die package-instellingen.

Zorg dat je DirectAdmin enkel gebruikt via SSL

DirectAdmin gebruiken via SSL is erg belangrijk. Zonder SSL is het verkeer van jouw browser naar je server leesbaar door eventuele men-in-the-middle. Daarom is het slim om DirectAdmin alleen via SSL te gebruiken. Onderstaande werkwijze zorgt er ook voor dat apache, dovecot, exim en ftp via SSL gaan werken (bron).

  • maak verbinding als root (via Putty)
  • Zorg dat je voor server.domain.com jouw server-url neemt die DirectAdmin gebruikt!
  • Voer de volgende commando’s uit:
    cd /usr/local/directadmin/scripts
    ./letsencrypt.sh request server.domain.com 4096
    cd /usr/local/directadmin/conf
    perl -pi -e 's/SSL=0/SSL=1/' directadmin.conf
    echo "carootcert=/usr/local/directadmin/conf/carootcert.pem" >> directadmin.conf
    echo "force_hostname=server.domain.com" >> directadmin.conf
    echo "ssl_redirect_host=server.domain.com" >> directadmin.conf
    cd /usr/local/directadmin
    ./directadmin restart

Je kunt nu naar je server door voor het adres https:// te typen.

Zorg dat je DirectAdmin via een andere poort gebruikt dan de standaard poort

Standaard bereik je DirectAdmin via poort 2222. Het is een goed idee om een andere poort te gebruiken. Kwaadwillenden kunnen natuurlijk eenvoudig een poortscan uitvoeren en zo jouw alternatieve poort vinden, maar alle kleine beetjes helpen.

Als je net als ik CentOS 7 hebt en er is een firewall geïnstalleerd, dan is de poort aanpassen in DirectAdmin onvoldoende; de nieuwe poort zal wordt tegengehouden door de firewall. Je moet dus de nieuwe poort openzetten en later de standaard poort 2222 dichtzetten. De eerste stap gaat zo:

  • Maak contact als root (met Putty)
  • Bekijk welke poorten open staan vanaf buiten:
    firewall-cmd --zone=public --list-all
  • Voeg de nieuwe poort toe:
    firewall-cmd --permanent --zone=public --add-port=1234/tcp
    (1234 mag een andere poort zijn, die jij kiest)
  • Zorg dat de firewall deze nieuwe instellingen gaat gebruiken:
    firewall-cmd --reload

Instellen van een andere poort in DirectAdmin gaat (vreemd genoeg) het makkelijkst via DirectAdmin zelf.

  • Log in op DirectAdmin als (een) admin
  • Klik in het menu op File Editor
  • Open in het dropdownmenu ‘/usr/local/directadmin/conf/directadmin.conf’
  • Klik op Open File
  • Vul het root wachtwoord van je VPS onderaan het scherm in.
  • Zoek naar de regel ‘port=2222’, verander het portnummer, bijvoorbeeld in ‘1234’
  • Klik op Save
  • Het werkt pas wanneer DirectAdmin is herstart; klik op Home
  • Klik op Service Monitor
  • Klik op Restart op de regel van DirectAdmin
  • Binnen 1 minuut zal DirectAdmin beschikbaar zijn via de ingestelde poort.

Als je dit niet wilt doen met DirectAdmin, het kan ook met WinSCP. Bijvoorbeeld omdat je na bovenstaande actie niet meer bij je DirectAdmin kunt, bijvoorbeeld vanwege een firewall. (been there…)

  • Maak contact met je server als root met WinSCP
  • Zoek naar het bestand ‘/usr/local/directadmin/conf/directadmin.conf’
  • Pas de poort aan en sla op
  • Ga nu naar Putty en log in als root
  • Stop en start DirectAdmin:
    killall -9 directadmin
    cd /usr/local/directadmin
    ./directadmin d

Als je bij de eerste stap de nieuwe poort hebt opengezet en je hebt nu getest dat de nieuwe poort werkt, dan wil je misschien de oude poort (2222) weer netjes dichtzetten in de firewall. Dat gaat zo:

  • Sluit de oude poort:
    firewall-cmd --permanent --zone=public --remove-port=2222/tcp
  • Zorg dat de firewall deze nieuwe instellingen gaat gebruiken:
    firewall-cmd --reload
  • Test of het is gelukt:
    firewall-cmd --zone=public --list-all
    Als het goed is zie je nu de nieuwe poort wèl en de oude poort nièt in het rijtje.
  • Log in op DirectAdmin via de nieuwe poort voor een laatste controle.

PHP 7 met DirectAdmin

Als je DirectAdmin hebt, heb je wat meer mogelijkheden om zaken aan te passen door de Custom Build 2.0 versie te gebruiken. Je kunt dan bijvoorbeeld PHP 7.0 als standaard PHP installeren, maar op het moment van schrijven werkt nog lang niet alles met deze versie is mijn ervaring. Bijvoorbeeld Installatron overleeft de upgrade niet.

Welke versie van CustomBuild heb je?

  • Check dit zo:

    cd /usr/local/directadmin/custombuild
    ./build version

CustomBuild updaten/installeren

  • Maak vooraf een backup of snapshot van je server!
  • Omdat ik CentOS 7 heb, heb ik eerst deze update gedraaid:

    yum install psmisc net-tools systemd-devel libdb-devel perl-DBI xfsprogs

    Dit ging ondanks dat ik nu een verse VPS heb, toch een aantal zaken updaten.

  • Vervolgens voer je onderstaande regels uit:

    cd /usr/local/directadmin
    mv custombuild custombuild_1.x
    wget -O custombuild.tar.gz http://files.directadmin.com/services/custombuild/2.0/custombuild.tar.gz
    tar xvzf custombuild.tar.gz
    cd custombuild
    ./build

Het updaten van PHP naar 7.0

  • Als je CustomBuild 2.0 hebt (zie boven) dan kun je uitvoeren:

    ./build set php1_release 7.0

    Daarmee wordt een aanpassing gedaan in het bestand options.conf. De variabele php1_release wordt daarmee ingesteld op 7.0

  • Daarna voer je uit:

    ./build all d
    ./build rewrite_confs

    Dit duurt ongeveer een kwartiertje. DirectAdmin is nu gecompileerd met PHP 7.0.

  • Controleer of alles op je server nog naar wens werkt. Denk aan Installatron (deze doet het bij mij niet meer waardoor ik nu weer op PHP 5.5 zit), websites etc.

Installatron bij Transip

Ik wilde graag Installatron gebruiken op mijn DirectAdmin account bij Transip. Helaas kunnen zij dat nog niet leveren, dus heb ik het zelf geïnstalleerd.

Heel simpel:

  • Eerst via ssh toegang tot root account verkrijgen. Omdat je bij een behoorlijk beveiligde server nooit rechtstreeks in kunt loggen met root-credentials, doe je dat via een omweg. Dat kan door met een ander ssh-account in te loggen met bv putty, dan met ‘su’ root access verwerven (je hebt daarvoor uiteraard het root-wachtwoord nodig).
  • Dan deze drie regels uitvoeren

    wget https://data.installatron.com/installatron-plugin.sh
    chmod +x installatron-plugin.sh
    ./installatron-plugin.sh -f

    Dat is alles, Installatron zit in je DirectAdmin dashboard. Eén website aanmaken is gratis (geen licentie nodig), dus dat is al leuk.
    Voor licenties zie: https://secure.installatron.com/account/licenses

  • Als je een licentie hebt aangeschaft en op de Installatron-site je ip-adres hebt ingevoerd, zal Installatron zelf de licentie ontdekken.


Verwijderen van Installatron

Mocht het nodig zijn Installatron weer te verwijderen, dat gaat zo:

  • Verwijderen uit de GUI:

    rm -fr /usr/local/directadmin/plugins/installatron

  • Delete de kern van Installatron:

    rm -fr /usr/local/installatron
    rm -fr /var/installatron
    rm -f /etc/cron.d/installatron

  • Delete alle installatiedata (van de users, dus pas op):

    rm -fr /home/*/.installatron

Domoticz project

Ik heb een Raspberry Pi omgetoverd tot een domotica-systeem met Domoticz. De aanleiding was dat ik screens heb van het merk Somfy die met een remote dicht en open kunnen. Maar niet met mij z-wave systeem. Tenminste niet zonder de boel te verbouwen. Met Domoticz kan ik ze nu wel bedienen. Deze pagina geeft een samenvatting van wat ik heb gedaan om het werkend te krijgen.

Domotics installeren op Raspberry Pi (B)

  • Download via https://sourceforge.net/projects/domoticz/files/ de meest recente sdkaart-image en pak uit (gebruik evt 7-zip)
  • Zet deze image met Rufus op een SD-kaart, ik gebruikte een 8 GB Class 10 kaartje.
  • SD kaart daarna in Pi, netwerk-kabel aansluiten, HDMI-kabel aan monitor of TV koppelen en spanning aansluiten. Pi start op. Op monitor zie je ook ergens voorbij komen welk ipadres hij heeft gekregen op je netwerk. Als alternatief kun je na een tijdje via je Ziggo router (of andere router) achterhalen welk ipadres is toegekend door DHCP aan je Pi.

Eerste instellingen

  • Via Putty maak je verbinding met de Pi.
  • Log in met naam “pi” en wachtwoord “raspberry“.
  • Typ: ‘sudo raspi-config’
  • Kies optie 1 “Expand filesystem” om vrije ruimte op de SD kaart toe te voegen aan Domoticz
  • Stel een ander wachtwoord in (Optie 2)
  • Stel je tijdzone in (Optie 4).
    • Kies voor Change Locale (Optie 1), ik liet engels aan staan en vinkte ook nl_NL.UTF-8 UTF-8 aan. Stel de Nederlandse locale ook als standaard in.
    • Kies voor Change timezone (Optie 2), kies Europe en Amsterdam.
  • Kies Finish en reboot: Yes, mocht je in het os komen, gebruik ‘sudo reboot’.
  • Na reboot surf op PC naar het ingestelde ipadres, maar dan met https:// ervoor.
  • Kies Instellingen -> Instellingen en stel de taal in op Dutch, ik heb ook het thema op elemental gezet en de locatie ingesteld (anders kun je niet opslaan met Bewaar instellingen).

Domotics een vast ipadres geven

  • Log in op Domotics met Putty.
  • Typ: ‘sudo nano /etc/dhcpcd.conf’
  • Typ ergens aan het begin:
    interface eth0
    static ip_address=192.168.1.4 # << change to an ip address in your network
    static routers=192.168.1.1 # << change to your gateway
    static domain_name_servers=8.8.8.8   # << or change to your DNS

Operating System updaten

Log in met Putty en typ: ‘sudo apt-get update’
Daarna: ‘sudo apt-get upgrade’

RFXCom (RFXtrx433E) installeren op Domoticz

Wat je moet weten is dat de RFXCom verschillende protocollen kan uitzenden, bijvoorbeeld voor Klik-aan-klik-uit en dus ook Somfy (RFY protocol). De module kan ook verschillende protocollen ontvangen, maar daarvoor moet het naar al die protocollen ‘luisteren’. Dat kost tijd dus kun je aangeven welke protocollen je wilt gaan ontvangen. Hoe minder je er aanklikt, hoe sneller en beter ze werken. Instellen welke protocollen je wilt beluisteren kan met het programma RFXmgr, zie http://www.rfxcom.com/Downloads, maar kan ook via Domoticz.

Ik heb een en ander eerst ingesteld via de PC. Ik heb bijvoorbeeld de firmware geupdated en een aantal commando’s ingesteld om de screens te bedienen. Daarna heb ik de RFXCom aan de Pi gekoppeld en op Domoticz ingesteld.

Firmware RFXtrx433E updaten

  • Op de PC heb ik daarvoor het programma RFXFlash.exe gedownload via deze pagina.
  • In de Domoticz UserGuide hoofdstuk 2 staat een tabel welke protocollen met welke firmwares werken. Je hebt Type 1, type 2, ext en ext2. Voor de 433E versie van RFXCom heb je Ext of Ext2 nodig.
  • De RFXCom was gekoppeld aan een USB-poort, de software heeft het over COM 3. Maar het werkt.

Somfy screens instellen op RFXCom

Zie pagina 35 van de manual. Het principe is:

  • Stel de software in op een vrije ID en unitcode.
  • Koppel alle screens los van de stroom behalve die je wilt bedienen.
  • Druk op de originele afstandsbediening ongeveer 2 seconden op de Program-knop
  • De screens die nog aan staan reageren door even op en neer te gaan. Deze screens zijn nu ontvankelijk voor een nieuwe “Baas”.
  • Stuur nu een Program-commando met de RFXcom software. De gekozen combinatie die je nu uitzendt wordt in het geheugen van de screen toegevoegd. Maximaal 12 per screen.
  • Nu kan dus de remote èn de RFXcom de screen bedienen.
  • Als je meerdere screens met één commando wilt bedienen, bv allemaal tegelijk op of neer, dan kan dat ook. Zie voor een uitleg dit verhaal.

RFXCom koppelen aan Domoticz

  • Ga met je browser naar je Domoticz (ipadres in browser)
  • Kies Instellingen en Hardware.
  • Kies RFXCOM – RFXtrx433 USB 433.92MHz Transceiver, stel een naam in (bv RFXCom) en kies een USB poort bij seriele poort.
  • De RFXCom staat nu in de hardwarelijst. Met modus instellen kun je bovengenoemde protocollen beperken. Zorg dat alles wat je niet gaat gebruiken (ontvangstmodus) uitgevinkt staat.
  • Klik op Schakelaars en klik op Handmatig. Voeg een apparaat toe van het schakelaar-type ‘Blinds’, protocol RFY, ID instellen zoals eerder gekoppeld. Mocht je hier niet uitkomen, gebruik dan de RFXmgr (op je pc) om een List remotes commando te geven (tabblad RFY).