ලිනක්ස් හි සාමාන්‍ය පරිශීලකයෙකු ලෙස 80 වන වරායේ සේවාදායකයක් ධාවනය කරන්නේ කෙසේද?


333

මම සෑහෙන කාලයක් තිස්සේ විසඳුමක් ගැන ගූගල් කර ඇත, නමුත් පිළිතුරක් සොයාගත නොහැකි විය.

මම උබුන්ටු ලිනක්ස් හි සිටින අතර 80 වන වරායේ සේවාදායකයක් ධාවනය කිරීමට අවශ්‍යයි, නමුත් උබුන්ටු හි ආරක්ෂක යාන්ත්‍රණය හේතුවෙන් මට පහත දෝෂය ලැබේ:

java.net.BindException: අවසරය ප්‍රතික්ෂේප කරන ලදි: 80

වරාය 80 සියලු පරිශීලකයින්ට ලබා ගත හැකි වන පරිදි හෝ වරාය 80 වෙත පිවිසීමට වත්මන් පරිශීලකයාට අවශ්‍ය වරප්‍රසාද ලබා දීම සඳහා මෙම ආරක්ෂක යාන්ත්‍රණය අක්‍රීය කිරීමට තරම් සරල විය යුතු යැයි මම සිතමි.


3
අනාරක්ෂිත වෙනත් වරායක සේවාදායකය ක්‍රියාත්මක කිරීමට ඇති ගැටළුව කුමක්ද? ඔබ සිතන්නේ එම වරායේ සේවාදායකයක් ධාවනය කිරීම සඳහා අවම වශයෙන් ඉතා බරපතල හේතුවක් ඉදිරිපත් නොකර ආරක්ෂක යාන්ත්‍රණය අක්‍රීය කිරීම තරම් දරුණු දෙයක් ගැන ය. 80 වරායට බැඳීමට සේවාදායකය දෘ c කේත කර තිබේද? එසේ නම්, එය ඉවතලන්න.
නිර්නාමික


6
ඔබට බැහැ. 1024 ට අඩු වරායන් වරප්‍රසාදිත වන අතර ඒවාට සවන්දීමේ සොකට් විවෘත කළ හැක්කේ මූලයට පමණි. කළ යුතු සුදුසුම දෙය වන්නේ එය විවෘත කිරීමෙන් පසු අවසර අතහැර දැමීමයි.
ෆැල්කන් මෝමොට්

3
"නිර්නාමික" - ලෝකයේ භාවිතා කරන්නන් ඇතැම් වරායන්හි ඇතැම් සේවාවන් සෙවීම සඳහා පුහුණු කර ඇත. සමහර අවස්ථාවල එය ප්‍රමිතිගත කර ඇත. උදාහරණයක් ලෙස, වරාය 80 හි HTTP සහ 443 වරායේ HTTPS. ලෝකයේ භාවිතා කරන්නන් සහ ප්‍රමිතීන් වෙනස් කිරීම දුෂ්කර ය.

1
24FalconMomot 1024 ට අඩු වරායන් වරප්‍රසාද ලබා තිබේ නම්, 80 වන වරායේ මූල වරප්‍රසාද ලබා ගැනීම සඳහා මුරපදයක් ඇතුළත් කිරීමට අපාචේ සේවාදායකයාට අවශ්‍ය නොවන්නේ ඇයි? ඔවුන් එය එසේ කරන්නේ කෙසේද? මම හිතන්නේ ප්‍රශ්න කරන්නාට ඒ ආකාරයෙන් දේවල් කරන්නේ කෙසේදැයි දැන ගැනීමට අවශ්‍යය (එය තාක්‍ෂණිකව මූල ලෙස භාවිතා කළත් නැතත්). මම වැරදියි නම් මට කියන්න නිදහස් වන්න, දීපක් මිට්ටාල්.
බ්‍රැට්සෝර්ෆුස්ට්‍රොක්ස්

Answers:


374

කෙටි පිළිතුර: ඔබට බැහැ. 1024 ට අඩු වරායන් විවෘත කළ හැක්කේ මූලයෙන් පමණි. අදහස් දැක්වීමට අනුව - හොඳයි, ඔබට CAP_NET_BIND_SERVICE භාවිතා කළ හැකිය , නමුත් ජාවා බින් සඳහා යොදන එම ප්‍රවේශය ඕනෑම ජාවා වැඩසටහනක් මෙම සැකසුම සමඟ ක්‍රියාත්මක කිරීමට හේතු වනු ඇත, එය අනාරක්ෂිත, ආරක්ෂක අවදානමක් නොවේ නම්.

