Anonim

Đó là năm 2017 và việc sử dụng VPN đã trở thành không có trí tuệ. Giữa vô số mối lo ngại về quyền riêng tư bên ngoài và ISP của chính bạn có thể bán lịch sử duyệt web của bạn, thực sự không có lý do gì để không sử dụng nó.

Chắc chắn, bạn có thể trả một trong hàng trăm dịch vụ VPN ngoài kia, nhưng một lần nữa, bạn đang dựa vào người khác với dữ liệu của mình. Trên thực tế, hầu hết đều tuyệt vời, nhưng nếu bạn muốn kiểm soát hoàn toàn, bạn có thể xây dựng VPN của riêng mình trên một công cụ xóa bỏ đối thủ V (VPS) hoặc thuê máy chủ riêng của mình, nếu bạn cảm thấy thực sự khó tính với nó.

Tất cả những gì bạn cần để xây dựng VPN là phần mềm OpenVPN và Linux (hoặc BSD) nguồn mở. Cấu hình có thể được tham gia, nhưng không phải ai cũng có thể có các kỹ năng Linux cơ bản để thực hiện phân phối như Ubuntu.

Đối với hướng dẫn này, bạn sẽ cần một VPS chạy Ubuntu. Bạn có thể nhận một thứ rất dễ dàng từ một người nào đó như DigitalOcean hoặc Linode . Thực hiện theo các hướng dẫn bảo mật cơ bản của họ để thiết lập. Đảm bảo rằng bạn không mắc các lỗi cơ bản như cho phép truy cập root qua SSH.

Ngoài ra, hãy nhớ rằng bạn sẽ thực hiện toàn bộ thiết lập này trong dòng lệnh qua SSH tới VPS của bạn. Không có bất cứ điều gì đòi hỏi một lượng lớn kiến ​​thức về Linux, nhưng hãy chuẩn bị để gõ thay vì nhấp.

Có được những gì bạn cần

đường dẫn nhanh

  • Có được những gì bạn cần
  • Thiết lập tường lửa
    • Tìm giao diện
    • Khái niệm cơ bản về Iptables
    • Thiết lập quy tắc của bạn
      • Vòng lặp
      • Bình
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • TUN
      • Ghi nhật ký
      • Từ chối mọi thứ khác
      • NAT Masquerading
    • Chuyển tiếp lưu lượng IPv4
    • Dừng tất cả các kết nối IPv6
    • Nhập và lưu vào Iptables

Các gói Ubuntu và phân phối OpenVPN trong kho của nó. Bạn chỉ cần sử dụng apt để cài đặt nó. Bạn cũng sẽ cần công cụ để tạo khóa mã hóa. Cài đặt cả hai.

$ sudo apt cài đặt openvpn easy-rsa

Thiết lập tường lửa

Tiếp theo, bạn cần phải chăm sóc tường lửa. Đây là một phần quan trọng trong việc giữ VPN của bạn an toàn và ngăn chặn cả rò rỉ dữ liệu và truy cập không mong muốn.

Iptables là tường lửa chính cho Linux và đây là tùy chọn tốt nhất của bạn để kiểm soát quyền truy cập vào các cổng của Ubuntu. Bạn đã cài đặt nó, vì vậy bạn có thể bắt đầu thiết lập các quy tắc tường lửa của mình.

Tìm giao diện

Trước khi bạn bắt đầu viết quy tắc vào iptables, hãy tìm hiểu giao diện nào mà máy chủ của bạn được kết nối với Internet. Chạy ifconfig để hiển thị giao diện mạng của bạn. Địa chỉ có addr inet: khớp với địa chỉ IP mà bạn đã kết nối là giao diện phù hợp.

Khái niệm cơ bản về Iptables

Thông thường không nên sao chép và dán ngẫu nhiên mọi thứ vào thiết bị đầu cuối từ Internet. Điều này đặc biệt đúng khi bạn đang xử lý các chủ đề bảo mật. Vì vậy, hãy dành chút thời gian ở đây để tìm hiểu một chút về các quy tắc iptables trước khi bạn bắt đầu nhập chúng.

Hãy xem ví dụ này về quy tắc iptables.

-A INPUT -i eth0 -p tcp -m trạng thái Tập hợp thành lập Tập đoàn 443 -j CHẤP NHẬN

