사용자를 특정 네트워크 인터페이스로만 제한할 수 있습니까?

사용자를 특정 네트워크 인터페이스로만 제한할 수 있습니까?

저는 CentOS 8 서버를 실행하고 있으며 VPN을 통해서만 인터넷에 액세스할 수 있는 사용자를 생성하고 싶습니다. 즉, 이 사용자가 사용하는 모든 애플리케이션은 VPN을 통해서만 인터넷에 액세스할 수 있습니다. 나머지 사용자는 "일반" 네트워크에만 액세스할 수 있습니다. VPN 터널은 인터페이스 tun0을 사용합니다.

편집하다:

저를 따라와 같은 일을 하려는 분들을 위해 제가 한 일은 다음과 같습니다.VPN 분할 터널링과 함께 DNS를 사용할 때 문제가 발생합니다. 센트OS 8

답변1

통과하다 iptables:

iptables -A OUTPUT -o VPN_INTERFACE -m owner --uid-owner USERNAME -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner USERNAME -j DROP # or REJECT

노트:

  • -I대신 사용할 수 있지만 -A두 명령은 역순으로 실행해야 합니다( -I인수를 사용하지 않으면 규칙이 첫 번째로 삽입되기 때문입니다).
  • (기본 출력 정책 - 아무것도 허용하지 않음)을 사용하는 경우 iptables -P OUTPUT DROP첫 번째 규칙만 필요합니다.

통과하다 firewalld:

풍부한 규칙을 통해 또는/및 /etc/firewalld/direct.xml(기본적으로 동일):


DNS를 잊지 마세요. 도메인 이름을 확인하기 위해 VPN 이외의 인터페이스를 사용하는 경우 사용자는 웹 사이트에 액세스할 수 없습니다.

답변2

주석에서 언급한 대로 다른 네트워크 카드가 있으므로 nic에 -o 및 --uid-owner를 사용하여 iptables를 사용할 수 있습니다.

VPN 네트워크 카드에 대한 Outound 승인:

iptables -A OUTPUT -o <vpn-nic> -m owner --uid-owner {<username>} -j ACCEPT

다른 네트워크 카드의 아웃바운드 삭제:

iptables -A INPUT  -m owner --uid-owner {<username>} -j REJECT

영구적으로 설정:

sudo iptables-save /etc/sysconfig/iptables
sudo chkconfig iptables on

관련 정보