iptables: SSH 및 VPN 트래픽만 허용하는 방법은 무엇입니까?

iptables: SSH 및 VPN 트래픽만 허용하는 방법은 무엇입니까?

Ubuntu 14.10이 설치된 전용 서버가 있습니다.

서버는 OpenVPN 서버에 연결되어야 하며 트래픽은 VPN을 통해서만 이동해야 합니다(SSH 트래픽 제외).

내 생각은 이것을 달성하는 것이지만 iptables전문가는 아닙니다.

이를 처리하려면 정확히 무엇을 사용해야 합니까 iptables?

기본 조건은 다음과 같다고 가정합니다.

  1. VPN을 통한 트래픽만 허용됩니다. 내 서버가 VPN에 대한 연결이 끊어지면 트래픽 누출이 없어야 합니다.

  2. VPN 없이 SSH를 사용할 수 있습니다. SSH와 서버 공급자의 일반 IP를 사용하여 내 서버에 연결하고 싶습니다(단, SSH 트래픽에만 해당).

  3. 저는 VPN의 유일한 사용자가 아니기 때문에 다른 컴퓨터에서 VPN의 서버를 숨기고 싶습니다.

규칙을 만들기 시작했지만 iptables규칙이 항상 모든 연결을 차단합니다.

# flush old rules
iptables -F

# accept SSH traffic with non vpn connection
iptables -A INPUT -d X.X.X.X -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -s X.X.X.X -p tcp --sport 22 -j ACCEPT 

# block everything except my rules
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# allow loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# allow vpn
iptables -A INPUT  -j ACCEPT -p udp -s Y.Y.Y.Y --sport 1194
iptables -A OUTPUT -j ACCEPT -p udp -d Y.Y.Y.Y --dport 1194

XXXX는 공급자가 제공한 서버 IP입니다.
YYYY는 VPN 서버의 IP입니다.

이러한 규칙으로 인해 항상 현재 SSH 연결이 중단되고, 포트 22를 통해 트래픽을 허용해야 함에도 불구하고 새 SSH 연결을 생성할 수 없습니다.

답변1

-d 옵션을 기억하세요. 모든 어댑터에 적용하려면 이 옵션을 사용하지 마세요. iptables -A INPUT -p tcp --dport 22 -j ACCEPT

답변2

편집하다:

VPN을 통한 트래픽만 허용됩니다. 내 서버가 VPN에 대한 연결이 끊어지면 트래픽 누출이 없어야 합니다.

이는 VPN 애플리케이션과 관련이 있습니다. 예를 들어 PIA(Private Internet Access)에서는 이를 킬 스위치라고 부르며 앱에서 활성화하기만 하면 됩니다.

VPN 없이 SSH를 사용할 수 있습니다. SSH와 서버 공급자의 일반 IP를 사용하여 내 서버에 연결하고 싶습니다(단, SSH 트래픽에만 해당).

글쎄, 이것은 위의 킬 스위치와 모순됩니다.

VPN 사용자로서 저는 로컬 IP(예: 192.168.0.xxx)에 연결하지 않고 공개 주소에 연결하고 22를 사용하는 대신 내 서버에 특정 포트를 활성화하여 이 문제를 해결했습니다. 왜냐하면 집에 서버가 몇 대 있기 때문입니다. 그래서 당신도 그것을 고려하고 싶을 수도 있습니다. 이는 또한 포트를 라우터에서 서버로 리디렉션하고 iptables이 포트에 대한 규칙을 만들어야 함을 의미합니다.

저는 VPN의 유일한 사용자가 아니기 때문에 다른 컴퓨터에서 VPN의 서버를 숨기고 싶습니다.

samba귀하의 환경을 설명하지 않으셨기 때문에 제가 드릴 수 있는 말은 일부 서비스 등을 비활성화하겠다는 것뿐입니다 .


원래 답변:

~에 따르면매뉴얼 페이지:

--sport is short for --source-port  
--dport is short for --destination-port

귀하의 경우에는 유일한 --dport옵션을 사용해야 한다고 생각합니다.

답변3

단순히 VPN을 통해 데이터를 제공하는 것 이상으로 유출이 걱정된다면, 가장 안전한 방법은 별도의 컴퓨터를 사용하는 것입니다. openvpn 및 ssh를 실행하는 머신은 인터넷에 직접 연결된 유일한 머신이어야 합니다. 다른 모든 사람은 개인 주소를 사용해야 하며 해당 주소를 통해 프록시 또는 게이트웨이를 사용해야 합니다.

그렇게 하면 DNS 등을 잘못 구성하면 잘못된 네트워크를 통과하는 대신 실패하게 됩니다. 물리적 머신이 필요하지 않은 경우 가상 머신을 사용하여 이를 달성할 수 있습니다. 그러나 가상 머신은 더 많은 공격 표면을 갖고 있습니다. 해킹된 가상 머신은 버그를 악용하여 네트워크의 다른 머신보다 더 쉽게 호스트에 도달할 수 있습니다.

답변4

여기에는 몇 가지 문제가 있습니다.

첫째, 더 많은 것을 허용해야 합니다.

  • VPN을 통한 트래픽. 이는 특정 명명된 장치 또는 명명된 장치 클래스가 됩니다. VPN이 시작되면 ip link또는 출력에 표시 되어야 합니다 ifconfig. 그렇지 않으면 "루프백 허용" 항목처럼 보입니다.
  • 관련 데이터 패킷. 이렇게 하면 연결에서 ICMP 메시지를 보낼 수 있습니다.

첫 번째 규칙에서는 설정된 연결을 허용하는 것이 좋습니다. 이렇게 하면 테스트 속도가 빨라집니다. 위의 두 번째 요점과 결합하면 다음과 같습니다.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

또한 기존 SSH 연결이 닫히는 것을 방지할 수 있다는 장점도 있습니다.

테스트할 때 제대로 작동하는 것처럼 보일 때까지는 정책 규칙을 설정하지 마십시오. 또한 허용되지 않는 콘텐츠를 기록하려면 LOG 규칙을 추가하세요.

iptables -A INPUT -j LOG
iptables -A OUTPUT -j LOG

dmesg 및 시스템 로그를 통해 콘솔에서 이 출력을 볼 수 있습니다. 모든 것이 작동하면 이러한 규칙은 더 이상 필요하지 않습니다. (그러나 그들은 당신이 받은 공격의 수를 알려줄 수 있습니다.)

아무것도 기록하지 않고 새로운 SSH 연결을 설정할 수 있게 되면 이제 정책 규칙을 설정할 차례입니다.


당신이 해야 할 또 다른 일은 신중한 라우팅 작업입니다. VPN이 전체 인터넷에 연결되는 경우 SSH 및 VPN 데이터 예외가 까다로울 수 있습니다(불가능하지는 않음). VPN 소프트웨어가 이를 기록하거나 처리해야 합니다.

관련 정보