Apache Require / Require not

Inge Vabekk

New Member
Jeg har satt opp en "Denies.conf" fil med IP-adresser som ikke skal ha adgang til mine nettsider, men dette blir ikke tatt hensyn til. Hva må jeg gjøre for å få det til?
På grunn av at listen er nokså lang vil jeg ikke ha den i .htaccess. Når den er i "ports.conf" bli den bare lastet inn når Apache starter opp. Jeg kjører Apache2.4 i Ubuntu 16.04.

Jeg har, i filen "ports.conf":
<Directory /WEB/html>
Options Indexes FollowSymLinks
AllowOverride All
# List of blocked addresses:
<RequireAll>
Require all granted
Include Denies.conf
</RequireAll>
</Directory>

og i filen Denies,conf:
Require not ip 1.0.0.0/8
Require not ip 2.0.0.0/10
Require not ip 3.0.0.0/8
Require not ip 4.0.0.0/8
Require not ip 5.0.0.0/12
osv.
 

ronorio

Active Member
Det riktige stedet er å blokkere IP adresser i brannmuren. Apache vil ikke kunne erstatte iptables, CSF/LFD eller lignende - mao er ikke løsningen du søker optimal.

<RequireAll>
Require all granted
Include Denies.conf
</RequireAll>

Denne Denies.conf, hvor har du plassert den? Banen i konfigurasjonen over vil se etter filen i /etc/apache2/ - eller relativ til hvor du har installert Apache. Mistenker dette er feil hos deg.

Ubuntu bruker UFW som standard. Anbefaler å lære deg den, eller benytte iptables, CSF etc. Det er en bedre praksis for å gjøre det du ønsker.
 
Sist redigert:

Inge Vabekk

New Member
Kan det funke å bruke .htaccess fil?
eksempel:

deny from 176.9.139.229
Noe av hensikten er å plassere dette et sted hvor Apache leser den i oppstarten, og ikke hver gang noen gjør aksess. Jeg har nå forandret filen til "Allows.conf" hvor listen av TILLATTE IP-adresser er listet men alt annet skal blokkeres. Størrelsen er bare 10¤ av den forrige. Forøvrig viser eksempelet ditt en kommando fra en eldre versjon av Apache, som jeg ikke bruker lenger.
 

Inge Vabekk

New Member
Det riktige stedet er å blokkere IP adresser i brannmuren. Apache vil ikke kunne erstatte iptables, CSF/LFD eller lignende - mao er ikke løsningen du søker optimal.

<RequireAll>
Require all granted
Include Denies.conf
</RequireAll>

Denne Denies.conf, hvor har du plassert den? Banen i konfigurasjonen over vil se etter filen i /etc/apache2/ - eller relativ til hvor du har installert Apache. Mistenker dette er feil hos deg.

Ubuntu bruker UFW som standard. Anbefaler å lære deg den, eller benytte iptables, CSF etc. Det er en bedre praksis for å gjøre det du ønsker.
Rådet ditt er sikkert bra, men jeg har ikke benyttet meg av brannmur ut over det som allerede er installert, og det som ligger i ruteren. Det beskytter tydeligvis ikke godt nok. Jeg har lest litt om Apache og mistenker at jeg mangler en eller annen autorisation modul, men jeg er ikke i stand til å forstå dokumentasjonen. Denies.conf, eller Allows.conf som jeg har forandret til, ligger selvfølgelig i /etc/apache2. Hvis ikke ville jeg fått feilmelding ved oppstart. Jeg har jobbet mye med nettsider men har benyttet meg av eksterne servere, og har ikke hatt behov for denne løsningen. Derfor har jeg nok for lite kunskap om denne problemstillingen. Jeg får lese meg opp litt om det du anbefaler.
 

ronorio

Active Member
Har du sjekket at fil- eier og lese/skrivetilgang er riktig for filen? Hva sier apache loggfil, viser den feil?