Được rồi, vậy -A có nghĩa là bạn sẽ nối thêm một quy tắc mới. Sau đó INPUT có nghĩa là nó sẽ liên quan đến đầu vào máy chủ của bạn. Ngoài ra còn có một ĐẦU RA. Cờ -i cho iptables biết quy tắc này dành cho giao diện nào. Bạn có thể chỉ định giao thức nào là quy tắc cho -p. Quy tắc này xử lý tcp. -m chỉ định một điều kiện mà một kết nối phải đáp ứng. Trong trường hợp này, nó phải phù hợp với trạng thái được chỉ định. Tất nhiên, sau đó, Netherstate chỉ định một trạng thái, trong trường hợp này là kết nối THÀNH LẬP. Phần tiếp theo cho iptables biết quy tắc này dành cho cổng nào. Đó là cổng 443, cổng HTTPS, ở đây. Cờ cuối cùng là -j. Nó là viết tắt của nhảy jump, và nó nói cho iptables phải làm gì với kết nối. Nếu kết nối này đáp ứng tất cả các yêu cầu trong quy tắc, iptables sẽ CHẤP NHẬN nó.

Thiết lập quy tắc của bạn

Vì vậy, bạn nên có một ý tưởng chung về cách các quy tắc iptables hoạt động ngay bây giờ. Phần còn lại của phần này sẽ cho bạn biết cách thiết lập quy tắc của bạn từng mảnh.

Cách tốt nhất để tạo một tập hợp các quy tắc iptables là tạo một tệp chứa tất cả chúng. Sau đó, bạn có thể nhập tất cả vào iptables cùng một lúc. Đặt quy tắc từng cái một có thể gây nhầm lẫn, đặc biệt nếu bạn đang bắt đầu một bộ quy tắc mới từ đầu.

Tạo một tệp trong thư mục / tmp để xây dựng quy tắc của bạn.

$ vim / tmp / ipv4

Bắt đầu tập tin đó với bộ lọc *. Điều này cho iptables biết rằng những gì sau đây sẽ là quy tắc cho việc lọc gói.

Vòng lặp

Phần đầu tiên của quy tắc khóa giao diện loopback. Họ nói với iptables rằng máy chủ nên chấp nhận lưu lượng truy cập từ chính nó trên giao diện loopback. Nó cũng nên từ chối lưu lượng truy cập đến từ chính nó mà không đến từ loopback.

-A INPUT -i lo -j CHẤP NHẬN -A VÀO! -i lo -s 127.0.0.0/8 -j DỰ ÁN -A ĐẦU RA -o lo -j CHẤP NHẬN

Bình

Tiếp theo, cho phép ping. Bạn sẽ có thể ping máy chủ của mình để đảm bảo rằng nó trực tuyến trong trường hợp không thể truy cập được. Trong trường hợp này, chỉ cho phép các yêu cầu tiếng vang và máy chủ sẽ cho phép chính nó gửi đầu ra ICMP.

-A INPUT -p icmp -m state --state MỚI --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m state --state THÀNH LẬP, LIÊN QUAN -j CHẤP NHẬN -A RA NGOÀI -p icmp -j CHẤP NHẬN

SSH

Bạn cần SSH. Đó là cách duy nhất mà bạn có thể truy cập máy chủ của mình. Các quy tắc SSH dành riêng cho giao diện internet của bạn, vì vậy hãy đảm bảo bạn thay thế eth0 cho bất kỳ giao diện nào mà máy chủ của bạn thực sự đang sử dụng.

Nó cũng có thể là một ý tưởng tốt để thay đổi kết nối SSH của bạn khỏi cổng 22, vì đó là mặc định mà những kẻ tấn công tiềm năng sẽ thử. Nếu bạn làm như vậy, hãy đảm bảo thay đổi nó trong quy tắc iptables của bạn.

-A INPUT -i eth0 -p tcp -m state --state MỚI, THÀNH LẬP --dport 22 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m state --state ESTABOUNDED --sport 22 -j CHẤP NHẬN

OpenVPN

Phần tiếp theo này cho phép lưu lượng đến và từ máy chủ OpenVPN qua UDP.

