Anonim

2017 년에 VPN을 사용하는 것은 쉬운 일이 아닙니다. 외부 개인 정보 보호 문제와 인터넷 사용 기록을 판매 할 수있는 ISP 사이에 하나의 인터넷 사용 기록을 사용하지 않는 것이 정당화되지 않습니다.

물론, 수백 개의 VPN 서비스 중 하나를 지불 할 수 있지만 다시 한 번 데이터에 다른 사람을 의지하고 있습니다. 실제로는 대부분 훌륭하지만 완전한 제어를 원할 경우 가상 사설 서버 (VPS)에 자체 VPN을 구축하거나 자신의 개인 서버를 대여 할 수 있습니다.

VPN을 구축하기 위해 필요한 것은 오픈 소스 OpenVPN 소프트웨어 및 Linux (또는 BSD)입니다. 구성이 포함될 수 있지만 기본 Linux 기술을 가진 사람도 우분투와 같은 배포판을 사용하는 것은 불가능하지 않습니다.

이 안내서에는 Ubuntu를 실행하는 VPS가 필요합니다. DigitalOcean 또는 Linode 와 같은 누군가에게서 매우 쉽게 선택할 수 있습니다. 기본 보안 안내서에 따라 설정하십시오. SSH를 통한 루트 액세스 허용과 같은 기본적인 실수를하지 않도록하십시오.

또한이 작업은 SSH를 통해 VPS에 대한 명령 줄에서이 전체 설정을 수행하게됩니다. 리눅스 지식에는 엄청난 양이 필요하지 않지만 클릭하는 대신 타이핑을 준비하십시오.

필요한 것을 얻기

빠른 링크

  • 필요한 것을 얻기
  • 방화벽 설정
    • 인터페이스 찾기
    • iptables 기본 사항
    • 규칙 설정
      • 루프백
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • 큰 술통
      • 벌채 반출
      • 그 밖의 모든 것을 거절하십시오
      • NAT 가장 무도회
    • IPv4 트래픽 전달
    • 모든 IPv6 연결 중지
    • IP 테이블 가져 오기 및 저장

우분투는 저장소에 OpenVPN을 패키징하고 배포합니다. 설치하려면 apt 만 사용하면됩니다. 암호화 키를 생성하는 도구도 필요합니다. 둘 다 설치하십시오.

$ sudo apt 설치 openvpn easy-rsa

방화벽 설정

다음으로 방화벽을 관리해야합니다. VPN 보안을 유지하고 데이터 유출과 원치 않는 액세스를 방지하는 데 중요한 부분입니다.

IPtables는 Linux의 기본 방화벽이며 Ubuntu의 포트에 대한 액세스를 제어하기위한 최상의 옵션입니다. 이미 설치되어 있으므로 방화벽 규칙 설정을 시작할 수 있습니다.

인터페이스 찾기

iptables에 규칙을 쓰기 전에 서버가 인터넷에 연결된 인터페이스를 찾으십시오. ifconfig를 실행하여 네트워크 인터페이스를 표시하십시오. inet addr가있는 것 : 연결된 IP 주소와 일치하는 것이 올바른 인터페이스입니다.

iptables 기본 사항

일반적으로 인터넷에서 항목을 임의로 복사하여 터미널에 붙여 넣는 것은 좋지 않습니다. 보안 주제를 다룰 때 특히 그렇습니다. 따라서 iptables 규칙을 입력하기 전에 약간의 시간이 걸릴 수 있습니다.

iptables 규칙의이 예제를 살펴보십시오.

-A 입력 -i eth0 -p tcp -m 상태 – 상태 설정 – 스포츠 443 -j 수락

알겠습니다. -A는 새로운 규칙을 추가한다는 의미입니다. 그런 다음 INPUT은 서버 입력과 관련이 있음을 의미합니다. OUTPUT도 있습니다. -i 플래그는 iptables에게이 규칙의 인터페이스를 알려줍니다. -p를 사용하여 규칙의 프로토콜을 지정할 수 있습니다. 이 규칙은 tcp를 처리합니다. -m은 연결이 충족되어야하는 조건을 지정합니다. 이 경우 지정된 상태와 일치해야합니다. 물론 –state는 상태 (이 경우 ESTABLISHED 연결)를 지정합니다. 다음 부분은 iptables에게이 규칙이 어떤 포트인지 알려줍니다. 여기는 HTTPS 포트 인 포트 443입니다. 마지막 플래그는 -j입니다. "점프"를 나타내며 iptables에 연결로 수행 할 작업을 알려줍니다. 이 연결이 규칙의 모든 요구 사항을 충족하면 iptables가이를 수락합니다.

규칙 설정

이제 iptables 규칙이 어떻게 작동하는지 일반적인 아이디어가 있어야합니다. 이 섹션의 나머지 부분에서는 규칙을 하나씩 설정하는 방법에 대해 설명합니다.

