Giới hạn quyền truy cập SSH vào các máy khách cụ thể theo địa chỉ IP


22

Làm cách nào để chúng tôi cho phép một số IP riêng tư nhập thông qua đăng nhập SSH (cặp khóa RSA) vào Máy chủ Linux?


3
Các quy tắc tường lửa là một quá trình hành động bình thường cần thực hiện
Raman sailopal

2
tường lửa hoặc /etc/hosts.allow nếu ssh biên dịch các hàm bao w / TCP hoặc quy tắc tệp / etc / ssh / sshd_config.
Rui F Ribeiro

nhiều hơn một cách để làm, hãy tham khảo linux.die.net/man/5/sshd_config giải thích mọi thứ trong/etc/ssh/sshd_config
ron

Câu trả lời:


42

Bạn có thể giới hạn máy chủ nào có thể kết nối bằng cách định cấu hình trình bao bọc TCP  hoặc lọc lưu lượng truy cập mạng (tường lửa) bằng iptables . Nếu bạn muốn sử dụng các phương thức xác thực khác nhau tùy thuộc vào địa chỉ IP của máy khách, hãy định cấu hình SSH daemon thay thế (tùy chọn 3).

Tùy chọn 1: Lọc bằng IPTABLES

Quy tắc Iptables được đánh giá theo thứ tự, cho đến khi khớp đầu tiên.

Ví dụ: để cho phép lưu lượng truy cập từ mạng 192.168.0.0/24 và nếu không thì giảm lưu lượng (đến cổng 22). Các DROPquy tắc không cần thiết nếu chính sách mặc định iptables của bạn được cấu hình để DROP.

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Bạn có thể thêm nhiều quy tắc trước quy tắc thả để phù hợp với nhiều mạng / máy chủ hơn. Nếu bạn có nhiều mạng hoặc địa chỉ máy chủ, bạn nên sử dụng mô-đun ipset . Ngoài ra còn có mô-đun iprange cho phép sử dụng bất kỳ phạm vi địa chỉ IP tùy ý.

Iptables không liên tục trên các lần khởi động lại. Bạn cần cấu hình một số cơ chế để khôi phục iptables khi khởi động.

iptableschỉ áp dụng cho lưu lượng IPv4. Các hệ thống có ssh nghe địa chỉ IPv6, cấu hình cần thiết có thể được thực hiện với ip6tables.

Tùy chọn 2: Sử dụng trình bao bọc TCP

Bạn cũng có thể định cấu hình máy chủ nào có thể kết nối bằng trình bao bọc TCP. Với các trình bao bọc TCP, ngoài các địa chỉ IP, bạn cũng có thể sử dụng tên máy chủ trong các quy tắc.

Theo mặc định, từ chối tất cả các máy chủ.

/etc/hosts.deny:

sshd : ALL

Sau đó, liệt kê các máy chủ được phép trong hosts.allow. Ví dụ: cho phép mạng 192.168.0.0/24localhost .

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

Tùy chọn 3: Cấu hình SSH daemon

Bạn có thể định cấu hình ssh daemon trong sshd_config để sử dụng phương thức xác thực khác nhau tùy thuộc vào địa chỉ máy khách / tên máy chủ. Nếu bạn chỉ muốn chặn các máy chủ khác kết nối, bạn nên sử dụng trình bao bọc iptables hoặc TCP thay thế.

Đầu tiên xóa phương thức xác thực mặc định:

PasswordAuthentication no
PubkeyAuthentication no

Sau đó thêm các phương thức xác thực mong muốn sau khi Match Addresskết thúc tập tin. Đặt Matchvào cuối tập tin là rất quan trọng, vì tất cả các dòng cấu hình sau khi nó được đặt bên trong khối điều kiện cho đến Matchdòng tiếp theo . Ví dụ:

Match Address 127.0.0.*
    PubkeyAuthentication yes

Các máy khách khác vẫn có thể kết nối, nhưng đăng nhập sẽ thất bại vì không có phương thức xác thực có sẵn.

Đối số phù hợp và các tùy chọn cấu hình có điều kiện được phép được ghi lại trong trang man sshd_config . Các mẫu trùng khớp được ghi lại trong trang man ssh_config .


Còn việc thêm một lệnh ListenAddress trong / etc / ssh / sshd_config thì sao?
jerome

Có thể trong các tình huống cụ thể (ví dụ: nghe địa chỉ mạng riêng), tùy thuộc vào cấu hình mạng của bạn và máy chủ nào bạn muốn cho phép.
sebasth

2
Ngoài ra, sshd_config có thể đặt các bộ lọc với chỉ thị AlowUsers và ngoài ra, ủy quyền có thể được đặt với 'từ IP hoặc mạng con "để lọc.
tonioc

@tonioc Giải pháp tuyệt vời cho trường hợp sử dụng của tôi. Vui lòng mở rộng đề xuất này thành một câu trả lời.
simlev

nếu bạn có một NIC với 4 cổng, mỗi cổng sẽ chuyển sang một mạng khác nhau, thì mặc định #ListenAddress ::trong đó /etc/ssh/sshd_configsẽ báo cho máy chủ SSH chấp nhận gửi đến từ bất kỳ mạng nào trong số đó. Nếu không thì làm ListenAddress <ip address>ở đâu <ip address>là các cổng NIC mà bạn muốn cho phép. Do đó, kết quả của tôi eth0là SSH chỉ hoạt động trên mạng 192.168.3.4 trên eth0; và eth1 eth2 eth3 bị từ chối. 192.168.3.4ListenAddress 192.168.3.4
ron

5

Dưới đây là một số cấu hình bổ sung cho SSH daemon để mở rộng câu trả lời trước:

  • Thêm lọc người dùng với AllowUserstùy chọn trong sshd_configtệp:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    Điều này cho phép johndoeadmin2 chỉ từ các 192.168.1.*địa chỉ và otherid1 , otherid2 từ bất cứ đâu.

  • Hạn chế khóa ssh hoặc khóa dựa trên ca đối với một tập hợp các địa chỉ trong .ssh/authorized_keystệp của thư mục chính của người dùng cụ thể:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    Trong ví dụ này, khóa chung cho useralias sẽ chỉ có hiệu lực từ các địa chỉ nhất định.

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.