දිගු පිළිතුර: ඔබට සාමාන්‍ය පරිශීලකයෙකු ලෙස විවෘත කළ හැකි වරාය 80 හි ඇති සම්බන්ධතා වෙනත් වරායකට හරවා යැවිය හැකිය.

මූල ලෙස ධාවනය කරන්න:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

ලූප්බැක් උපාංග (localhost වැනි) පූර්වාරක්‍ෂක නීති භාවිතා නොකරන බැවින්, ඔබට localhost යනාදිය භාවිතා කිරීමට අවශ්‍ය නම්, මෙම රීතියද එක් කරන්න ( ස්තූතියි @Franceco ):

# iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

සටහන: ඕනෑම පරිශීලකයෙකුට වරාය 8080 (හෝ ඔබ භාවිතා කිරීමට තීරණය කරන වෙනත් ඕනෑම ඉහළ වරායක්) විවෘත කළ හැකි බැවින් ඉහත විසඳුම බහු-පරිශීලක පද්ධති සඳහා සුදුසු නොවේ . ( සීසර්බී වෙත බැර ).

සංස්කරණය කරන්න: අදහස් දැක්වීමේ ප්‍රශ්නයට අනුව - ඉහත රීතිය මකා දැමීමට:

# iptables -t nat --line-numbers -n -L

මෙය මෙවැනි දෙයක් ප්‍රතිදානය කරයි:

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 redir ports 8088
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 8080

ඔබ උනන්දුවක් දක්වන රීතිය nr වේ. 2, එබැවින් එය මකා දැමීමට:

# iptables -t nat -D PREROUTING 2

15
Un සනී: උඩුකුරු යනු බටහිර වේගවත්ම තුවක්කුව සඳහා නොව හොඳම ප්‍රතිචාර සඳහා ය. ඔබගේ හොඳම දේ මෙතෙක් (මම සඳහන් කළේ iptables පමණි; ඔබ සැබවින්ම සම්පූර්ණ විධාන රේඛාව ලබා දී ඇත). මගේ සතුව ඇති එකම දෙය වන්නේ 8080 වරායට බැඳීමට අනෙක් පරිශීලකයින්ට ඇති හැකියාව පිළිබඳ
අවවාදයයි.

3
මෙය IPv6 සමඟ ක්‍රියා නොකරන බව සලකන්න.
එමානුවෙල් බර්ග්

3
මට අවශ්‍ය වූ විට මෙම රීතිය ඉවත් කරන්නේ කෙසේදැයි කිසිවෙකුට පැහැදිලි කළ හැකිද? එය ධාවනය කිරීමෙන් පසු, එය ක්‍රියාත්මක වේ, නමුත් පෙනෙන ආකාරයට එය “රීතියක්” නොවේ, මන්ද එය කරන විට එය නොපෙන්වයි sudo iptables --list. Iptables යනු කුමක්ද සහ කරන්නේ කුමක්දැයි මම දනිමි, නමුත් මම මීට පෙර කිසි විටෙකත් එය භාවිතා කර නොමැත.
එන්කෝඩරර්

4
ඔබගේ පිළිතුරට ස්තූතියි ... මම උබුන්ටු නැවත ආරම්භ කරන සෑම විටම මෙම රීතිය අතුරුදහන් වන අතර මට එය නැවත ක්‍රියාත්මක කිරීමට සිදුවේ. එය සදහටම සුරැකීමට ක්‍රමයක් තිබේද?
කෝඩර්ජි

4
Od කෝඩර්ජි: ප්‍රජා ලේඛනයේ "සුරකින්න" කොටස පරීක්ෂා කරන්න: help.ubuntu.com/community/IptablesHowTo
Sunny

81

Authbind භාවිතා කරන්න .

ඔබ ජාවා හි IPv4 පමණක් තොගය සක්‍රීය කළහොත් එය ජාවා සමඟ පවා ක්‍රියා කරයි. මම භාවිතා කරන්නේ:

authbind --deep $JAVA_HOME/bin/java -Djava.net.preferIPv4Stack=true …

4
සේවාදායකය ටොම්කාට් නම් ඔබට AUTHBIND=yes/ etc / default / tomcat6 සැකසීමෙන් ස්වයංක්‍රීයව authbind භාවිතා කළ හැකිය
එම්මානුවෙල්

සුපුරුදු ජාවා පැකේජය සමඟ උබුන්ටු සේවාදායකයේ වැඩ කිරීමට මට මෙය නොහැකි විය ...
Ash ෂ්ලි

මා ද, දන්නා විසඳුමක් ද?
සලකුණු කරන්න