-A INPUT -i eth0 -p udp -m state --state MỚI, THÀNH LẬP --dport 1194 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state --state ESTABOUNDED --sport 1194 -j ACCEPT

DNS

Bây giờ, cho phép kết nối DNS qua UDP và TCP. Bạn muốn VPN của bạn xử lý DNS, không phải ISP của bạn. Đó là một phần lý do bạn thiết lập VPN ở nơi đầu tiên.

-A INPUT -i eth0 -p udp -m state --state ESTABOUNDED --sport 53 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state --state MỚI, ESTABOUNDED --dport 53 -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state ESTABOUNDED --sport 53 -j ACCEPT -A OUTPUT -o eth0 -p tcp -m state --state MỚI, ESTABOUNDED --dport 53 -j ACCEPT

HTTP / S

Để Ubuntu có thể tự cập nhật, bạn cần thêm một bộ quy tắc để cho phép kết nối HTTP và HTTPS đi. Lưu ý rằng các quy tắc này chỉ cho phép máy chủ khởi tạo các kết nối HTTP, do đó bạn không thể sử dụng nó làm máy chủ web hoặc kết nối với nó qua cổng 80 hoặc cổng 443

-A INPUT -i eth0 -p tcp -m state --state ESTABOUNDED --sport 80 -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state ESTABOUNDED --sport 443 -j ACCEPT -A OUTPUT o eth0 -p tcp -m state --state MỚI, THÀNH LẬP --dport 80 -j CHẤP NHẬN -A OUTPUT -o eth0 -p tcp -m state --state MỚI, THÀNH LẬP --dport 443 -j CHẤP NHẬN

NTP

Để giữ cho đồng hồ máy chủ của bạn chạy đúng, bạn sẽ cần NTP. NTP cho phép máy chủ của bạn đồng bộ hóa với máy chủ thời gian trên toàn thế giới. Có một đồng hồ không chính xác trên máy chủ của bạn có thể gây ra sự cố kết nối, vì vậy chạy NTP là một ý tưởng tốt. Một lần nữa, bạn chỉ nên chấp nhận các kết nối gửi đi và đã được thiết lập.

-A INPUT -i eth0 -p udp -m state --state ESTABOUNDED --sport 123 -j ACCEPT -A OUTPUT -o eth0 -p udp -m state --state MỚI, ESTABOUNDED --dport 123 -j ACCEPT

TUN

Bỏ chặn giao diện TUN mà OpenVPN sử dụng để lưu lượng truy cập đường hầm.

-A INPUT -i tun0 -j CHẤP NHẬN -A FORWARD -i tun0 -j CHẤP NHẬN -A ĐẦU RA -o tun0 -j CHẤP NHẬN

Bạn cần cho phép TUN chuyển tiếp lưu lượng truy cập đến giao diện thông thường của bạn cho VPN. Bạn sẽ tìm thấy địa chỉ IP đó trong cấu hình OpenVPN. Nếu bạn thay đổi nó trong cấu hình, hãy thay đổi nó trong quy tắc của bạn.

-A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j CHẤP NHẬN -A FORWARD -m state --state THÀNH LẬP, LIÊN QUAN -j CHẤP NHẬN

Ghi nhật ký

Đó là một ý tưởng tốt để giữ nhật ký của tất cả mọi thứ bị từ chối bởi iptables. Trong trường hợp này, nó có nghĩa là bất cứ điều gì không phù hợp với bất kỳ quy tắc nào. Nhật ký cho phép bạn xem nếu có bất kỳ hoạt động độc hại hoặc bất kỳ nỗ lực để làm bất cứ điều gì bất chính đối với máy chủ của bạn.

-A INPUT -m giới hạn trong giới hạn 3 / phút -j Đăng nhập tiền tố-tiền tố Hồi iptables_INPUT_denied: Cấp tínhloglog cấp 4
-A FORWARD -m giới hạn ănimlimit 3 / phút -j ĐĂNG NHẬP-tiền tố Nhập iptables_FORWARD_denied: phạm lỗi cấp 4
-A OUTPUT -m giới hạn ănlimlimit 3 / phút -j ĐĂNG NHẬP-tiền tố Nhập iptables_OUTPUT_denied: Cấp tínhloglog cấp 4

Từ chối mọi thứ khác

