On 11/30/2020 12:43 PM, Michael wrote:
> I don't have time to look into this in much detail, or test it, but see 
> comments below.
> 
> On Monday, 30 November 2020 18:09:52 GMT the...@sys-concept.com wrote:
>> On 11/30/2020 05:34 AM, Michael wrote:
>>> On Sunday, 29 November 2020 18:22:09 GMT the...@sys-concept.com wrote:
>>>> Thelma
>>>>
>>>> On 11/29/2020 03:22 AM, Michael wrote:
>>>>> On Sunday, 29 November 2020 07:30:16 GMT the...@sys-concept.com wrote:
>>>>>> I'm trying to deny access to all except specific IP address in a
>>>>>> directory, just testing it.
>>>>>>
>>>>>> In modules.d/00_default_settings.conf
>>>>>>
>>>>>> <Directory "/var/www/localhost/htdocs">
>>>>>>
>>>>>>  Options MultiViews
>>>>>>  AllowOverride All
>>>>>>  Require all granted
>>>>>>
>>>>>> </Directory>
>>>>>>
>>>>>> in admin/.htaccess
>>>>>>
>>>>>> <RequireAll>
>>>>>>
>>>>>>     Require all denied
>>>>>>     Require ip 10.0.0.100
>>>>>>
>>>>>> </RequireAll>
>>>>>>
>>>>>> My IP is 10.0.0.112 and I can still access the server /admin directory
>>>>>>
>>>>>> What am I missing?
>>>>>
>>>>> In apache 2.4 the access control syntax has changed.  The RequireAll
>>>>> directive means *all* authorisation directives within it must succeed.
>>>>>
>>>>> https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireall
>>>>>
>>>>> What happens if you just remove the first line, "Require all denied"?
>>>>
>>>> As you suggested I have:
>>>> in admin/.htaccess
>>>>
>>>> <RequireAll>
>>>>
>>>>     Require ip 10.0.0.100
>>>>
>>>> </RequireAll>
>>>>
>>>> My IP is: 10.0.0.112 and it still allow me to access it.  I know apache
>>>> 2.4 is reading the file as the the below direcive works.
>>>
>>> I've tested different RequireAll directives in a .htaccess file and with
>>> otherwise default apache  settings I can confirm:
>>>
>>> This is correct:
>>> =========================
>>> <RequireAll>
>>>
>>>     Require ip 10.0.0.100
>>>
>>> </RequireAll>
>>> =========================
>>> will only allow visitors from 10.0.0.100 to access the directory content.
>>>
>>> This is also correct:
>>> =========================
>>> <RequireAll>
>>>
>>>     Require all granted
>>>     Require ip 10.0.0.100
>>>
>>> </RequireAll>
>>> =========================
>>> will only allow visitors from 10.0.0.100 to access the directory content.
>>>
>>> Finally, this won't work:
>>> =========================
>>> <RequireAll>
>>>
>>>     Require all denied
>>>     Require ip 10.0.0.100
>>>
>>> </RequireAll>
>>> =========================
>>> because it returns 403 for all clients irrespective of IP address, since
>>> both subdirectives must be correct for the RequireAll to be true.
>>>
>>> I notice you have 'Options MultiViews' in your modules.d/
>>> 00_default_settings.conf, which will parse paths to find and serve any
>>> file
>>> requested by the client even if the URL is not complete.  It might be this
>>> conflicts with your .htaccess within admin/ subdirectory, but I'm not
>>> sure.
>>> Something in apache logs may shed light in this.
>>>
>>>> AuthName "restricted stuff"
>>>> AuthType Basic
>>>> AuthUserFile "/etc/apache2/users"
>>>> require user webmaster
>>>>
>>>> I've tried adding
>>>> RewriteEngine on
>>>>
>>>> With it, I can not login at all (access denied) regardless of IP.
>>>
>>> With apache 2.4 a new <If> directive was added to perform conditional
>>> checks and replace/augment many of the mod_rewrite functionalities.  I
>>> don't know how you have structured your RewriteCond and RewriteRule, but
>>> obviously they don't work as intended if they totally block access.
>>>
>>> You could check conflicting rules between your apache config and any
>>> .htaccess directives, or any loose and contradictory .htaccess files in
>>> higher subdirectories.
>>
>> Here is complete file:   modules.d/00_default_settings.conf
>> I've removed 'Options MultiViews' but it disn't help.
>>
>> Timeout 300
>> KeepAlive On
>> MaxKeepAliveRequests 100
>> KeepAliveTimeout 15
>> UseCanonicalName Off
>> AccessFileName .htaccess
>> ServerTokens Prod
>> TraceEnable off
>> ServerSignature Off
>> HostnameLookups Off
>> EnableMMAP On
>> EnableSendfile Off
>> FileETag MTime Size
>> ContentDigest Off
>> ErrorLog /var/log/apache2/error_log
>> LogLevel warn
>>
>> <Directory />
>>      Options FollowSymLinks
>>      AllowOverride None
>>      Require all denied
>> </Directory>
>>
>> <Directory "/var/www/localhost/htdocs">
>>      AllowOverride All
>>      Require all granted
>> </Directory>
>>
>> <IfModule dir_module>
>>      DirectoryIndex index.html index.html.var
>> </IfModule>
>>
>> <FilesMatch "^\.ht">
>>      Require all denied
>> </FilesMatch>
>>
>> The server root .htaccess is empty
>> In server root/admin/.htaccess
>>
>> <RequireAll>
>>    Require ip 10.0.0.100
>> </RequireAll>
> 
> Hmm ... as I understand it the <RequireAll> directive is evaluated to make an 
> authorisation decision, before the authentication directive below.  If the 
> authorisation fails, because you're not connecting from ip 10.0.0.100, then I 
> would assume apache should return 403 and stop processing further directives. 
>  
> However, from what you say it does not do this.  :-/
> 
> I wonder if you add 'AuthMerging And' above your authentication directives 
> below, it would work as expected - i.e. both 'ip 10.0.0.100' and 'user 
> webmaster' should succeed before access to /admin is allowed.
> 
>> AuthName "restricted stuff"
>> AuthType Basic
>> AuthUserFile "/etc/apache2/users"
>> require user webmaster
>>
>> My IP is 10.0.0.109 so I should be denied access to admin/index.php but
>> I'm able to view it/access it.
>> It seems to me it is reading .htaccess file as "AuthType Basic" work, it
>> is asking me for a password. but "Require ip" doesn't work.  Because my
>> IP is 10.0.0.109 apache should deny me access with "access denied.
> 
> 
> Something else to try instead of <RequireAll>, in case it makes a difference. 
>  
> Does it work as intended if you replace <RequireAll> with a filesystem 
> container:
> 
>  <Directory "/var/www/localhost/htdocs/*/admin">
>      Require ip 10.0.0.100
>  </Directory>
> 
> Or, if this is a set of pages dynamically generated by php, rather than a 
> static file within the admin directory, use a webspace container:
> 
>  <Location "*/admin">
>      Require ip blah
>  </Location>

Thank for looking into it and input.
I must be missing someting because if I use in .htaccess file direcive:
 <Directory "/var/www/localhost/htdocs/*/admin"> or
 <Location "*/admin">

In both cases I get an error from Apache:

[client 10.0.0.109] /var/www/localhost/htdocs/catalog/admin/.htaccess: 
<Directory not allowed here
[client 10.0.0.109 /var/www/localhost/htdocs/catalog/admin/.htaccess: <Location 
not allowed here


Reply via email to