11
authbindමෙය සැබවින්ම සිදුවීමට ඉඩ දීම සඳහා ඔබ වින්‍යාසගත කළ යුතු බව සලකන්න . මෑන් පිටුවෙන්: "/ etc / authbind / byport / port පරීක්‍ෂා කර ඇත. මෙම ගොනුව ඇමතුම් පරිශීලකයාට ක්‍රියාත්මක කිරීම සඳහා ප්‍රවේශ විය හැකි නම්, ප්‍රවේශය (2) අනුව, එවිට වරායට බැඳීමට අවසර ඇත." , උදා: වරාය 80 සඳහා sudo touch /etc/authbind/byport/80 ; sudo chmod 777 /etc/authbind/byport/80. ආරම්භක ස්ථාපනය authbindසාමාන්‍යයෙන් පෙර සැකසූ අවසරයක් නොමැත.
ජේසන් සී

4
ඔහ් nonononononono, කිසි විටෙකත් 777 කිසිවක් chmod නොකරන්න!
ජොහැන්නස්

64

ඔබේ පද්ධතිය එයට සහය දක්වන්නේ නම් ඔබට හැකියාවන් භාවිතා කළ හැකිය. මිනිසාගේ හැකියාවන් බලන්න, ඔබට අවශ්‍ය වන්නේ CAP_NET_BIND_SERVICE ය.

නව ඩේබියන් / උබුන්ටු මත ඔබට ධාවනය කළ හැකිය:

sudo apt-get install libcap2-bin 
sudo setcap 'cap_net_bind_service=+ep' /path/to/program

මෙය nodejs සඳහා ක්‍රියා කරයි: setcap 'cap_net_bind_service = + ep' / usr / bin / nodejs
JayS

5
මෙය. මම කල්පනා කරනවා ඇයි මේ පිළිතුරට වැඩි නැඹුරුවක් නැත්තේ කියලා. Iptables විකල්පය imho ට වඩා බෙහෙවින් පහසුය.
ඩොමිනික් ආර්

7
මෙය නිවැරදි හා වඩාත්ම කාර්යක්ෂම පිළිතුරයි, අනෙක් සියලුම පිළිතුරු ක්‍රියාකාරීත්වයට පහර දීමට හෝ iffy / අනාරක්ෂිත වීමට හේතු වේ.
OneOfOne

පරිපූර්ණ. දැන ගැනීම සතුටක්: සෙට්කැප් රේඛාවෙන් පසුව ඔබ එම වැඩසටහන ආරම්භ කළ යුතුය (ධාවන වැඩසටහන් වලට එය බලපාන්නේ නැත).
ස්ටෙෆාන් රීච්

43

තවත් විසඳුමක් වන්නේ ඔබේ යෙදුම 80 වන වරාය සමඟ බැඳීමට හැකි වන පරිදි සැකසීමයි. මූල ලෙස පහත සඳහන් දේ කරන්න

chown root ./myapp
chmod +S ./myapp

මෙය සිදු කිරීම, එය හරියටම නිවැරදිව සිදු නොකළහොත්, විභව ආරක්ෂක වළවල් වලට ඔබව නිරාවරණය කරනු ඇති බව මතක තබා ගන්න, මන්ද ඔබේ යෙදුම ජාලය සමඟ කථා කරන අතර පූර්ණ මූල පුද්ගලිකත්වයන් සමඟ ක්‍රියාත්මක වනු ඇත. ඔබ මෙම විසඳුම ගන්නේ නම්, ඔබ Apache හෝ Lighttpd සඳහා මූලාශ්‍ර කේතය හෝ ඒ හා සමාන දෙයක් දෙස බැලිය යුතුය, එහිදී ඔවුන් වරාය විවෘත කිරීම සඳහා මූල වරප්‍රසාද භාවිතා කරයි, නමුත් වහාම එම පුද්ගලයෝ අතහැර දමා අඩු වරප්‍රසාදිත පරිශීලකයෙකු බවට පත්වේ. කොල්ලකාරයෙකුට ඔබේ මුළු පරිගණකයම භාර ගත නොහැක.

යාවත්කාලීන කිරීම: මෙම ප්‍රශ්නයේ දැකිය හැකි පරිදි , 2.6.24 සිට ලිනක්ස් කර්නල් වලට නව හැකියාවක් ඇති බව පෙනේ, එය ක්‍රියාත්මක කළ හැකි (නමුත් ස්ක්‍රිප්ට් එකක් නොවේ) “ CAP_NET_BIND_SERVICE” හැකියාවක් ඇති බව සලකුණු කිරීමට ඔබට ඉඩ සලසයි . ඔබ "libcap2-bin" නම් ඩෙබියන් පැකේජය ස්ථාපනය කරන්නේ නම්, විධානය නිකුත් කිරීමෙන් ඔබට එය කළ හැකිය

