Cách cung cấp độ trễ đăng nhập trong ssh


11

Tôi muốn cung cấp độ trễ đăng nhập trong khi đăng nhập thông qua ssh. Tôi đã thử một vài cách làm tương tự nhưng không thể tìm thấy kết quả mong muốn.

Tôi đã thử các bước được cung cấp bởi liên kết nhất định.

http://hostingfu.com/article/ssh-dipedia-attack-prevent-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

Tôi không cài đặt mô-đun pam trên máy của mình, vì vậy không thể thực hiện bất kỳ sửa đổi nào liên quan đến các tệp pam

Vì vậy, bất kỳ cơ thể cho tôi đề nghị một số cách khác để làm như vậy?

Tôi có kernel linux linux chạy trên nền tảng nhúng.


Tại sao bạn muốn giới thiệu một sự chậm trễ? Mục tiêu cuối cùng của bạn là gì?
một CVn

Tôi muốn ngăn chặn khả năng tấn công của vũ phu.
Ram

3
Đơn giản chỉ cần đưa ra một sự chậm trễ trên các kết nối mới sẽ không ngăn được một cuộc tấn công vũ phu. Bạn cần xem xét các công cụ được thiết kế để giải quyết vấn đề thực tế của bạn. Tôi khuyên bạn nên bắt đầu bằng cách xem fail2ban được thiết kế đặc biệt để phản ứng với các mục nhật ký lặp đi lặp lại bằng cách thực hiện các lệnh đã cho và thường được sử dụng đặc biệt để ngăn chặn các nỗ lực vũ phu nhằm truy cập trái phép.
một CVn

Điều đó tốt với Michael nhưng tôi phải làm điều đó với cơ sở hạ tầng hiện có mà tôi có, Làm thế nào tôi có thể giới thiệu độ trễ mỗi khi tôi kết nối qua ssh.
Ram

2
Anh bạn, fail2bansử dụng cơ sở hạ tầng chính xác mà bạn đã có - nhật ký ssh và quy tắc iptables.
Shadur 17/12/13

Câu trả lời:


11

Phương pháp # 1 - vô hiệu hóa đăng nhập mật khẩu

Nếu bạn không yêu cầu cho phép đăng nhập mật khẩu, thì chỉ cần không cho phép họ sẽ mang lại cho bạn hiệu quả mong muốn. Chỉ cần thêm dòng này vào /etc/ssh/sshd_config:

PasswordAuthentication     no

Ngoài ra, bạn có thể giới hạn sử dụng mật khẩu cho một số người dùng bằng cách sử dụng Matchtoán tử trong sshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

Phương pháp # 2 - iptables

Bạn cũng có thể sử dụng iptablesđể theo dõi các lần đăng nhập thất bại và thả chúng sau một ngưỡng nhất định. Điều này tương tự với ví dụ của bạn từ hostingfu nhưng dễ hiểu hơn.

$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

GHI CHÚ: Về cơ bản, dòng đầu tiên tạo ra một quy tắc chỉ áp dụng cho các gói được sử dụng cho các lần thử kết nối mới trên cổng ssh. Dòng thứ hai nói rằng nếu có hơn 4 lần thử từ một IP trong vòng 60 giây, thì bất kỳ lưu lượng truy cập nào từ IP đó sẽ được phủ đen. Giải pháp này không quan tâm đến việc có hay không các nỗ lực trên các tài khoản người dùng khác nhau.

Phương pháp # 3 - sử dụng PAM

Tôi nhận ra rằng bạn nói rằng bạn không có sẵn PAM, nhưng nếu bạn đã làm vậy, đây là cách bạn có thể trì hoãn các lần đăng nhập thất bại. Nếu ý định của bạn chỉ đơn giản là trì hoãn thất bại đăng nhập ssh thì bạn có thể sử dụng mô-đun PAM pam_faildelay. Mô-đun PAM này thường được bao gồm với hỗn hợp mặc định.

Trên hệ thống Fedora 19 của tôi, nó là một phần của cài đặt mặc định.

Thí dụ

Tìm kiếm các tập tin liên quan đến pam_faildelay.

$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz

Xem những gì RPM họ được cung cấp bởi:

$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686

Sử dụng

Để tạo độ trễ khi thất bại, bạn chỉ cần thêm một dòng như thế này vào sshdtệp cấu hình pam của mình . Một lần nữa trên các hệ thống Fedora / CentOS / RHEL, tập tin này được đặt ở đây:/etc/pam.d/sshd .

Để tạo độ trễ 10 giây:

       auth  optional  pam_faildelay.so  delay=10000000

Độ trễ 60 giây:

       auth  optional  pam_faildelay.so  delay=60000000

Thí dụ

Với độ trễ 20 giây bằng phương pháp trên, tôi đã thay đổi sshdtệp cấu hình PAM của mình như sau:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth       optional     pam_faildelay.so  delay=20000000
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin

Bây giờ khi tôi đăng nhập:

$ date
Tue Dec 17 09:16:30 EST 2013

$ ssh blah@localhost
blah@localhost's password: 
Permission denied, please try again.
blah@localhost's password: 

...Control + C....

$ date
Tue Dec 17 09:16:50 EST 2013

Người giới thiệu


Cảm ơn @slm nhưng một lần nữa tôi không thể cài đặt mô-đun pam và xác thực sshd của tôi không phải từ pam. Bạn có muốn đề xuất một số cách khác không
Ram

@AmitSinghTomar - xin lỗi tôi đã mở rộng câu trả lời của mình. Tôi đã cố gắng tạo ra một câu trả lời chính tắc cho câu hỏi của bạn bao gồm tất cả các phương pháp, không chỉ riêng bạn.
slm

Cảm ơn bạn một lần nữa @slm vì câu trả lời chi tiết của bạn, tôi rất thích làm theo phương pháp thứ hai mà bạn đề xuất. Bạn sẽ thử và cho bạn biết kết quả, Ngoài ra, nó còn cho tôi một sự chậm trễ với lần thử đăng nhập đầu tiên thông qua ssh?
Ram

@AmitSinghTomar - không nên chỉ trì hoãn sau 4 lần thử. Khi --hitcount 4vượt quá quy tắc sẽ lỗ đen địa chỉ IP vi phạm trong 60 giây.
slm

Một điểm tôi muốn biết từ bạn, để phương thức thứ 3 của bạn hoạt động (PAM), nó có yêu cầu xác thực ssh nên xảy ra thông qua pam không?
Ram

3

Vô hiệu hóa mật khẩu. Không có mật khẩu, không có cuộc tấn công vũ phu.

Bạn có thể sử dụng khóa ssh để đăng nhập - cách này an toàn hơn và khó hack hơn.


0

Trên bản cài đặt sạch Ubuntu 16.04 với openssh-server, đã có độ trễ cho việc thử mật khẩu sai lớn hơn 0 ký tự. Độ trễ dường như là hơn 1 giây .

Đối với một lần thử sai mật khẩu không có ký tự, không có độ trễ, vì vậy kẻ tấn công sẽ xác định ngay rằng mật khẩu của bạn không phải là chuỗi trống nếu thực sự đó không phải là chuỗi trống. Vì chuỗi rỗng có thể không được phép làm mật khẩu nên họ đã biết điều đó nên họ sẽ không thử chuỗi trống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.