iptables 규칙 세트를 작성하는 가장 좋은 방법은 모든 규칙을 포함하는 파일을 작성하는 것입니다. 그런 다음 한 번에 iptables로 모두 가져올 수 있습니다. 규칙을 하나씩 설정하면 특히 새 규칙 집합을 처음부터 시작하는 경우 혼동 될 수 있습니다.

/ tmp 디렉토리에 파일을 작성하여 규칙을 빌드하십시오.

$ vim / tmp / ipv4

* filter로 해당 파일을 시작하십시오. 이것은 iptables에게 다음이 패킷 필터링 규칙이 될 것임을 알려줍니다.

루프백

규칙의 첫 번째 섹션은 루프백 인터페이스를 잠급니다. 그들은 서버가 루프백 인터페이스에서 트래픽을 받아 들여야한다고 iptables에 알려줍니다. 또한 루프백에서 발생하지 않은 트래픽 자체를 거부해야합니다.

-A 입력 -i lo -j 수락 -A 입력! -i lo -s 127.0.0.0/8 -j 거부 -A 출력 -o lo -j ACCEPT

다음으로 핑을 허용하십시오. 다른 방법으로 연결할 수없는 경우 서버가 온라인 상태인지 확인하기 위해 서버를 ping 할 수 있어야합니다. 이 경우 에코 요청 만 허용되며 서버는 자체적으로 ICMP 출력을 보낼 수 있습니다.

-A 입력 -p icmp -m 상태-상태 NEW --icmp-type 8 -j ACCEPT -A 입력 -p icmp -m 상태-상태 설정, 관련 -j ACCEPT -A 출력 -p icmp -j ACCEPT

SSH

SSH가 필요합니다. 이것이 서버에 접근 할 수있는 유일한 방법입니다. SSH 규칙은 인터넷 인터페이스에 따라 다르므로 서버가 실제로 사용하는 인터페이스를 eth0으로 대체하십시오.

또한 잠재적 인 공격자가 시도하는 기본 설정이므로 포트 22에서 SSH 연결을 변경하는 것이 좋습니다. 그렇게하는 경우 iptables 규칙에서도 변경해야합니다.

-A 입력 -i eth0 -p tcp -m 상태-상태 NEW, ESTABLISHED --dport 22 -j ACCEPT -A 출력 -o eth0 -p tcp -m 상태-상태 설정 --sport 22 -j ACCEPT

OpenVPN

이 다음 부분은 UDP를 통한 OpenVPN 서버와의 트래픽을 허용합니다.

-A 입력 -i eth0 -p udp -m 상태-상태 NEW, ESTABLISHED --dport 1194 -j ACCEPT -A 출력 -o eth0 -p udp -m 상태-상태 ESTABLISHED-스포츠 1194 -j ACCEPT

DNS

이제 UDP 및 TCP를 통한 DNS 연결을 허용하십시오. VPN이 ISP가 아닌 DNS를 처리하기를 원합니다. 이것이 처음에 VPN을 설정하는 이유의 일부입니다.

-A 입력 -i eth0 -p udp -m 상태-상태 설정-스포츠 53 -j 수락 -A 출력 -o eth0 -p udp -m 상태-상태 NEW, ESTABLISHED --dport 53 -j ACCEPT -A 입력 -i eth0 -p tcp -m 상태-상태 설정-스포츠 53 -j ACCEPT -A 출력 -o eth0 -p tcp -m 상태-상태 NEW, ESTABLISHED --dport 53 -j ACCEPT

HTTP / S

Ubuntu가 자체적으로 업데이트하려면 HTTP 및 HTTPS의 발신 연결을 허용하는 규칙 세트를 추가해야합니다. 이 규칙은 서버가 HTTP 연결 만 시작할 수 있도록 허용하므로 웹 서버로 사용하거나 포트 80 또는 포트 443을 통해 연결할 수 없습니다.

-A 입력 -i eth0 -p tcp -m 상태-상태 설정-스포츠 80 -j 수락 -A 입력 -i eth0 -p tcp -m 상태-상태 설정-스포츠 443 -j ACCEPT -A 출력- o eth0 -p tcp -m state --state NEW, ESTABLISHED --dport 80 -j ACCEPT -A 출력 -o eth0 -p tcp -m state --state NEW, ESTABLISHED --dport 443 -j ACCEPT

NTP

서버 시계가 올바르게 작동하려면 NTP가 필요합니다. NTP를 통해 서버는 전 세계의 시간 서버와 동기화 할 수 있습니다. 서버에 잘못된 시계가 있으면 연결 문제가 발생할 수 있으므로 NTP를 실행하는 것이 좋습니다. 다시 한 번, 나가고 이미 설정된 연결 만 수락해야합니다.

-A 입력 -i eth0 -p udp -m 상태-상태 설정-스포츠 123 -j 수락 -A 출력 -o eth0 -p udp -m 상태-상태 NEW, ESTABLISHED --dport 123 -j ACCEPT

큰 술통

OpenVPN이 트래픽을 터널링하는 데 사용하는 TUN 인터페이스의 차단을 해제하십시오.