setcap 'cap_net_bind_service=+ep' /path/to/program

7
පුද්ගලිකත්වය අතහැර දැමිය යුතු ආකාරය යෙදුම නොදන්නේ නම් එය root ලෙස ධාවනය කිරීම හා සමාන වේ.
සීසර් බී

15
මෙය භයානක ය. මෙයින් අදහස් කරන්නේ ඕනෑම ඉල්ලීමක් root ලෙස ක්‍රියාත්මක වන බවයි. එය අපාචේ පවා බන්ධනය සඳහා මූලයක් ලෙස ආරම්භ වන අතර පසුව වරප්‍රසාද වෙනත් පරිශීලකයෙකුට ලබා දේ.
සනී

9
පෝල්: iptables එතරම් භයානක නොවේ, මන්දයත් යෙදුම සම්මුතියකට ලක්වුවද, එය ප්‍රහාරයන් සඳහා පද්ධතිය නිරාවරණය නොකරනු ඇත, අවම වශයෙන් මූල වරප්‍රසාද සමඟ නොවේ. යෙදුම root ලෙස ධාවනය කිරීම තවත් කතාවකි.
සනී

1
Iptables සඳහා අන්තරාය වන්නේ මෙය බහු පරිශීලක පද්ධතියක් නම්, සීසර්බී පැවසූ පරිදි ඕනෑම කෙනෙකුට 8080 ට බැඳිය හැකි අතර ගමනාගමනයට බාධා කළ හැකිය.
සනී

1
lol, පිළිගත් පිළිතුරට -15 ඇති ආකාරය ආදරය කරන්න
ඉවාන් ටෙරාන්

41

මම ඉදිරියෙන් Nginx භාවිතා කරමි. එය localhost මත ද ධාවනය කළ හැකිය.

  • apt-get install nginx

.. හෝ ..

  • pkg_add -r nginx

.. හෝ ඔබේ මෙහෙයුම් පද්ධතියට ගැලපෙන දේ.

Localhost මත ධාවනය වන්නේ නම් nginx.conf හි ඔබට අවශ්‍ය වන්නේ:

සේවාදායකය {
        සවන් දෙන්න 80;
        server_name some.domain.org;
        ස්ථානය / {
            proxy_set_header ධාරක $ ධාරක;
            proxy_set_header X-Real-IP $ remote_addr;
            proxy_set_header එක්ස්-ෆෝවර්ඩ්-සඳහා $ proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8081;
        }
}

මම ඇත්තටම මෙම විසඳුමට කැමතියි.
thomasfedb

1
මෙය JFrog විසින්ම යෝජනා කරන ලද විසඳුමකි: jfrog.com/confluence/display/RTF/nginx
stolsvik

36

සනී සහ සීසර්බී විසින් යෝජනා කරන ලද ප්‍රවේශය:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

හොඳින් ක්‍රියා කරන නමුත් එයට කුඩා අඩුපාඩුවක් ඇත - එය පරිශීලකයා 80 වෙනුවට 8080 වරායට කෙලින්ම සම්බන්ධ වීම වළක්වන්නේ නැත.

මෙය ගැටළුවක් විය හැකි විට පහත දැක්වෙන අවස්ථාව සලකා බලන්න.

වරාය 8080 හි HTTP සම්බන්ධතා සහ 8181 වරායේ HTTPS සම්බන්ධතා පිළිගන්නා සේවාදායකයක් අප සතුව ඇතැයි කියමු.

පහත දැක්වෙන යළි-යොමුවීම් ස්ථාපිත කිරීම සඳහා අපි iptables භාවිතා කරමු:

80  ---> 8080
443 ---> 8181

දැන්, අපගේ සේවාදායකයා HTTP පිටුවක සිට HTTPS පිටුවකට හරවා යැවීමට තීරණය කරයි යැයි සිතමු. අපි ප්‍රතිචාරය ප්‍රවේශමෙන් නැවත ලියන්නේ නැත්නම්, එය වෙත හරවා යවනු https://host:8181/ලැබේ. මෙම අවස්ථාවෙහිදී, අප ඉස්කුරුප්පු කර ඇත:

  • සමහර පරිශීලකයින් https://host:8181/URL එක බුක්මාක් කරන අතර ඔවුන්ගේ පිටු සලකුණු බිඳ දැමීම වළක්වා ගැනීම සඳහා අපට මෙම URL එක පවත්වා ගත යුතුය.
  • අනෙක් පරිශීලකයින්ට ඔවුන්ගේ ප්‍රොක්සි සේවාදායකයන් සම්මත නොවන SSL වරායන් සඳහා සහය නොදක්වන බැවින් සම්බන්ධ වීමට නොහැකි වනු ඇත.

