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 commit மற்றும் புதுப்பிப்புகள் பயன்படுத்தும் DAV முறைகளைப் பயிற்சி செய்கிறது.
நான்கில் ஏதேனும் முடிவு நீங்கள் நோக்கிய கொள்கையுடன் பொருந்தவில்லை என்றால், உள்ளமைவு முடியவில்லை, ஹோஸ்ட்டின் பெயரை மாற்றுவது அதை மாற்றாது.