Apache 2.4 ਨਾਲ Subversion ਹੋਸਟ ਨੂੰ VPN ਵਰਤੋਂਕਾਰਾਂ ਤੱਕ ਸੀਮਿਤ ਕਰੋ
ServerName ਇੱਕ ਵਰਚੁਅਲ ਹੋਸਟ ਚੁਣਦਾ ਹੈ; ਇਹ ਸੀਮਿਤ ਨਹੀਂ ਕਰਦਾ ਕਿ ਕੌਣ ਜੁੜਦਾ ਹੈ। VPN ਰੇਂਜ ਅਤੇ ਅਸਲ ਭੰਡਾਰ ਵਰਤੋਂਕਾਰ ਮੰਗੋ, ਫਿਰ ਦੋਵੇਂ ਇਨਕਾਰ ਸਾਬਤ ਕਰੋ।
Subversion ਵਰਚੁਅਲ ਹੋਸਟ ਨੂੰ VPN ਪਤੇ ਵੱਲ ਮੋੜਨ ਨਾਲ ਇਹ ਬਦਲਦਾ ਹੈ ਕਿ ਕਿਹੜੀ ਸਾਈਟ ਬੇਨਤੀ ਦਾ ਜਵਾਬ ਦਿੰਦੀ ਹੈ, ਇਹ ਨਹੀਂ ਕਿ ਕਿਸ ਨੂੰ ਭੇਜਣ ਦੀ ਆਗਿਆ ਹੈ। ਪਹੁੰਚ ਜਾਂਚ ਬਾਅਦ ਵਿੱਚ ਹੁੰਦੀ ਹੈ, URL ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਹਿੱਸੇ ਦੇ ਨਿਯਮਾਂ ਅਨੁਸਾਰ, ਅਤੇ ਹੋਸਟ ਦਾ ਨਾਮ ਉਸ ਫੈਸਲੇ ਵਿੱਚ ਕਦੇ ਨਹੀਂ ਆਉਂਦਾ। ਜੇ ServerName ਤੁਹਾਡਾ ਇੱਕੋ-ਇੱਕ ਬਦਲਾਅ ਸੀ, ਤਾਂ ਭੰਡਾਰ ਕੱਲ੍ਹ ਵਾਂਗ ਹੀ ਪਹੁੰਚਯੋਗ ਹੈ। ਸੰਰਚਨਾ ਵਿੱਚ ਦੋ ਵੱਖਰੇ ਸਵਾਲਾਂ ਦੇ ਜਵਾਬ ਦੇਣੇ ਹਨ: ਕਿਹੜੇ ਸਾਕਟ ਨੇ ਕਨੈਕਸ਼ਨ ਸਵੀਕਾਰ ਕੀਤਾ ਅਤੇ ਬੇਨਤੀ ਕਿਹੜੀ ਪਛਾਣ ਲੈ ਕੇ ਆਈ।
ServerName ਅਸਲ ਵਿੱਚ ਕੀ ਤੈਅ ਕਰਦਾ ਹੈ
ਨਾਮ-ਆਧਾਰਿਤ ਵਰਚੁਅਲ ਹੋਸਟਿੰਗ Host ਹੈਡਰ ਦੀ ServerName ਅਤੇ ServerAlias ਐਂਟਰੀਆਂ ਨਾਲ ਤੁਲਨਾ ਕਰਦੀ ਹੈ, ਇੱਕ ਹੋਸਟ ਚੁਣਦੀ ਹੈ ਅਤੇ ਉਸ ਨੂੰ ਬੇਨਤੀ ਸੰਭਾਲਣ ਦਿੰਦੀ ਹੈ। ਕਨੈਕਸ਼ਨ ਆਪ ਪਹਿਲਾਂ ਸਰਵਰ ਦੀ ਮਾਲਕੀ ਵਾਲੇ Listen ਸਾਕਟ ਨੇ ਸਵੀਕਾਰ ਕੀਤਾ ਸੀ, ਹੋਸਟ ਨੇ ਨਹੀਂ। ਇਸ ਲਈ ਨਿੱਜੀ ਦਿਸਦਾ ਨਾਮ ਕੋਈ ਸੁਰੱਖਿਆ ਨਹੀਂ ਦਿੰਦਾ: ਸਾਕਟ ਤੱਕ ਪਹੁੰਚਣ ਵਾਲਾ ਕੋਈ ਵੀ ਕਲਾਇੰਟ ਉਹ Host ਹੈਡਰ ਭੇਜ ਸਕਦਾ ਹੈ। ਨਾਮ ਇੱਕ ਰਾਊਟਿੰਗ ਕੁੰਜੀ ਹੈ, ਅਤੇ ਰਾਊਟਿੰਗ ਕੁੰਜੀਆਂ ਕਾਲ ਕਰਨ ਵਾਲਾ ਚੁਣਦਾ ਹੈ।
ਤੁਸੀਂ ਅੰਦਾਜ਼ਾ ਲਗਾਏ ਬਿਨਾਂ ਮੈਪਿੰਗ ਦੇਖ ਸਕਦੇ ਹੋ। apachectl -S ਹਰ ਹੋਸਟ, ਉਸਦਾ ਪੋਰਟ ਅਤੇ ਨਾਮ ਛਾਪਦਾ ਹੈ, ਅਤੇ ਪਤੇ ਲਈ ਕਿਹੜਾ ਡਿਫਾਲਟ ਹੈ ਚਿੰਨ੍ਹਿਤ ਕਰਦਾ ਹੈ।
RequireAll ਉਹ ਕੰਟੇਨਰ ਹੈ ਜੋ ਦੋਵੇਂ ਜਾਂਚਾਂ ਲਾਜ਼ਮੀ ਬਣਾਉਂਦਾ ਹੈ
Apache 2.4 ਇੱਕ ਹਿੱਸੇ ਦੇ Require ਨਿਰਦੇਸ਼ਾਂ ਨੂੰ ਅੰਤਰਨਿਹਿਤ RequireAny ਵਿੱਚ ਲਪੇਟਦਾ ਹੈ, ਇਸ ਲਈ ਦੋ ਖੁੱਲ੍ਹੇ ਨਿਰਦੇਸ਼ਾਂ ਦਾ ਅਰਥ ਹੈ ਕਿ ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਕੋਈ ਇੱਕ ਕਾਫ਼ੀ ਹੈ। ਕੰਟੇਨਰ ਜੋੜੋ ਅਤੇ ਅਰਥ ਉਲਟ ਜਾਂਦਾ ਹੈ:
<Location /svn/repo>
AuthType Basic
AuthName "Subversion"
AuthBasicProvider file
AuthUserFile /etc/apache2/svn.htpasswd
<RequireAll>
Require ip 10.8.0.0/24
Require valid-user
</RequireAll>
</Location>RequireAll ਦੋਵੇਂ ਸ਼ਰਤਾਂ ਮੰਗਦਾ ਹੈ: ਟਨਲ ਰੇਂਜ ਦੇ ਅੰਦਰ ਸਰੋਤ ਪਤਾ ਅਤੇ ਉਹ ਵਰਤੋਂਕਾਰ ਜਿਸਨੂੰ ਭੰਡਾਰ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ। Subversion URL ਲਈ ਸਿਰਫ਼-VPN ਦਾ ਇਹੀ ਅਰਥ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। mod_authz_core ਸੰਦਰਭ ਕੰਟੇਨਰ ਦੇ ਨਿਯਮਾਂ ਦਸਤਾਵੇਜ਼ ਕਰਦਾ ਹੈ। ਬਲਾਕ ਨੂੰ ਭੰਡਾਰ ਦੇ ਮੌਜੂਦਾ Location ਅੰਦਰ ਰੱਖੋ ਅਤੇ ਪਹਿਲਾਂ ਤੋਂ ਕੰਮ ਕਰ ਰਹੇ DAV ਨਿਰਦੇਸ਼ਾਂ ਨੂੰ ਉਹਨਾਂ ਦੀ ਥਾਂ ਛੱਡੋ, ਕਿਉਂਕਿ ਇਹ ਟੁਕੜਾ AuthType, ਪਾਸਵਰਡ ਫਾਈਲ ਜਾਂ ਪਾਥ-ਪੱਧਰੀ ਅਧਿਕਾਰ ਵਿੱਚੋਂ ਕੁਝ ਵੀ ਨਹੀਂ ਬਦਲਦਾ।
ਸਰੋਤ ਜਾਂਚ mod_authz_host ਤੋਂ ਆਉਂਦੀ ਹੈ, ਇਸ ਲਈ ਕੁਝ ਹੋਰ ਡੀਬੱਗ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਇਹ ਲੋਡ ਹੈ: apachectl -M | grep authz_host।
Apache ਜਿਸ ਪਤੇ ਦਾ ਮੁਲਾਂਕਣ ਕਰਦਾ ਹੈ ਉਹ ਸਾਕਟ ਪਤਾ ਹੈ
Require ip ਕਨੈਕਸ਼ਨ ਲਈ Apache ਵੱਲੋਂ ਦਰਜ ਪਤੇ ਨਾਲ ਤੁਲਨਾ ਕਰਦਾ ਹੈ, ਅਤੇ ਉਹ ਹਮੇਸ਼ਾ ਉਹ ਪਤਾ ਨਹੀਂ ਜੋ ਕਲਾਇੰਟ ਸਮਝਦਾ ਹੈ ਕਿ ਉਸ ਕੋਲ ਹੈ।
ਜਦੋਂ VPN ਆਪਣੇ ਪਤੇ ਬਿਨਾਂ ਅਨੁਵਾਦ ਦੇ ਰਾਊਟ ਕਰਦਾ ਹੈ, Apache ਟਨਲ ਪਤਾ ਦੇਖਦਾ ਹੈ ਅਤੇ 10.8.0.0/24 ਮੇਲ ਖਾਂਦਾ ਹੈ। ਜਦੋਂ ਗੇਟਵੇ ਅਨੁਵਾਦ ਕਰਦਾ ਹੈ, Apache ਗੇਟਵੇ ਦੇਖਦਾ ਹੈ ਅਤੇ ਨਿਯਮ ਚੁੱਪਚਾਪ ਕਿਸੇ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ; ਹੋਸਟ ਦੇ ਸਾਹਮਣੇ TLS ਖ਼ਤਮ ਕਰਨ ਵਾਲੇ ਲੋਡ ਬੈਲੰਸਰ ਪਿੱਛੇ ਵੀ ਇਹੀ ਹੁੰਦਾ ਹੈ। ਉਸ ਹਾਲਤ ਲਈ mod_remoteip ਹੈ। ਬੈਲੰਸਰ ਲਈ RemoteIPTrustedProxy ਨਾਲ RemoteIPHeader X-Forwarded-For ਦਰਜ ਪਤਾ ਬਦਲਦਾ ਹੈ, ਅਤੇ ਤਦ ਹੀ ਰੇਂਜ ਕੋਲ ਤੁਲਨਾ ਕਰਨ ਲਈ ਕੁਝ ਹੁੰਦਾ ਹੈ।
ਕਿਸੇ ਵੀ ਫਾਰਵਰਡਿੰਗ ਹੈਡਰ 'ਤੇ ਭਰੋਸਾ ਕਰਨਾ ਕੋਈ ਨਿਯਮ ਨਾ ਹੋਣ ਨਾਲੋਂ ਵੀ ਮਾੜਾ ਹੈ। ਕੋਈ ਵੀ ਕਲਾਇੰਟ 10.8.0.9 ਵਾਲਾ X-Forwarded-For ਭੇਜ ਕੇ ਅਜਿਹੀ ਰੇਂਜ ਜਾਂਚ ਪੂਰੀ ਕਰ ਸਕਦਾ ਹੈ ਜੋ ਕਦੇ ਭਰੋਸੇਯੋਗ ਹੌਪ 'ਤੇ ਲੰਗਰ ਨਹੀਂ ਸੀ।
ਲਿਸਨਰ ਅਤੇ ਭੰਡਾਰ ਨੀਤੀ ਨੂੰ ਪਰਤਾਂ ਵਿੱਚ ਰੱਖੋ
ਬਾਈਂਡਿੰਗ ਇੱਕ ਵੱਖਰਾ ਨਿਯੰਤਰਣ ਹੈ ਅਤੇ ਅਕਸਰ ਸਰਲ। Listen 10.8.0.1:443 ਤੈਅ ਕਰਦਾ ਹੈ ਕਿ ਕਿਹੜੇ ਸਾਕਟ ਮੌਜੂਦ ਹਨ, ਅਤੇ ਕਦੇ ਨਾ ਖੋਲ੍ਹੇ ਸਾਕਟ 'ਤੇ ਬੇਨਤੀ ਹੋਸਟ ਨਹੀਂ ਚੁਣ ਸਕਦੀ। ਕੀਮਤ ਸ਼ੁਰੂਆਤੀ ਕ੍ਰਮ ਹੈ: ਜੇ Apache ਸ਼ੁਰੂ ਹੁੰਦਿਆਂ ਟਨਲ ਇੰਟਰਫੇਸ ਬੰਦ ਹੈ, ਤਾਂ ਬਾਈਂਡਿੰਗ ਫੇਲ੍ਹ ਹੁੰਦੀ ਹੈ ਅਤੇ ਸੇਵਾ ਉੱਪਰ ਨਹੀਂ ਆਉਂਦੀ। ਇਸਨੂੰ ਯੂਨਿਟ ਕ੍ਰਮ ਨਾਲ ਜੋੜੋ, ਜਾਂ ਟਨਲ ਤੋਂ ਸੁਤੰਤਰ ਤੌਰ 'ਤੇ ਮੌਜੂਦ ਪਤੇ 'ਤੇ ਬਾਈਂਡ ਕਰੋ।
ਪਾਥ ਆਗਿਆਵਾਂ AuthzSVNAccessFile ਵਿੱਚ ਹੀ ਰਹਿੰਦੀਆਂ ਹਨ। ਸਾਈਟ ਲਈ ਵੈਧ ਖਾਤਾ ਪ੍ਰੋਜੈਕਟ ਪਾਥ 'ਤੇ ਲਿਖਣ ਦੀ ਪਹੁੰਚ ਦੇ ਬਰਾਬਰ ਅਧਿਕਾਰ ਨਹੀਂ, ਅਤੇ ਨੈੱਟਵਰਕ ਨਿਯਮ ਇਹ ਨਹੀਂ ਬਦਲਦਾ।
ਜਦੋਂ ਬਲਾਕ ਕਿਸੇ ਸ਼ਾਮਲ ਫਾਈਲ ਵਿੱਚ ਹੋਵੇ ਤਾਂ ਹਿੱਸਾ-ਵਿਲੈਣ ਵੱਲ ਧਿਆਨ ਦਿਓ। Apache ਨੈਸਟਡ ਹਿੱਸਿਆਂ ਵਿੱਚ ਅਧਿਕਾਰ ਕੰਟੇਨਰ ਮਿਲਾਉਂਦਾ ਹੈ ਅਤੇ ਸਭ ਤੋਂ ਖਾਸ ਮੇਲ ਖਾਂਦਾ ਹਿੱਸਾ ਲੋੜ ਨੂੰ ਜੋੜਨ ਦੀ ਥਾਂ ਬਦਲ ਸਕਦਾ ਹੈ, ਇਸ ਲਈ ਸੰਗਵੜੇ ਹਿੱਸੇ ਵੱਲੋਂ ਆਪਣਾ ਨਿਯਮ ਤੈਅ ਕਰਨ 'ਤੇ /svn ਦਾ ਨਿਯਮ /svn/repo/trunk ਤੱਕ ਨਹੀਂ ਪਹੁੰਚ ਸਕਦਾ।
ਪੂਰਾ ਕਹਿਣ ਤੋਂ ਪਹਿਲਾਂ ਦੋਵੇਂ ਇਨਕਾਰ ਸਾਬਤ ਕਰੋ
ਇੱਕ ਨਹੀਂ, ਚਾਰ ਬੇਨਤੀਆਂ ਦੀ ਜਾਂਚ ਕਰੋ। VPN ਅੰਦਰ ਵੈਧ ਖਾਤੇ ਨਾਲ ਤੁਹਾਨੂੰ ਭੰਡਾਰ ਦੀ ਸੂਚੀ ਮਿਲਣੀ ਚਾਹੀਦੀ ਹੈ। VPN ਅੰਦਰ ਗਲਤ ਪਾਸਵਰਡ ਨਾਲ ਸੂਚੀ ਦੀ ਥਾਂ 401 ਮਿਲਣਾ ਚਾਹੀਦਾ ਹੈ। VPN ਬਾਹਰੋਂ ਵੈਧ ਪ੍ਰਮਾਣ-ਪੱਤਰਾਂ ਨਾਲ 403 ਮਿਲਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਵਿਕਲਪਿਕ ਹੋਸਟਨਾਮ 'ਤੇ ਉਹੀ ਜਨਤਕ ਬੇਨਤੀ ਵੀ ਉਸੇ ਤਰ੍ਹਾਂ ਫੇਲ੍ਹ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।
ਹਰ ਹਾਲਤ ਲਈ ਇੱਕ ਕਮਾਂਡ ਕਾਫ਼ੀ ਹੈ: curl -sI -u user:pass https://svn.example.com/svn/repo/, ਫਿਰ ਸਟੇਟਸ ਲਾਈਨ ਪੜ੍ਹੋ। ਕੰਮ ਕਰਨ ਵਾਲੀ ਹਾਲਤ ਅਸਲ ਕਲਾਇੰਟ ਰਾਹੀਂ ਵੀ ਦੁਹਰਾਓ, ਕਿਉਂਕਿ svn info ਉਹਨਾਂ DAV ਢੰਗਾਂ ਦਾ ਅਭਿਆਸ ਕਰਦਾ ਹੈ ਜੋ ਕਮਿਟ ਅਤੇ ਅੱਪਡੇਟ ਵਰਤਣਗੇ।
ਜੇ ਚਾਰਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਤੀਜਾ ਤੁਹਾਡੀ ਲੋੜੀਂਦੀ ਨੀਤੀ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ, ਤਾਂ ਸੰਰਚਨਾ ਪੂਰੀ ਨਹੀਂ ਹੋਈ, ਅਤੇ ਹੋਸਟ ਦਾ ਨਾਮ ਬਦਲਣ ਨਾਲ ਉਹ ਨਹੀਂ ਬਦਲੇਗਾ।