මම පහත ප්‍රවේශය භාවිතා කරමි:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8181
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -m mark --mark 1 -j ACCEPT
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8181 -m mark --mark 1 -j ACCEPT

INPUT දාමයේ පෙරනිමි ප්‍රතික්ෂේප කිරීමේ රීතිය සමඟ ඒකාබද්ධව මෙම ප්‍රවේශය මඟින් පරිශීලකයින් 8080, 8181 වරායන් වෙත කෙලින්ම සම්බන්ධ වීම වළක්වයි.


1
මෙය හොඳයි, නමුත් 0.0.0.0:8080 වෙනුවට ඩීමන් දේශීය හොස්ටල් වෙත බැඳ නොගන්නේ මන්ද? මට එය කිරීමට අවශ්‍යයි, නමුත් ඒ සඳහා මට අවශ්‍ය වේ.
අමලා

එය ක්රියා කරයි, ඇත්තෙන්ම සිසිල්.
xtian

29

සාම්ප්‍රදායිකව යුනික්ස් හි, අඩු වරායන් (<1024) සමඟ බැඳිය හැක්කේ මූලයට පමණි.

මේ සඳහා වැඩ කිරීමට ඇති සරලම ක්‍රමය නම්, ඔබේ සේවාදායකය ඉහළ වරායක ධාවනය කිරීමයි (නිදසුනක් ලෙස, 8080) සහ සරල වරාය රීතියක් භාවිතා කරමින් 80 වරායේ සිට වරාය 8080 දක්වා සම්බන්ධතා යොමු කිරීම. මෙය සමඟින් ඔබට අමතර ආරක්ෂාවක් අහිමි වන බව සලකන්න. අඩු වරාය; ඔබේ පරිගණකයේ ඕනෑම පරිශීලකයෙකුට 8080 වරායට බැඳිය හැකිය.


23

ඔබේ පද්ධතිය එයට සහය දක්වන්නේ නම් ඔබට හැකියාවන් භාවිතා කළ හැකිය. බලන්න man capabilities, ඔබට අවශ්‍ය වන්නේ CAP_NET_BIND_SERVICEඑයයි. නැත, මම ඒවා කිසි විටෙකත් භාවිතා නොකළ අතර ඒවා සැබවින්ම ක්‍රියාත්මක වේදැයි මම නොදනිමි :-)


1
ඔවුන් වැඩ කරයි, සාමාන්‍ය පරිශීලකයෙකු ලෙස tcpdump වැනි මෙවලම් ධාවනය කිරීමට මම CAP_NET_RAW භාවිතා කරමි.
ජස්ටින්

12

ඔබගේ යෙදුම් සේවාදායකයන් ඉදිරිපිට ප්‍රතිලෝම ප්‍රොක්සියක් (nginx, apache + mod_proxy) හෝ හැඹිලි ප්‍රතිලෝම ප්‍රොක්සියක් (දැල්ලන්, වාර්නිෂ්) භාවිතා කරන්න!

ප්‍රතිලෝම ප්‍රොක්සියක් සමඟ ඔබට සිත්ගන්නාසුලු දේවල් රාශියක් ලබා ගත හැකිය:

  • පැටවුම් තුලනය
  • විසිතුරු දෝෂ පිටුවක් ලැබෙන පරිශීලකයින් සමඟ ඔබගේ යෙදුම් සේවාදායකය නැවත ආරම්භ කිරීම
  • හැඹිලිය සමඟ දේවල් වේගවත් කරන්න
  • ඔබ සාමාන්‍යයෙන් කරන්නේ ප්‍රතිවිකුණුම්-ප්‍රොක්සියකින් මිස යෙදුම් සේවාදායකයකින් නොවේ

6

ඔබට redir වැඩසටහන භාවිතා කළ හැකිය:

sudo redir --lport=80 --laddr=192.168.0.101 --cport 9990 --caddr=127.0.0.1

4

සුඩෝ භාවිතා කරන්න.

සුඩෝ වින්‍යාස කරන්න එවිට සාමාන්‍ය පරිශීලකයාට සුදුසු විධාන ක්‍රියාත්මක කළ හැකිය:

/etc/init.d/httpd start

හෝ

apachectl stop

හෝ

/usr/local/apache2/apachectl restart

හෝ

/myapp/myappbin start

(හෝ ඔබ විශේෂිත වෙබ් සේවාදායකයක් / යෙදුමක් ආරම්භ කිරීමට / නැවැත්වීමට භාවිතා කරන වෙනත් විධානයක් / ස්ක්‍රිප්ට් එකක්)


