Viết -o tun+ có vẻ là một chỉ dẫn chính xác và thực ra là một ký tự đại diện khớp với mọi đường hầm mà nhân có. Một máy khách VPN thứ hai, một cầu nối container hay một giao diện do phiên bị treo để lại đều thỏa mãn nó, và máy chủ sau đó cho phép lưu lượng mà chính sách định ngăn chặn. Quy trình dưới đây ghim một tên thiết bị, sắp xếp các ngoại lệ để đường hầm thực sự có thể hình thành và để lại cho bạn một đường quay về nếu các quy tắc rơi vào thế xấu. Mỗi bước đủ ngắn để tự hoàn tác.

Bước 1: ghi lại các quy tắc bạn đang có

Trước khi đổi chính sách mặc định, hãy lưu trạng thái hiện tại để việc hoàn tác là một lệnh chứ không phải một ký ức. iptables-save > /root/iptables.pre ghi mọi bảng vào một tệp mà bạn có thể khôi phục, và một cửa sổ dòng lệnh thứ hai với phiên root đang mở không phải là hoang tưởng khi chính sách bạn sắp đặt cắt đứt kết nối đang mang nó. Nếu bạn làm việc từ xa, hãy cũng lên lịch một flush như công tắc khẩn cấp.

Sau đó liệt kê các giao diện, vì một cái tên bạn phỏng đoán là cái tên bạn lẽ ra phải đọc: ip -br link cho thấy hiện có gì, và đường hầm sẽ không xuất hiện cho đến khi nó được dựng lên. Ghi lại tên thiết bị trong khi bạn đọc.

Bước 2: cho đường hầm một cái tên riêng

OpenVPN chấp nhận dev tun_work trong cấu hình máy khách, và Linux sau đó tạo một giao diện đúng với tên đó thay vì cấp phát tun0. Tên vẫn ổn định qua các lần kết nối lại miễn là không có gì khác đòi nó, và đó là điều làm cho một quy tắc nêu tên thiết bị trở nên có ý nghĩa.

Ở nơi không thể kiểm soát tên, hãy khớp theo địa chỉ đường hầm hoặc dấu gói tin. Cả hai đều hoạt động, cả hai đều khó đọc hơn và cả hai đều thất bại âm thầm hơn khi đường hầm đánh số lại. Dù thế nào, hãy chỉ khớp một thứ và nói rõ là thứ nào.

Bước 3: viết chính sách với ngoại lệ endpoint đặt trước

Một máy chủ chỉ dùng VPN là máy chủ từ chối mặc định với danh sách ngoại lệ ngắn, và ngoại lệ quan trọng nhất là ngoại lệ cho phép đường hầm tồn tại. Hãy dựng nó theo thứ tự này, với quy tắc endpoint trước quy tắc thiết bị đường hầm, để bắt tay có nơi để đi:

# allow the tunnel to be built, then everything the tunnel carries
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 198.51.100.7 -p udp --dport 1194 -j ACCEPT
iptables -A OUTPUT -o tun_work -j ACCEPT
iptables -A INPUT  -i tun_work -j ACCEPT
iptables -A INPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Địa chỉ và cổng nguyên văn của endpoint thuộc về nhà cung cấp của bạn, không phải trang này. Nếu endpoint là tên máy chủ, hãy phân giải một lần và ghim kết quả, vì quy tắc không thể tra tên và một câu trả lời xoay vòng sẽ âm thầm phá chính sách sau lần đổi DNS tiếp theo. Kiểm tra cả cổng, vì các nhà cung cấp chuyển bạn sang TCP 443 nếu không sẽ cần một quy tắc mà không ai ghi lại. Một đường hầm chỉ chạy trên một giao thức thường chính là thiếu sót này chứ không phải lỗi tường lửa.

Trên router hình dạng tương tự đi vào chuỗi FORWARD cho các máy khách phía sau, và lưu lượng của chính router cần các quy tắc riêng. Một bộ quy tắc chỉ bao phủ các gói được chuyển tiếp để SSH và DNS ở đường cũ, và đó là cách router trở nên không thể truy cập ngay khi đường hầm đi lên.

Bước 4: kiểm tra thứ tự, không chỉ sự hiện diện

Các quy tắc được đánh giá theo thứ tự, vì vậy một ACCEPT đến sớm hơn chỉ đơn giản che mất REJECT mà bạn thêm vào sau đó. Việc khớp established và related là thứ cho phép các câu trả lời cho yêu cầu đi ra của chính bạn quay về mà không mở một đường vào chung, và đặt nó sau khi chấp nhận đường hầm nghĩa là một đường hầm bị sập vẫn cho lưu lượng quay về đi qua trên giao diện của nó.

Giữ số quy tắc đủ nhỏ để đọc trên một màn hình. Một bộ quy tắc bạn không thể kiểm toán là bộ mà bạn sẽ vá bằng cách thêm ngoại lệ lên đầu, và đó là cách các chính sách từ chối mặc định dần dần có được một rìa cho phép mặc định. Đếm các ACCEPT trước và sau khi thay đổi.

Bước 5: làm cho nó sống sót qua quá trình khởi động và họ địa chỉ

Các quy tắc nhập bằng tay biến mất khi khởi động lại, vì vậy hãy nạp chúng từ dịch vụ tường lửa của bản phân phối hoặc từ một unit chạy sau khi giao diện đường hầm tồn tại. Tham chiếu tun_work trong một tập lệnh chạy trước khi OpenVPN khởi động là cách phổ biến để tạo ra một vòng khởi động với lưu lượng bị bỏ.

Sau đó kiểm tra IPv6 riêng, vì một chính sách từ chối mặc định tốt cho IPv4 không nói gì về họ còn lại. ip -6 route sẽ cho bạn biết máy chủ có tuyến đường nào có thể mang lưu lượng vòng qua một đường hầm chỉ xử lý IPv4 hay không, và ip6tables hoặc nftables cần các quy tắc tương đương của riêng nó. Hãy thử với đích IPv6-only thay vì tin vào tính đối xứng của bộ quy tắc.

Bước 6: xác minh và sẵn sàng khôi phục

Dựng đường hầm lên, xác nhận dịch vụ bạn định dùng hoạt động, rồi thử một thứ mà chính sách phải từ chối. Khôi phục bằng iptables-restore < /root/iptables.pre nếu câu trả lời làm bạn bất ngờ, và chỉ khi đó mới bắt đầu sửa quy tắc. Sự bền bỉ cùng một đường khôi phục đã kiểm chứng là thứ biến đây thành một thay đổi bạn có thể làm hai lần.

Bài viết liên quan