Mẹo & thủ thuật Linux: máy chủ, hãy mở ra

Dành cho những người cần cung cấp cho bản thân và những người thân yêu quyền truy cập vào máy chủ của họ từ mọi nơi trên thế giới thông qua SSH/RDP/khác, một RTFM/spur nhỏ.

Chúng ta cần làm việc mà không cần VPN cũng như các tiện ích khác, từ bất kỳ thiết bị nào trong tầm tay.

Và để bạn không phải tập luyện quá nhiều với máy chủ.

Tất cả những gì bạn cần cho việc này là tiếng gõ, duỗi thẳng tay và tập 5 phút.

Tất nhiên là “Mọi thứ đều có trên Internet” (ngay cả trên Habré), nhưng khi nói đến việc triển khai cụ thể, đây là lúc nó bắt đầu...

Chúng ta sẽ thực hành sử dụng Fedora/CentOS làm ví dụ, nhưng điều đó không thành vấn đề.

Thúc đẩy phù hợp cho cả người mới bắt đầu và chuyên gia trong vấn đề này, vì vậy sẽ có những bình luận nhưng sẽ ngắn hơn.

1. Máy chủ

  • cài đặt máy chủ gõ:
    yum/dnf install knock-server

  • định cấu hình nó (ví dụ trên 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

    Phần “mở” được cài đặt tự động đóng sau 1 giờ. Bạn không bao giờ biết...

  • /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
    ...

  • phía trước:

    service iptables restart
    service knockd start

  • bạn có thể thêm RDP vào Máy chủ Windows ảo quay bên trong (/etc/knockd.conf; thay thế tên giao diện cho phù hợp với sở thích của bạn):

    [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

    Chúng tôi theo dõi tất cả các lần khởi động của chúng tôi từ máy khách trên máy chủ bằng lệnh iptables -S.

2. Hướng dẫn cào

knockd.conf:

Mana cũng chứa đựng tất cả mọi thứ (nhưng điều này không chính xác), nhưng knockd là một người bạn khá keo kiệt với tin nhắn nên bạn cần phải hết sức cẩn thận.

  • phiên bản
    Trong kho Fedora/CentOS, mức gõ mới nhất cho ngày hôm nay là 0.63. Ai muốn UDP - hãy tìm gói 0.70.
  • giao diện
    Trong cấu hình Fedora/CentOS mặc định, dòng này Không. Thêm bằng tay của bạn, nếu không nó sẽ không hoạt động.
  • thời gian chờ
    Tại đây bạn có thể lựa chọn theo sở thích của mình. Điều cần thiết là khách hàng phải có đủ thời gian cho tất cả các lần khởi động - và bot quét cổng sẽ bị hỏng (và 146% sẽ quét).
  • bắt đầu/dừng/lệnh.
    Nếu có một lệnh thì lệnh, nếu có hai lệnh thì start_command+stop_command.
    Nếu bạn mắc lỗi, knockd sẽ im lặng nhưng không hoạt động.
  • do đó
    Về mặt lý thuyết, UDP có thể được sử dụng. Trong thực tế, tôi đã trộn lẫn tcp và udp, và khách hàng từ bãi biển ở Bali chỉ có thể mở cổng lần thứ năm. Bởi vì TCP đến khi cần thiết nhưng UDP không phải là sự thật. Nhưng đây lại là vấn đề về hương vị.
  • trình tự
    Cái cào ngầm là các chuỗi không được giao nhau... nói thế nào nhỉ...

Ví dụ, điều này:

open: 11111,22222,33333
close: 22222,11111,33333

Bằng cú đá 11111 mở sẽ đợi cú đá tiếp theo vào lúc 22222. Tuy nhiên, sau cú đá này (22222) nó sẽ bắt đầu hoạt động gần và mọi thứ sẽ tan vỡ. Điều này còn phụ thuộc vào độ trễ của khách hàng. Những điều như vậy ©.

iptables

Nếu trong /etc/sysconfig/iptables thì đây là:

*nat
:PREROUTING ACCEPT [0:0]

Nó không thực sự làm phiền chúng tôi, vì vậy đây là:

*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Nó can thiệp.

Vì knockd thêm các quy tắc vào cuối chuỗi INPUT nên chúng ta sẽ bị từ chối.

Và việc tắt chức năng từ chối này đồng nghĩa với việc mở xe đón mọi luồng gió.

Để không bị lạc trong iptables, nên chèn cái gì trước cái gì (như thế này nhân dân gợi ý) hãy làm cho nó đơn giản hơn:

  • mặc định trên CentOS/Fedora 1 quy tắc (“những gì không bị cấm thì được phép”) sẽ được thay thế bằng quy tắc ngược lại,
  • và chúng tôi loại bỏ quy tắc cuối cùng.

Kết quả sẽ là:

*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited

Tất nhiên, bạn có thể TỪ CHỐI thay vì THẢ, nhưng với DROP, cuộc sống của bot sẽ vui hơn.

3. Khách hàng

Nơi này là thú vị nhất (theo quan điểm của tôi), vì bạn cần phải làm việc không chỉ từ bất kỳ bãi biển nào mà còn từ bất kỳ thiết bị nào.

Về nguyên tắc, một số khách hàng được liệt kê trên website dự án này, nhưng đây là từ cùng một loạt bài “mọi thứ đều có trên Internet”. Vì vậy, tôi sẽ liệt kê những gì đang hoạt động trong tầm tay của tôi ở đây và bây giờ.

Khi chọn máy khách, bạn cần đảm bảo rằng nó hỗ trợ tùy chọn độ trễ giữa các gói. Có, có sự khác biệt giữa các bãi biển và 100 megabit không bao giờ đảm bảo rằng các gói sẽ đến đúng thứ tự vào đúng thời điểm từ một vị trí nhất định.

Và đúng vậy, khi thiết lập ứng dụng khách, bạn cần phải tự mình chọn độ trễ. Quá nhiều thời gian chờ - bot sẽ tấn công, quá ít - khách hàng sẽ không có thời gian. Quá nhiều sự chậm trễ - khách hàng sẽ không đến kịp hoặc sẽ xảy ra xung đột giữa những kẻ ngốc (xem "cào"), quá ít - các gói sẽ bị thất lạc trên Internet.

Với thời gian chờ = 5 giây, độ trễ = 100..500ms là một tùy chọn hoàn toàn hoạt động

Windows

Cho dù nghe có vẻ buồn cười đến thế nào thì việc Google trở thành một ứng dụng khách rõ ràng cho nền tảng này là điều không hề tầm thường. Sao cho CLI hỗ trợ độ trễ, TCP - và không có cung.

Ngoài ra, bạn có thể thử đây là. Rõ ràng Google của tôi không phải là một chiếc bánh.

Linux

Thật đơn giản ở đây:

dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333

Dành cho MacOS

Cách dễ nhất là cài đặt cổng từ homebrew:
brew install knock
và vẽ các tệp bó cần thiết cho các lệnh như:

#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333

iOS

Một tùy chọn hoạt động là KnockOnD (miễn phí, từ cửa hàng).

Android

"Gõ vào cổng" Không phải quảng cáo, nhưng nó chỉ hoạt động. Và các nhà phát triển khá nhanh nhạy.

Tất nhiên, giảm giá PS cho Habré, Chúa phù hộ cho anh ấy một ngày nào đó...

CẬP NHẬT1: nhờ vào đến một người tốt thành lập khách hàng đang làm việc dưới Windows.
CẬP NHẬT2: Một cái khác người đàn ông tốt nhắc nhở tôi rằng việc đặt các quy tắc mới ở cuối iptables không phải lúc nào cũng hữu ích. Nhưng nó phụ thuộc.

Nguồn: www.habr.com

Thêm một lời nhận xét