Et alternativ, om det passer bedre for det du vil oppnå, er å bruke en whitelist i stedet for blacklist i .htaccess.

Til informasjon har Apache en kompabilitetsmodul som gir støtte for eldre oppsett av .htaccess og konfigurasjonsfiler, til eks. fra v.2.2. Husker ikke navnet.

Sette seg inn i UFW, CSF, iptables eller hvilken brannmur du enn har, er å anbefale.

Hva er det du prøver å løse, er det misbruk, skal siden være intern for bare noen brukere, eller noe annet?
 
Sist redigert:

Inge Vabekk

New Member
Jeg har lest meg opp på UFW og sjekket at det forsåvidt virker, men jeg er ikke sikker på om det oppfyller mitt formål. For eksempel må jeg legge til omtrent 3000 linjer i /etc/ufw/user.rules for å få det til, og jeg er usikker på om det er nok.
Formålet er å beskytte private nettsider mot innsyn utenfra. Jeg vil ikke at de skal snuses på av roboter, søkemotorer etc - og jeg vil selvsagt ikke ha noen forsøk på angrep. Ellers er systemet sikkert nok, tror jeg.
Jeg har gått over til å bruke whitelist som du anbefaler, men problemet er at selv om jeg har fått "Require all granted" og "Require all denied" til å virke slik det skal, så blir fortsatt f.eks. "Require ip 10.10.10.0/8" (lokalnettet) eller lignende ignorert. Jeg har fant ut at jeg måtte legge inn noen moduler, men jeg regner med at noe fortsatt mangler, og har ikke funnet ut hvilke.
De som jeg tror har betydning her, er disse (noen eller alle):
auth_basic, authn_core, authn_file, authnz_ldap, authz_core, authz_dbd, authz_dbm, authz_groupfile, authz_host, authz_owner, authz_user, ldap

