
하나의 wan 인터페이스(ens18)와 여러 개의 LAN 인터페이스 ens19:ens23 & ens1이 있는 라우터로 우분투 서버 22.04(가상화)를 설정하려고 합니다.
내가 달성하려는 것은 다음과 같습니다.
- ens19:ens21의 인터넷 액세스 허용
- ens23의 인터넷 액세스를 허용해 주세요
- ens22의 인터넷 액세스를 허용하지만 주중 근무 시간에만 허용됩니다.
- ens1의 인터넷 액세스를 거부합니다.
- ens1이 ens19에 액세스하는 것을 포함하여 모든 LAN 인터페이스를 허용합니다.
- ens19에 대한 액세스 이외의 LAN 간 액세스를 차단합니다.
내가 직면 한 문제는 다음과 같습니다. 어떤 이유로 기본 전달 규칙을 DROP으로 설정하면 클라이언트 네트워크는 인터넷에 전혀 액세스할 수 없으며 ens19에도 액세스할 수 없습니다. 기본 전달 규칙을 수락하도록 설정해 본 후 모든 네트워크에서 완전한 인터넷 액세스가 가능해졌습니다.
나는 순방향 체인에 일부 규칙이 누락되었거나 잘못된 규칙을 사용하고 있다고 생각합니다. 여기에 건설적인 의견을 보내주시면 감사하겠습니다.
iptables 설정에 사용한 명령은 다음과 같습니다.
#flush existing config
sudo iptables -F
sudo iptables -X
#temporary rules for configuration purposes
sudo iptables -A INPUT -i ens18 -p tcp --dport 22 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 3306 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 33060 -j ACCEPT
sudo iptables -A FORWARD -i ens18 -o ens19 -p tcp --dport 80 -j ACCEPT
##set default policies
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
#allow loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
#allowe established and related incoming traffic
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#Allow access to WAN
sudo iptables -A FORWARD -i ens19 -o ens18 -j ACCEPT
sudo iptables -A FORWARD -i ens20:ens21 -o ens18 -j ACCEPT
sudo iptables -A FORWARD -i ens22 -o ens18 -m time --timestart $(date -u -d @$(date "+%s" -d "07:00") +%H:%M) --timestop $(date -u -d @$(date "+%s" -d "20:00") +%H:%M) --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
sudo iptables -A FORWARD -i ens23 -o ens18 -j ACCEPT
#Allow Access from LAN to DMZ
sudo iptables -A FORWARD -i ens20:ens23 -o ens19 -j ACCEPT
sudo iptables -A FORWARD -i ens1 -o ens19 -j ACCEPT
#deny access to WAN from the lan connected to ens1
sudo iptables -A FORWARD -i ens1 -o ens18 -j DROP
#deny communication between interfaces ens20:ens23, ens1
sudo iptables -A FORWARD -i ens20 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens20 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens20 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens21 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens22 -o ens23 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens23 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens20 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens21 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens22 -j DROP
sudo iptables -A FORWARD -i ens1 -o ens23 -j DROP
#enable masquerading on port ens18
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
##save and reload
sudo netfilter-persistent save
sudo netfilter-persistent reload
iptables -nvL의 출력은 다음과 같습니다.
henrik@server0router:~$ sudo iptables -nvL
Chain INPUT (policy DROP 3 packets, 939 bytes)
pkts bytes target prot opt in out source destination
104 7488 ACCEPT tcp -- ens18 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
Chain FORWARD (policy DROP 58 packets, 4640 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- ens18 ens19 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
0 0 ACCEPT tcp -- ens18 ens19 0.0.0.0/0 0.0.0.0/0 tcp dpt:33060
0 0 ACCEPT tcp -- ens18 ens19 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- ens19 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens20:ens21 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens22 ens18 0.0.0.0/0 0.0.0.0/0 TIME from 05:00:00 to 18:00:00 on Mon,Tue,Wed,Thu,Fri UTC
0 0 ACCEPT all -- ens23 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens20:ens23 ens19 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- ens1 ens19 0.0.0.0/0 0.0.0.0/0
6 450 DROP all -- ens1 ens18 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens20 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens20 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens20 ens23 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens21 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens21 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens21 ens23 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens22 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens22 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens22 ens23 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens23 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens23 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens23 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens20 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens21 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens22 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- ens1 ens23 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 3 packets, 984 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
54 5744 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate ESTABLISHED
henrik@server0router:~$ ^C
답변1
좋아요, 해결책을 찾은 것 같아요.
명확히 하기 위해 내 설정은 Proxmox VE에서 Qemu/KVM으로 실행되는 두 개의 우분투 서버와 다른 네트워크 클라이언트를 에뮬레이트하기 위한 몇 개의 데스크톱 VM입니다.
이러한 시스템은 proxmox에 설정된 네트워크 브리지를 사용하여 각 클라이언트와 "server1"을 "server0router"에 연결합니다. 여기서 문제는 네트워크 인터페이스가 proxmox의 VM에 추가되면 하이퍼바이저의 방화벽 기능이 기본적으로 활성화되어 웹 인터페이스에서 VM에 대한 방화벽 규칙을 생성할 수 있다는 것입니다.
proxmox의 server0router vm에 대한 네트워크 인터페이스에서 "방화벽" 확인란을 선택 취소하면 모든 것이 VM 내부에 설정된 규칙에 지정된 대로 작동하는 것 같습니다.
편집: 또한 ens20:ens23을 사용하는 대신 포트당 개별 규칙으로 전환해야 했습니다. 명령 입력 시 오류가 발생하지 않았음에도 범위가 작동하지 않는 것 같았기 때문입니다.