8
මෙය එකම ගැටළුවක් ඇත - සේවාවක් root ලෙස ධාවනය කිරීම නරක පුරුද්දකි.
කෙවින් පැන්කෝ

4

හිරුගේ පිළිතුර නිවැරදි ය, නමුත් ලූප්බැක් අතුරුමුහුණත PREROUTING වගුව භාවිතා නොකරන බැවින් ඔබට අමතර ගැටළු වලට මුහුණ දීමට සිදුවේ,

එබැවින් එකතු කළ යුතු iptables නීති දෙකකි:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

3

ලිනක්ස් සමඟ, ඔබට තවත් විකල්ප දෙකක් තිබේ:

ලිනක්ස් කර්නලයට දිගු කිරීම දෙකම ඉතා සියුම් මට්ටමකින් ප්‍රවේශවීමේ අයිතිය ලබා දීමට ඉඩ දෙයි. වරාය 80 විවෘත කිරීම සඳහා මෙම ක්‍රියාවලිය ලබා දීමට මෙය ඔබට ඉඩ සලසයි, නමුත් එය වෙනත් මූල අයිතිවාසිකම් කිසිවක් උරුම කර නොගනී.

මා අසා ඇති දෙයින්, grsecurity භාවිතා කිරීම වඩා සරල නමුත් SELinux වඩා ආරක්ෂිතයි.


2

එක් විසඳුමක් නම් 80 වන වරාය සඳහා පැකට් මත PAT සිදු කිරීම සඳහා iptables භාවිතා කිරීමයි. උදාහරණයක් ලෙස දේශීය වරාය 8080 වෙත පැකට් ගෙනයාමට ඔබට මෙය භාවිතා කළ හැකිය. පිටතට යන පැකට් 80 වරායට නැවත සකසා ගන්න.

මගේ අත්දැකීම් අනුව, ආරක්ෂක ගැටළු හේතුවෙන් ලිනක්ස් හි සියුම් අවසර ලක්‍ෂණ සම්මත කර්නල් වලට සම්පාදනය නොකෙරේ.


2

පරිශීලක විසින් ක්‍රියාත්මක කරන විධානයකට වරාය 80 භාවිතා කළ හැකි වන පරිදි ඔබ මෙය කිරීමට උත්සාහ කරන්නේ නම්, ඔබේ එකම විසඳුම වන්නේ iptables උපක්‍රම හෝ ක්‍රියාත්මක කළ හැකි setuid-to-root සැකසීමයි.

අපාචේ වැනි දෙයක් මෙය කරන ආකාරය (එය 80 වරායට බැඳී ඇත, නමුත් මූල හැර වෙනත් අයෙකු ලෙස ක්‍රියාත්මක වේ) මූල ලෙස ධාවනය කිරීම, වරායට බැඳීම, පසුව වරායෙන් පසු වරප්‍රසාද නොලත් පරිශීලකයාට ක්‍රියාවලියේ හිමිකාරිත්වය වෙනස් කිරීම. සකසා ඇත. ඔබ ලියන යෙදුම root මඟින් ධාවනය කළ හැකි නම්, වරාය සැකසීමෙන් පසු එය හිමිකරු පුද්ගලික නොවන පරිශීලකයා ලෙස වෙනස් කළ හැකිය. නමුත් මෙය සාමාන්‍ය පරිශීලකයෙකුට විධාන රේඛාවෙන් ධාවනය කිරීමට පමණක් නම්, ඔබට වෙනත් විසඳුම් වලින් එකක් භාවිතා කිරීමට සිදුවේ.


2

මට මූල ලෙස ධාවනය කිරීමට අවශ්‍ය නොවන විවිධ වෙබ් සේවා යෙදුම් (පයිතන් ස්ක්‍රිප්ට්, ටොම්කාට් එන්ජින්, ...) ඇති විට මම සාමාන්‍යයෙන් අපාචේ වෙබ් සේවාදායකයක් ඔවුන් ඉදිරිපිට වින්‍යාස කරමි. Apache 80 වරායට ඇහුම්කන් දෙන අතර ටොම්කාට් 8080 ට සවන් දෙයි.

අපාචේ: s වින්‍යාසය:

ProxyPass /webapp http://localhost:8080/webapp
ProxyPassReverse /webapp http://localhost:8080/webapp

වැඩි විස්තර සඳහා මොඩ්-ප්‍රොක්සි ප්‍රලේඛනය බලන්න: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html


1
මෙම විසඳුමේ ඇති අඩුපාඩුව නම් ටොම්කාට් ලොග් වල එන අයිපී නැති වීමයි.
එමානුවෙල් බර්ග්

2