Det som skjedde da jeg konfigurerte UFW på serveren, var at jeg mistet SSH aksess, så jeg måtte koble nettfunksjonene til en annen maskin og ta inn den PCen som sto som server så jeg kan få korrigert det. :(
Det er foreøpig kun port 80 det er snakk om, og som er rutet til en av PCene i lokalnettet. Jeg ruter andre aktuelle porter, f.eks til SMTP, til en annen maskin.

Takk for engasjementet!
 

ronorio

Active Member
Er dette en lokal server hvor du har fysisk tilgang? Er det en VPS?

Er nettstedet basert på et CMS som til eks. WordPress, Joomla osv.?

Hvis det er en server med offentlig tilgang (Internett) bør du ha en brannmur som er riktig konfigurert, samt et system for å blokkere tilgangsforsøk fra uvedkommende (til eks. Fail2Ban/CSF+LFD).

Hvis serveren står online med åpenbare svakheter, er det gjerne ikke så lang tid før uvedkommende har tilgang.

Når man setter opp brannmur er det viktig at man ikke blokkerer egen tilgang til serveren.

Hvis du skal blokkere "alle" utenom noen få, er en whitelist å foretrekke (kontra blacklist) - eller bruke et loginsystem hvor brukere med tilgang må logge inn med gyldig brukernavn og passord.

Hvis lokale adresser ikke blokkeres, er det mest trolig fordi filteret lytter på "internett-porten" og ikke den lokale - eller at lokale tilkoblinger gis overordnet tilgang et annet sted i systemet.

Har du vurdert å leie en kyndig admin til å sette opp dette for deg?

Anbefaler å "lære" på en annen server enn den som er i produksjon. Hvis du til eks. leier deg en VPS hos DigitalOcean og følger veiledninger der kommer du langt. De har god dokumentasjon for de fleste scenarier.

Det er mange områder ved det å administrere en server som ikke er like "opplagt" for et utrent øye - til eks. hvilke brukere som kjører hvilken tjeneste, om brukere skal være adskilt og forhindre at en bruker (til eks. apache) kan eskalere rettigheter til å utføre administrative oppgaver (bare for å nevne noen).

Hvilke moduler som gjør hva i Apache kan du se i dokumentasjonen.
 
Sist redigert:

Inge Vabekk

New Member
Dette er private servere og private nettsidene basert på egen kode, stort sett php. Jeg har forsåvidt fysisk tilgang, men for å kunne bruke tastatur og skjerm må jeg hente dem inn på "kontoret".
Jeg mistet altså ssh aksess til serverne så snart jeg enablet ufw. For Joomla-sidene bruker jeg pr. i dag eksterne servere, for jeg har ikke nok båndbredde (kun 20MB/s fra Telenor).
Du skriver at "Hvilke moduler som gjør hva i Apache kan du se i dokumentasjonen." Det har jeg prøvd å finne ut av, men har ikke funnet svar. Foreløpig har jeg fått "Require all granted" og "Require all denied" til å virke, men Apache bryr seg ikke om f.eks. "Require ip 62.16.135.152".
Det er viktig at det bare er en viss kategori henvendelser utenfra som skal blokkeres, og stor sett går det på IP-adresser (grupper). Kjenner jeg domenenavn er det relativt enkelt å fikse i hosts-filen (gir en dummy IP).
Så snart jeg enabler ufw mister jeg all adgang over nettet (SSH, SAMBA og NFS). Det virker altså ikke som noen god løsning. Akkorat nå kommer jeg heller ikke ut til andre nettsider som finn.no og telenor.no - men denne gikk bra foreløpig. Dette liker jeg ikke. inge
 

ronorio

Active Member
Når UFW startes vil den håndheve de regler du setter. Det er du som har bestemt hva UFW tillater eller ikke - det er ikke noe som konfigurerer seg selv.

For å se hvilke regler som er lagret kan du gjøre 'sudo ufw status' eller 'sudo ufw status verbose'.

For å åpne for SSH gjør du 'sudo ufw allow ssh' eller alternativt 'sudo ufw allow 22'.

Hvis du ikke ønsker UFW kan du alltids deaktivere den.
 

Inge Vabekk

New Member
Jeg har fått åpnet for SSH, men ikke for NFS eller SAMBA. Jeg har funnet noe for NFS, men har ikke fått det til å virke. Jeg har ikke funnet noe som helst for SAMBA. Jeg føler fortsatt at Apache kan gi meg det jeg trenger, men dokumentasjon er vanskelig. Den setter ikke ting i sammenheng og gir ikke tilstrekkelig gode eksempler. Jeg finner noe på AskUbuntu, men på Ubuntu Forum kommer jeg ikke inn (Får ikke registrert meg fordi jeg allerede er registrert, men innlogging sier at jeg ikke er registrert. Å opprette en annen epost for å få registrert meg er ikke aktuelt.). Jeg føler også at selv om jeg behersker engelsk ganske bra, forstår jeg ikke alt godt nok.
 

Inge Vabekk

New Member
OK, takk for det, jeg skal se på den - men jeg syns altså at Apache-dokumentasjonen, selv om den er fyldig, er vanskelig å forstå.
Ellers har jeg funnet ut mer om UFW, og jeg har fått SAMBA til å virke men ikke NFS. Her er status etter "ufw status verbose":
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To Action From
-- ------ ----
22 ALLOW IN 10.10.10.0/24
2049 ALLOW IN 10.10.10.0/24
873 ALLOW IN 10.10.10.0/24
24242 ALLOW IN 10.10.10.0/24
53 (Samba4) ALLOW IN 10.10.10.0/24
88 (Samba4) ALLOW IN 10.10.10.0/24
135/tcp (Samba4) ALLOW IN 10.10.10.0/24
137/udp (Samba4) ALLOW IN 10.10.10.0/24
138/udp (Samba4) ALLOW IN 10.10.10.0/24
139/tcp (Samba4) ALLOW IN 10.10.10.0/24
389 (Samba4) ALLOW IN 10.10.10.0/24
445/tcp (Samba4) ALLOW IN 10.10.10.0/24
464 (Samba4) ALLOW IN 10.10.10.0/24
636/tcp (Samba4) ALLOW IN 10.10.10.0/24
1024:5000/tcp (Samba4) ALLOW IN 10.10.10.0/24
3268/tcp (Samba4) ALLOW IN 10.10.10.0/24
3269/tcp (Samba4) ALLOW IN 10.10.10.0/24
5353 (Samba4) ALLOW IN 10.10.10.0/24
22 (v6) ALLOW IN Anywhere (v6)

Port 2049 og 24242 som jeg har opprettet, er for NFS.
inge

EDIT: Jeg har de modulene som Apache-dokumentasjonen sier skal til for å bruke Require ip. Så hvorfor virker det ikke?
 

ronorio

Active Member
Hva er det som ikke virker? Jeg vet ikke helt hva du har gjort og hva som er status nå ved Apache-konfigurasjonen.

Her er et eksempel på en whitelist:
Kode:
<Directory /var/www/eksempel.com>
    Require ip 192.168.1
    Require ip 10.0
    ErrorDocument 401 /index.html
</Directory>

Denne gir tilgang til alle brukere med IP som begynner på 192.168.1. og 10.0.

Med andre ord kan Jan med IP 192.168.1.39, Trine med IP 10.0.0.122 lese mysite.com.

Ole med IP 10.1.22.191 og Kalle med IP 192.168.2.221 blir møtt med 401 eller Unauthorized error-siden din index.html.

Så langt all trafikk på port 80/443 tillates i brannmuren, blir forespørsler først stoppet etter at Apache har behandlet de.

Hvis du derimot bare tillater ønsket trafikk på port 80/443 i brannmuren, avises forespørsler før de sendes til "arbeideren" Apache. Du stopper dermed uønsket gjest på trappa, i stedet for å slippe de inn i stua før du jager de bort.

Sistnevnte er en "bedre praksis" men her må du som kjenner infrastrukturen velge hva som er mest fornuftig for din situasjon.

mod_access_compat er modulen som gir deg bakoverkompabilitet med Apache 2.2 konfigurasjon. Med denne kan du fremdeles bruke Allow/Deny - men bør være en "siste" løsning da 2.4 går bort fra denne.

http://httpd.apache.org/docs/current/mod/mod_access_compat.html

Tar forbehold om feil, dette ble knotet ned i full fart på mobilen uten at noe er testet.

Hva er det som ikke virker ifht. NFS/Samba?
 
Sist redigert:

Inge Vabekk

New Member
Det du beskriver er sånn jeg har oppfattet det, men "Require ip" blir ikke tatt hensyn til. "Require all denied" og "Require all granted" virker som forventet. Det er det samme om det står i Apaches konfigurasjonsfiler eller i .htaccess. Jeg har mistanke om at dette skyldes en modul som ikke er lest inn, men jeg har lastet alle moduler som er beskrevet som skal ha noe med dette å gjøre. Jeg har restartet Apache etter hver forandring.
SAMBA og SSH har jeg fått til å virke med kommandoer til UFW, men NFS vil ikke gi adgang til kataloger som er definert for NFS hvis UFW er slått på. Hvis UFW blokkerer port 80, vil ingen få adgang til nettsidene utenfra, så det er ingen løsning. Jeg skal blokkere noen grupper, ikke hele hurven. Hvis jeg oppdager IP-adresser som sender uønskede query eller parametere, blir de logget og sjekket nærmere før jeg eventuelt vil forsøke å blokkere dem. Hittil har mange kommet i listen - men de blir altså ikke blokkert, for det kommer stadig henvendelser fra dem.
Vedlegget er list over Apache-moduler som er enablet.
 

Vedlegg

  • list.txt
    651 bytes · Sett: 0
Topp