Cuối cùng, bạn cần chặn mọi thứ không phù hợp với quy tắc của mình. Đó thực sự là mục đích của việc có tường lửa ở nơi đầu tiên.

-A INPUT -j DỰ ÁN -A DỰ ÁN -j DỰ ÁN -A ĐẦU RA -j DỰ ÁN

Đóng tệp với CAMIT để báo cho iptables thực hiện tất cả các quy tắc.

NAT Masquerading

Bạn cần các kết nối từ VPN để trông giống như chúng đến từ chính máy chủ. Phần này không thể được bao gồm trong tệp iptables thông thường vì nó sử dụng một bảng khác. Mặc dù vậy, đó chỉ là một dòng.

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Chuyển tiếp lưu lượng IPv4

Bạn sẽ cần phải bật chuyển tiếp lưu lượng IPv4, để nó có thể vượt qua giữa VPN và giao diện mạng thực tế của máy chủ của bạn. Mở /etc/sysctl.d/99-sysctl.conf bằng sudo.

Tìm dòng bên dưới và bỏ ghi chú bằng cách xóa #.

net.ipv4.ip_forward = 1

Dừng tất cả các kết nối IPv6

Xin lỗi, bạn chưa hoàn thành với iptables. Bạn cần chặn tất cả lưu lượng IPv6. Máy chủ OpenVPN này sẽ chỉ hỗ trợ IPv4, điều này rất tốt, vì bạn sẽ không gặp phải tình huống cần IPv6. Kết quả là, bất kỳ kết nối IPv6 nào cũng có khả năng rò rỉ thông tin, điều này trái ngược với những gì bạn muốn khi sử dụng VPN.

Trước khi đặt quy tắc cho iptables, bạn phải tắt IPv6 ở mọi nơi khác trên hệ thống.

Thêm các dòng sau vào /etc/sysctl.d/99-sysctl.conf. Nếu bạn đóng nó từ phần trước, mở lại bằng sudo.

net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1

Kích hoạt các thay đổi của bạn.

$ sudo sysctl -p

Nhận xét tất cả các dòng IPv6 trong / etc / hosts. Bạn cũng sẽ cần sudo ở đây.

# :: 1 ip6-localhost ip6-loopback # fe00 :: 0 ip6-localnet # ff00 :: 0 ip6-mcastprefix # ff02 :: 1 ip6-allnodes # ff02 :: 2 ip6-allrouters

Cuối cùng, bạn có thể viết các quy tắc iptables IPv6. Tạo một tệp cho họ tại / tmp / ipv6.

* bộ lọc -A INPUT -j DỰ ÁN -A DỰ ÁN -j DỰ ÁN -A ĐẦU RA -j CAM KẾT DỰ ÁN

Hãy xem, chúng đơn giản. Từ chối mọi thứ.

Nhập và lưu vào Iptables

Bạn cần nhập các quy tắc đó để họ làm bất cứ điều gì. Vì vậy, bây giờ là thời gian để làm điều đó.

Bắt đầu bằng cách dọn sạch mọi thứ khác ở đó. Bạn không muốn bất kỳ quy tắc cũ nào cản trở.

$ sudo iptables -F && sudo iptables -X

Nhập cả quy tắc IPv4 và IPv6 của bạn.

$ sudo iptables-restore </ tmp / ipv4 $ sudo ip6tables-restore </ tmp / ipv6

Bạn có thể không bao giờ muốn làm điều đó một lần nữa. Vì vậy, bạn sẽ cần một gói mới để lưu quy tắc của bạn vĩnh viễn.

$ sudo apt cài đặt iptables-kiên trì

Trong quá trình cài đặt, gói sẽ yêu cầu bạn lưu các quy tắc hiện có của bạn. Trả lời có."

Nếu bạn thực hiện thay đổi sau này, bạn cũng có thể cập nhật các cấu hình đã lưu.

$ sudo dịch vụ netfilter-lưu liên tục

Phải mất một lúc, nhưng tường lửa của bạn đã sẵn sàng để đi. Trên trang tiếp theo, chúng tôi sẽ giải quyết việc tạo các khóa mã hóa cần thiết.

Bấm vào đây: Trang tiếp theo

Tất cả về vpns: cách thiết lập vpn của riêng bạn với openvpn (phần 3)