Hãy hình dung một hộp media trên đường truyền tại nhà chỉ được ra internet qua một đường hầm. Khi đường hầm sập, ứng dụng nên dừng lại thay vì lặng lẽ tiếp tục qua giao diện vật lý. Có được hành vi đó là vấn đề tường lửa chứ không phải định tuyến, và sự khác biệt này quan trọng vì tuyến đường có thể bị thay bằng cách khởi động lại daemon, trong khi bộ lọc vẫn nằm đúng chỗ bạn đặt. Phần sau nói về cách đường đi của gói thực sự quyết định, rồi cách giới hạn các ngoại lệ giúp đường hầm kết nối lại.

Đầu ra cục bộ là móc khác với chuyển tiếp

Gói rời khỏi một ứng dụng trên máy đi qua móc đầu ra; gói mà máy định tuyến cho một máy chủ khác đi qua chuyển tiếp. Một chính sách chỉ nhắc tới forward sẽ hạn chế cái thứ hai và để cái thứ nhất mở toang, đó là lý do nhiều khóa lối ra trông đúng mà không làm gì. Việc khớp giao diện cũng thuộc cùng quy tắc: oifname "tun0" accept cho lưu lượng đã được định tuyến ra qua đường hầm đi qua. Định tuyến và lọc cũng vẫn là hai quyết định riêng, nên một tuyến lên trên có thể tồn tại trong khi bộ lọc từ chối gói. Bạn đang dựa vào chính sự tách biệt đó.

Một cổng chuyển tiếp cho thiết bị khác cần cả hai móc. Chỉ khóa đầu ra sẽ bảo vệ bản thân máy và để mọi máy khách phía dưới tự do rò rỉ.

Viết danh sách ngoại lệ từ điểm cuối ra ngoài

Bắt đầu từ điểm cuối của đường hầm: một địa chỉ đích hoặc một tập nhỏ đã được phê duyệt, giao thức vận chuyển và cổng đích, ví dụ udp dport 1194 ip daddr 203.0.113.7 accept. Nếu máy khách phân giải tên máy chủ, trao đổi DNS khởi tạo cần quy tắc riêng giới hạn ở bộ phân giải và cổng 53, không phải một giấy phép chung cho địa chỉ của bộ phân giải đó. Mỗi ngoại lệ nên nêu lý do tồn tại của nó. Một giấy phép cho toàn bộ lưu lượng UDP tới cổng VPN bao trùm nhiều hơn hẳn dịch vụ đã xác thực duy nhất mà bạn nghĩ tới.

Phân giải khởi tạo là nơi các khóa thường mục ruỗng. Một tập địa chỉ được làm mới theo hẹn giờ cần hành vi xác định khi việc làm mới thất bại, và hành vi đó không thể là mở đường truyền cho tới khi thành công. Hãy làm mới qua đường hầm khi đường hầm còn sống, nếu không thì quay về điểm cuối lành mạnh đã biết gần nhất.

Quản trị cục bộ cần cách xử lý tương tự. Một mạng con quản trị không đáng tin chỉ vì địa chỉ của nó là riêng tư, và một quy tắc tin vào nó sẽ mời một đường thứ hai vòng qua khóa.

Khớp giao diện không chứng minh đường hầm khỏe mạnh

Các quy tắc chấp nhận mọi thứ rời khỏi tun0 giả định rằng gói trên giao diện đó đến từ đường hầm. Tên giao diện được tạo lại, và một cái tên không phải danh tính mật mã. Đối tác cũng có thể đã biến mất trong khi giao diện vẫn ở trạng thái hoạt động, điều này biến quy tắc thành một sự không hành động rất thuyết phục.

Theo dõi kết nối thêm một cái bẫy liên quan. Một quy tắc rộng cho các kết nối đã thiết lập phát lại quyền mà một luồng đã có trước đó, nên một phiên bắt đầu trước khi đường hầm sập vẫn tiếp tục sau đó. Hãy giới hạn việc chấp nhận theo trạng thái ở đúng những giao diện và địa chỉ bạn thực sự muốn, nếu không bạn đã dựng một cái khóa tự mở. Quy tắc vào và ra cũng trả lời những câu hỏi khác nhau, và làm chắc cái này trong khi bỏ qua cái kia sẽ để máy vẫn tới được theo hướng bạn chưa tính tới.

Điều gì sống sót qua cú sập của daemon

Bộ lọc do một script chạy sau khi đường hầm lên cài đặt sẽ biến mất cùng đường hầm, đúng vào lúc nó cần thiết nhất. Hãy nạp khóa khi khởi động và để daemon chỉ quản lý các ngoại lệ của nó.

Xóa tuyến mặc định cũng không phải giải pháp thay thế. Tuyến là trạng thái mà daemon sở hữu và ghi lại, và xóa nó có thể lấy mất đường cần thiết để kết nối lại. IPv6 cần kế hoạch riêng, vì khám phá lân cận và thông báo router là những dịch vụ liên kết phải tiếp tục chạy trong khi lưu lượng thông thường bị chặn. DHCP cũng thuộc cùng nhóm. Hãy ghi những điều này như các ngoại lệ có mục đích, thay vì phát hiện muộn hơn dưới dạng sự cố.

Đường khôi phục trước khi triển khai

Hãy kiểm tra cái khóa theo cách nó sẽ hỏng: khởi động không có đường hầm, giết daemon, đổi điểm cuối và kết nối lại. Mỗi trường hợp nên khiến ứng dụng dừng lại và để kênh khôi phục hoạt động. Làm việc đó từ console, vì shell từ xa là phiên dễ bị chính quy tắc của bạn khóa ra ngoài nhất.

Sau đó kiểm tra xem một ứng dụng thông thường còn tới được đâu, bằng một đích vô hại và một yêu cầu bạn có thể kiểm chứng. Kết quả bạn muốn là bị từ chối trên đường truyền và thành công qua đường hầm, không phải một thời gian chờ mơ hồ có thể mang cả hai nghĩa. Hãy giữ bộ quy tắc dưới cùng chủ sở hữu với phần còn lại của tường lửa, thay vì thay toàn bộ bảng từ một script shell. Một chính sách mà mọi giấy phép đều tự biện minh được đáng giá hơn một bộ quy tắc dài mà không ai giải thích nổi.

Bài viết liên quan