برای کسانی که نیاز دارند برای خود، عزیزانشان، دسترسی به سرورهایشان را از هر کجای دنیا از طریق SSH/RDP/دیگر، یک RTFM/spur کوچک فراهم کنند.
ما باید بدون VPN و سایر زنگ ها و سوت ها، از هر دستگاهی که در دست داریم کار کنیم.
و برای اینکه مجبور نباشید زیاد با سرور ورزش کنید.
تنها چیزی که برای این نیاز دارید این است
البته "همه چیز در اینترنت است" (حتی در
ما استفاده از Fedora/CentOS را به عنوان مثال تمرین خواهیم کرد، اما این مهم نیست.
اسپور هم برای مبتدیان و هم برای متخصصان در این زمینه مناسب است، بنابراین نظراتی وجود دارد، اما کوتاهتر خواهند بود.
1. سرور
-
knock-server را نصب کنید:
yum/dnf install knock-server
-
آن را پیکربندی کنید (به عنوان مثال در ssh) - /etc/knockd.conf:
[options] UseSyslog interface = enp1s0f0 [SSHopen] sequence = 33333,22222,11111 seq_timeout = 5 tcpflags = syn start_command = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 3600 stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [SSHclose] sequence = 11111,22222,33333 seq_timeout = 5 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
قسمت "باز کردن" پس از 1 ساعت به طور خودکار بسته می شود. هیچوقت نمیدونی...
-
/etc/sysconfig/iptables:
... -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT ...
-
رو به جلو:
service iptables restart service knockd start
-
می توانید RDP را به سرور مجازی ویندوز اضافه کنید که در داخل می چرخد (/etc/knockd.conf؛ نام رابط را متناسب با سلیقه خود جایگزین کنید):
[RDPopen] sequence = 44444,33333,22222 seq_timeout = 5 tcpflags = syn start_command = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 cmd_timeout = 3600 stop_command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 [RDPclose] sequence = 22222,33333,44444 seq_timeout = 5 tcpflags = syn command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
ما تمام ضربات خود را از مشتری روی سرور با دستور دنبال می کنیم
iptables -S
.
2. راهنمای چنگک زدن
knockd.conf:
مانا همچنین شامل همه چیز است (اما این نادرست است)، اما knockd دوستی است که در پیام ها بسیار خسیس است، بنابراین باید بسیار مراقب باشید.
- نسخه
در مخازن Fedora/CentOS، آخرین ضربه برای امروز 0.63 است. چه کسی UDP می خواهد - به دنبال بسته های 0.70 باشید. - رابط
در پیکربندی پیش فرض Fedora/CentOS این خط بدون. با دست خود اضافه کنید، در غیر این صورت کار نمی کند. - فاصله
در اینجا شما می توانید با توجه به سلیقه خود انتخاب کنید. لازم است که مشتری زمان کافی برای تمام ضربات داشته باشد - و ربات اسکنر پورت خراب می شود (و 146٪ اسکن می شود). - شروع/توقف/فرمان.
اگر یک دستور وجود دارد، دستور، اگر دو دستور وجود دارد، سپس start_command+stop_command.
اگر اشتباه کنید، knockd ساکت می ماند، اما کار نمی کند. - proto-
از نظر تئوری می توان از UDP استفاده کرد. در عمل، tcp و udp را با هم مخلوط کردم و مشتری از ساحل در بالی فقط برای بار پنجم توانست دروازه را باز کند. زیرا TCP در صورت نیاز وارد شد، اما UDP یک واقعیت نیست. اما باز هم این موضوع سلیقه ای است. - دنباله
چنگک ضمنی این است که دنباله ها نباید با هم تلاقی داشته باشند ... چگونه آن را قرار دهیم ...
به عنوان مثال، این:
open: 11111,22222,33333
close: 22222,11111,33333
با ضربه 11111 باز کن برای ضربه بعدی در 22222 منتظر خواهد ماند. اما پس از این ضربه (22222) شروع به کار خواهد کرد. نزدیک و همه چیز خواهد شکست این به تاخیر مشتری نیز بستگی دارد. چنین چیزهایی ©.
از iptables
اگر در /etc/sysconfig/iptables این است:
*nat
:PREROUTING ACCEPT [0:0]
واقعاً ما را آزار نمی دهد، بنابراین اینجاست:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
دخالت میکنه
از آنجایی که knockd قوانینی را به انتهای زنجیره INPUT اضافه می کند، ما Reject دریافت می کنیم.
و خاموش کردن این رد یعنی باز کردن ماشین به روی همه بادها.
برای اینکه در iptables گم نشوید چه چیزی را قبل از چه وارد کنید (مثل این
- پیش فرض در CentOS/Fedora اول قانون ("آنچه ممنوع نیست مجاز است") با مخالف جایگزین می شود.
- و قانون آخر را حذف می کنیم.
نتیجه باید این باشد:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
البته می توانید به جای DROP REJECT را انجام دهید، اما با DROP زندگی برای ربات ها سرگرم کننده تر خواهد بود.
3. مشتری
این مکان جالب ترین است (از نظر من)، زیرا شما باید نه تنها از هر ساحل، بلکه از هر وسیله ای نیز کار کنید.
در اصل، تعدادی از مشتریان در لیست ذکر شده اند
هنگام انتخاب مشتری، باید مطمئن شوید که از گزینه تاخیر بین بسته ها پشتیبانی می کند. بله، تفاوت هایی بین سواحل وجود دارد و 100 مگابیت هرگز تضمین نمی کند که بسته ها به ترتیب درست در زمان مناسب از یک مکان مشخص می رسند.
و بله، هنگام تنظیم مشتری، باید خود تاخیر را انتخاب کنید. تایم اوت خیلی زیاد - ربات ها حمله می کنند، خیلی کم - مشتری وقت نخواهد داشت. تأخیر بسیار زیاد - مشتری به موقع به آن نمی رسد یا درگیری با احمق ها وجود خواهد داشت (به "راک ها" مراجعه کنید)، بسیار کم - بسته ها در اینترنت گم می شوند.
با تایم اوت = 5 ثانیه، تاخیر = 100..500 میلی ثانیه یک گزینه کاملاً کارآمد است
ویندوز
مهم نیست که چقدر خندهدار به نظر میرسد، این که گوگل یک کلاینت واضح برای این پلتفرم را در گوگل بیاهمیت میکند. به طوری که CLI از تاخیر، TCP - و بدون کمان پشتیبانی می کند.
به عنوان یک گزینه می توانید سعی کنید
لینـوکــس
همه چیز در اینجا ساده است:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
از MacOS
ساده ترین راه نصب پورت از homebrew است:
brew install knock
و فایل های دسته ای لازم را برای دستوراتی مانند:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
IOS
یک گزینه کار KnockOnD (رایگان، از فروشگاه) است.
آندروید
"در پورت ها ضربه بزنید" تبلیغات نیست، اما فقط کار می کند. و توسعه دهندگان کاملاً پاسخگو هستند.
PS علامت گذاری به هابره، البته خدا رحمتش کنه روزی...
UPD1: با تشکر از
UPD2: یکی دیگه
منبع: www.habr.com