මම හිතන්නේ හොඳම විසඳුම ඔබේ යෙදුම අවලංගු කිරීමයි. එහි වරාය බැඳී ඇති විගසම වෙනත් පරිශීලකයෙකු වෙත මාරුවීමෙන් වරප්‍රසාද අත්හැරිය යුතුය.


2

සමහර සත්කාරක පද්ධති NAT මොඩියුලය භාවිතා කිරීමට ඉඩ නොදේ, 'iptables' මෙම නඩුවේ ගැටළුව විසඳන්නේ නැත.

Xinetd ගැන කුමක් කිව හැකිද?

මගේ නඩුවේ (උබුන්ටු 10.04)

# apt-get install xinetd
# touch /etc/xinetd.d/my_redirect
# vim /etc/xinetd.d/my_redirect

වින්‍යාසය අලවන්න:

service my_redirector_80
{
 disable = no
 socket_type = stream
 protocol = tcp
 user = root
 wait = no
 port = 80
 redirect = localhost 8080
 type = UNLISTED
}

ඉන්පසු:

# service xinetd restart

http://docs.codehaus.org/display/JETTY/port80 වඩා හොඳ පැහැදිලි කරයි.


1
මෙය මූලික වශයෙන් සේවාදායකය ඉදිරිපිට ප්‍රතිලෝම ප්‍රොක්සියක් තැබීමට සමාන ය, නමුත් එය HTTP ප්‍රොටෝකෝලය තේරුම් ගෙන ඇති එක්ස්ප්‍රෝවර්ඩ්-ෆෝ වැනි ප්‍රයෝජනවත් ශීර්ෂයන් එක් කළ හැකි HAproxy, Pound හෝ වාර්නිෂ් වැනි කැපවූ විසඳුම් හා සසඳන විට එය අකාර්යක්ෂම වේ.
එමානුවෙල් බර්ග්

මෙය දැනට මා වඩාත් කැමති විසඳුම වන්නේ එය iptables සමඟ ඉදිරියට යැවීමට වඩා මුල සිටම ක්‍රියාත්මක කිරීම අඩු කාර්යයක් වන බැවිනි.
h22

0

ක පසෙකට ලෙස, ඒ අතරින් කිහිපයකි සහ Solaris (කවුරුත් මතක බව එක්?) ඔබ මෙය (අඩු වරාය වෙත බඳින්න) වරප්රසාද තීව්ර වීමක් නොමැතිව (එනම්, root වෙත මාරු කිරීමට වැඩසටහන් භාවිතා කරමින්) ඉඩ දෙන්න. ඔබ ලිනක්ස් නියම කළ බැවින්, මම මෙය පළ කරන්නේ මෙම ප්‍රශ්නය සොයාගත හැකි වෙනත් අයට දැනුම් දීමක් වශයෙනි.


දී විස්තර yaws.hyber.org/privbind.yaws පොදු misfeature එක්සත් ජාතීන්ගේ * X සොයා ... එකම මූල 1024. බොහෝ ඩොලර් පහත වරාය බැඳීමට හැකි බව සීමා උත්සහ නාස්ති කර ඇති අතර -often- ප්රතිඵල ආරක්ෂක හිඩැසක් ඇත …FreeBSD$ sysctl net.inet.ip.portrange.reservedhigh=0 Solaris$ /usr/sbin/usermod -K defaultpriv=basic,net_privaddr erlang; grep erlang /etc/user_attr Linux$ setcap 'cap_net_bind_service=+ep' /usr/lib/erlang/erts-5.7.4/bin/beam Debian$ echo 'net.ipv4.ip_unprivileged_port_start=0' > /etc/sysctl.d/50-unprivileged-ports.conf && sysctl --system
ඩෙවොන්

0

Necromancing.

සරල. සාමාන්‍ය හෝ පැරණි කර්නලයක් සමඟ, ඔබ එසේ නොකරයි.
අනෙක් අය පෙන්වා දුන් පරිදි, iptables හට වරායක් ඉදිරිපත් කළ හැකිය.
අනෙක් අය පෙන්වා දුන් පරිදි, CAP_NET_BIND_SERVICE ද එම කාර්යය කළ හැකිය.
ඇත්ත වශයෙන්ම ඔබ ඔබේ වැඩසටහන ස්ක්‍රිප්ට් එකකින් දියත් කළහොත් CAP_NET_BIND_SERVICE අසාර්ථක වනු ඇත, ඔබ ෂෙල් පරිවර්තකයේ තොප්පිය සකසා ඇත්නම් එය අර්ථ විරහිත ය, ඔබට ඔබේ සේවාව root ලෙස ක්‍රියාත්මක කළ හැකිය ...
උදා: ජාවා සඳහා, ඔබ එය යෙදිය යුතුය ජාවා ජේවීඑම් වෙත

sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/lib/jvm/java-8-openjdk/jre/bin/java

නිසැකවම, එයින් අදහස් වන්නේ ඕනෑම ජාවා වැඩසටහනකට පද්ධති වරායන් බැඳ තැබිය හැකි බවයි.
මොනෝ / .නෙට් සඳහා ඩිටෝ.

මටත් විශ්වාසයි xinetd හොඳම අදහස් නොවන බව.
නමුත් ක්‍රම දෙකම හක්ක බැවින්, සීමාව ඉවත් කිරීමෙන් පමණක් සීමාව ඉවත් නොකරන්නේ ඇයි?
ඔබ සාමාන්‍ය කර්නලයක් ධාවනය කළ යුතු යැයි කිසිවෙකු කීවේ නැත, එබැවින් ඔබට ඔබේම දෑ ක්‍රියාත්මක කළ හැකිය.

ඔබ නවතම කර්නලය සඳහා ප්‍රභවය බාගත කරන්න (හෝ දැනට ඔබ සතුව ඇති). පසුව, ඔබ වෙත යන්න:

/usr/src/linux-<version_number>/include/net/sock.h:

එහිදී ඔබ මෙම රේඛාව සොයයි

/* Sockets 0-1023 can't be bound to unless you are superuser */
#define PROT_SOCK       1024

එය වෙනස් කරන්න

#define PROT_SOCK 0

ඔබට අනාරක්ෂිත ssh තත්වයක් ඇතිවීමට අවශ්‍ය නැතිනම්, ඔබ මෙය වෙනස් කරන්නේ: # PROT_SOCK 24 යන්න අර්ථ දක්වන්න

සාමාන්‍යයෙන්, මම ඔබට අවශ්‍ය අවම සැකසුම භාවිතා කරමි, උදා: http සඳහා 79, හෝ 25 වරායේ SMTP භාවිතා කරන විට 24.

දැනටමත් එපමණයි.
කර්නලය සම්පාදනය කර එය ස්ථාපනය කරන්න.
නැවත ආරම්භ කරන්න.
අවසන් - එම මෝඩ සීමාව GONE වන අතර එය ස්ක්‍රිප්ට් සඳහාද ක්‍රියා කරයි.

මෙන්න ඔබ කර්නලයක් සම්පාදනය කරන ආකාරය:

https://help.ubuntu.com/community/Kernel/Compile

# You can get the kernel-source via package linux-source, no manual download required
apt-get install linux-source fakeroot

mkdir ~/src
cd ~/src
tar xjvf /usr/src/linux-source-<version>.tar.bz2
cd linux-source-<version>

# Apply the changes to PROT_SOCK define in /include/net/sock.h

# Copy the kernel config file you are currently using
cp -vi /boot/config-`uname -r` .config

# Install ncurses libary, if you want to run menuconfig
apt-get install libncurses5 libncurses5-dev

# Run menuconfig (optional)
make menuconfig

# Define the number of threads you wanna use when compiling (should be <number CPU cores> - 1), e.g. for quad-core
export CONCURRENCY_LEVEL=3
# Now compile the custom kernel
fakeroot make-kpkg --initrd --append-to-version=custom kernel-image kernel-headers

# And wait a long long time

cd ..

කෙටියෙන් කිවහොත්, ඔබට ආරක්ෂිතව සිටීමට අවශ්‍ය නම් iptables භාවිතා කරන්න, ඔබට මෙම සීමාව නැවත කිසි විටෙකත් කරදරයක් නොවන බවට වග බලා ගැනීමට අවශ්‍ය නම් කර්නලය සම්පාදනය කරන්න.


කරුණාකර යමෙක් පහත වැටීම් පැහැදිලි කරයිද? කර්නල් සම්පාදනය ක්‍රියා නොකරයිද? එසේත් නැතිනම් සාමාන්‍ය ගබඩාවලින් කර්නල් උත්ශ්‍රේණි කිරීම ඔබට කළ නොහැකි නිසාද?
අර්බුදයක

මම මෙම විසඳුම උත්සාහ කළෙමි ( sudo setcap cap_net_bind_service=+ep /path-to-java/java) නමුත් java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directoryජාවා කැප්ස් සකසා ඇත්නම් මට සෑම විටම ලැබේ . unix.stackexchange.com/a/16670/55508
ඩැනියෙල් ඇල්ඩර්

1
පෙර දෝෂය එකතු <javahome>/lib/amd64/jli/කර ld.so.confධාවනය කිරීමෙන් විසඳා ඇතsudo ldconfig
ඩැනියෙල් ඇල්ඩර්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.