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?
/etc/ssh/sshd_config
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?
/etc/ssh/sshd_config
Câu trả lời:
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).
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 DROP
quy 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.
iptables
chỉ á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
.
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/24 và localhost .
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
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 Address
kết thúc tập tin. Đặt Match
và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 Match
dò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 .
#ListenAddress ::
trong đó /etc/ssh/sshd_config
sẽ 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 eth0
là 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.4
ListenAddress 192.168.3.4
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 AllowUsers
tùy chọn trong sshd_config
tệp:
AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
Điều này cho phép johndoe và admin2 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_keys
tệ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.