Làm thế nào để ngăn chặn giả mạo IP bằng MAC và ebtables?


10

Tôi đang cố gắng tạo quy tắc ghép nối IP-MAC trong ebtables . Có một vài hướng dẫn và câu hỏi liên quan [1] có sẵn nhưng tôi có loại cài đặt cụ thể.

MÔI TRƯỜNG: Tôi có nhiều vật chủ . Mỗi máy chủ lưu trữ có một vài thẻ ethernet, được nối với nhau và được sử dụng làm nô lệ cho cầu nối. Có nhiều máy ảo trên mỗi máy chủ (kvm, qemu, libvirt). Mỗi máy ảo được kết nối với một cây cầu của máy chủ vật lý của nó thông qua cổng mới gọi là vnet [0-9] +. Không có NAT. Mạng hoạt động tốt, tất cả các máy chủ vật lý có thể được ping, tất cả các máy ảo cũng vậy. Mỗi máy ảo có địa chỉ IP và địa chỉ MAC riêng.

VẤN ĐỀ: Bên trong một máy ảo, địa chỉ IP có thể được thay đổi thành một địa chỉ khác.

FOUND SOLUTION: Có giải pháp nổi tiếng trên ebtables trang web [2], nhưng giải pháp này là aplicable khi chỉ có một máy chủ được sử dụng. Nó cho phép tất cả lưu lượng truy cập và nếu có một gói từ IP với MAC khác ngoài mức cho phép, gói sẽ bị hủy. Nếu có nhiều hơn một máy chủ, nó yêu cầu tất cả các cặp IP-MAC hiện tại phải được đăng ký trên tất cả các máy chủ. Cần có giải pháp chính sách đảo ngược.

GIẢI PHÁP CRAFTED: Tôi đã cố gắng sử dụng ebtables theo cách đảo ngược. Đây là một ví dụ những gì tôi đã cố gắng.

VÍ DỤ 1

Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT 
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

VÍ DỤ 2

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

Cốt lõi của những gì tôi muốn là có DROP chính sách mặc định và chỉ cho phép lưu lượng truy cập từ các máy ảo với cặp IP-MAC chính xác được triển khai trên máy chủ nhất định. Tuy nhiên, những giải pháp đó không hoạt động.

CÂU HỎI: Làm thế nào để chỉ cho phép lưu lượng truy cập trên cầu đối với các cặp máy ảo đang chạy IP-MAC được chỉ định và loại bỏ tất cả các cặp IP-MAC không xác định đến từ các cổng vnet [0-9] +?

Cảm ơn bạn rất nhiều cho bất kỳ câu trả lời.


2
Nhưng, nếu ai đó giả mạo mac của họ thì sao?
Zoredache

1
Vâng, đó là một vấn đề quá. Nhưng việc đoán đúng cặp IP-MAC là rất khó và kịp thời vượt quá mức bảo mật của dịch vụ của tôi.
Martin

Câu trả lời:


12

Cuối cùng tôi đã quản lý để tạo ra một giải pháp làm việc.

  1. Giải pháp sử dụng cặp ebtables và IP-MAC.
  2. Bảng chỉ cần là bảng 'bộ lọc' mặc định.
  3. Không cần thêm bất kỳ quy tắc hoặc chính sách nào vào chuỗi INPUT, vì chuỗi INPUT KHÔNG liên quan đến việc chạy các máy ảo. Giải thích về ý nghĩa của các chuỗi INPUT, OUTPUT và FORWARD trong bảng bộ lọc nằm trong trang mantables.
  4. Vì ebtables hoạt động ở cấp độ ethernet và việc ghép nối IP-MAC chỉ có thể áp dụng cho các gói IP, nên cần phải nhấn mạnh rằng trong các quy tắc để không chặn các khung ARP và lưu lượng quan trọng khác.

Vì vậy, trong thời gian đầu, không có quy tắc nào và tất cả các chính sách được thiết lập để CHẤP NHẬN. Không có chuỗi xác định người dùng. Bảng bộ lọc trông như thế này:

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

Một chuỗi mới được thêm vào. Chuỗi này chứa tất cả các cặp IP-MAC được phép. Nó được gọi là VMS.

# ebtables -N VMS

Bây giờ, phần quan trọng. Đối với mọi khung chứa gói IP (hoặc các bộ phận của nó) sẽ chuyển qua cầu nối từ cổng vnet [0-9] +, áp dụng chính sách chuỗi và quy tắc của chuỗi VMS. Nói cách khác, đối với mọi gói IP đến từ bất kỳ máy ảo nào, hãy áp dụng chuỗi VMS.

# ebtables -A FORWARD -p ip -i vnet+ -j VMS

Chính sách mặc định của chuỗi VMS phải là DROP. Bằng cách này, mọi gói IP đến từ bất kỳ máy ảo nào đều được loại bỏ theo mặc định. Sau đó, các ngoại lệ cho phép cặp IP-MAC được thêm vào. Chính sách mặc định DROP gây ra, rằng tất cả lưu lượng truy cập từ bất kỳ máy ảo nào có cặp IP-MAC không xác định bị loại bỏ cùng một lúc, khiến cho việc giả mạo IP là không thể.

# ebtables -P VMS DROP

Bộ lọc bảng trông bây giờ theo cách này. Ngoài ra, nó trông như thế này khi không có máy ảo đang chạy (được phép).

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: ACCEPT
-p IPv4 -i vnet+ -j VMS
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Bridge chain: VMS, entries: 0, policy: DROP

Giả sử, có hai máy đang chạy. Nếu chúng tôi cố gắng ping đến / từ chúng, lưu lượng truy cập sẽ bị giảm và đích không thể truy cập được. Đây là kết quả mong muốn, vì lưu lượng này chưa được cho phép. Chỉ một lệnh là đủ để cho phép mỗi lưu lượng máy ảo.

# ebtables -A VMS -p ip --ip-src 192.168.11.125 -s 54:52:00:cc:35:fa -j ACCEPT
# ebtables -A VMS -p ip --ip-src 192.168.11.122 -s 54:52:00:98:d7:b6 -j ACCEPT

Bây giờ, lưu lượng truy cập từ các máy ảo được phép đang ổn định và việc giả mạo IP bị ngăn chặn.

Giải pháp này có thể không hoàn hảo và nếu bạn có bất kỳ nhận xét hoặc cải tiến nào, tôi sẽ sẵn lòng nghe chú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.