저는 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
(기본적으로 동일):
- https://firewalld.org/documentation/man-pages/firewalld.rich언어.html
- https://www.computernetworkingnotes.com/rhce-study-guide/firewalld-rich-rules-explained-with-examples.html
- https://www.liquidweb.com/kb/an-introduction-to-firewalld/
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