-A 입력 -i tun0 -j ACCEPT -A FORWARD -i tun0 -j ACCEPT -A 출력 -o tun0 -j ACCEPT

TUN이 트래픽을 VPN의 일반 인터페이스로 전달하도록 허용해야합니다. OpenVPN 구성에서 해당 IP 주소를 찾을 수 있습니다. 구성에서 변경 한 경우 규칙에서도 변경하십시오.

-A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT -A FORWARD -m state --state 설정, 관련 -j ACCEPT

벌채 반출

iptables에 의해 거부되는 모든 것을 기록하는 것이 좋습니다. 이 경우 이러한 규칙에 맞지 않는 것을 의미합니다. 로그를 통해 악의적 인 활동이 있거나 서버에 대해 악의적 인 행동을 시도한 경우를 확인할 수 있습니다.

-A INPUT -m limit –limit 3 / min -j LOG –log-prefix“iptables_INPUT_denied :”–log-level 4
-A FORWARD -m limit –limit 3 / min -j LOG –log-prefix“iptables_FORWARD_denied :”–log-level 4
-A OUTPUT -m limit –limit 3 / min -j LOG –log-prefix“iptables_OUTPUT_denied :”–log-level 4

그 밖의 모든 것을 거절하십시오

마지막으로 규칙에 맞지 않는 것은 차단해야합니다. 이것이 실제로 방화벽을 갖는 목적입니다.

-A 입력 -j 거부 -A 앞으로 -j 거부 -A 출력 -j 거부

COMMIT로 파일을 닫아 iptables가 모든 규칙을 커밋하도록 지시하십시오.

NAT 가장 무도회

서버 자체에서 오는 것처럼 보이려면 VPN 연결이 필요합니다. 이 조각은 다른 테이블을 사용하기 때문에 일반 iptables 파일에 포함될 수 없습니다. 그래도 괜찮습니다. 한 줄에 불과합니다.

$ sudo iptables -t nat-포스트 라우팅 -s 10.8.0.0/24 -o eth0 -j MASQUERADE

IPv4 트래픽 전달

IPv4 트래픽 전달을 활성화해야 VPN과 서버의 실제 네트워크 인터페이스 사이를 통과 할 수 있습니다. sudo로 /etc/sysctl.d/99-sysctl.conf를여십시오.

아래 행을 찾아 #을 제거하여 주석을 해제하십시오.

net.ipv4.ip_forward = 1

모든 IPv6 연결 중지

죄송합니다, 아직 iptables을 (를) 완료하지 않았습니다. 모든 IPv6 트래픽을 차단해야합니다. 이 OpenVPN 서버는 IPv4 만 지원합니다. IPv6이 필요한 상황에 처하지 않기 때문입니다. 결과적으로 모든 IPv6 연결은 잠재적으로 정보를 유출 할 수 있으며 이는 VPN을 사용할 때 원하는 것과 반대입니다.

iptables에 대한 규칙을 설정하기 전에 시스템의 다른 곳에서 IPv6을 비활성화해야합니다.

/etc/sysctl.d/99-sysctl.conf에 다음 줄을 추가하십시오. 이전 섹션에서 닫은 경우 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

변경 사항을 활성화하십시오.

$ sudo sysctl -p

/ etc / hosts에서 모든 IPv6 라인을 주석 처리하십시오. 여기에도 sudo가 필요합니다.

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

마지막으로 IPv6 iptables 규칙을 작성할 수 있습니다. / tmp / ipv6에 파일을 작성하십시오.

* 필터 -A 입력 -j 거부 -A 앞으로 -j 거부 -A 출력 -j 거부 커밋

보세요, 간단합니다. 모든 것을 거부하십시오.

IP 테이블 가져 오기 및 저장

규칙을 수행하려면 해당 규칙을 가져와야합니다. 이제 할 차례입니다.

거기에있는 다른 모든 것을 지우고 시작하십시오. 오래된 규칙이 방해되는 것을 원하지 않습니다.

$ sudo iptables -F && sudo iptables -X

IPv4 및 IPv6 규칙을 모두 가져옵니다.

$ sudo iptables- 복원 </ tmp / ipv4 $ sudo iptables- 복원 </ tmp / ipv6

다시는 그런 일을하고 싶지 않을 것입니다. 따라서 규칙을 영구적으로 저장하려면 새 패키지가 필요합니다.

$ sudo apt 설치 iptables- 지속적

설치하는 동안 패키지는 기존 규칙을 저장하도록 요청합니다. “예”라고 대답하십시오.

나중에 변경하면 저장된 구성도 업데이트 할 수 있습니다.

$ sudo 서비스 netfilter- 영구적 인 저장

시간이 걸렸지 만 방화벽을 사용할 준비가되었습니다. 다음 페이지에서는 필요한 암호화 키 생성을 다루겠습니다.

여기를 클릭하십시오 : 다음 페이지

VPN에 관한 모든 것 : OpenVPN으로 자신의 VPN을 설정하는 방법 (3 부)