Ho un PC dietro un router con la configurazione del port forwarding Porta 22 per SSH che funziona perfettamente - posso accedere e tutto. Quello che sto cercando di fare è consentire a questo PC di connettersi a una VPN e consentire solo il traffico sulla rete locale o tramite la connessione VPN (per l'accesso a Internet). Anche questo funziona alla grande. Non appena la connessione VPN viene interrotta, il PC non ha alcuna connessione a Internet. Ora lo sto facendo con IPTABLES, il problema è che non riesco a far funzionare SSH in entrata da fonti esterne tramite il port forwarding del router. Sono in grado di eseguire SSH sul PC dall'interno della rete locale.
Ecco cosa ho provato:
# Allow traffic to VPN SERVER
sudo iptables -A INPUT -s $REMOTE_IP -j ACCEPT
# Allow ssh traffic
iptables -A INPUT -i eth1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
# Allow local traffic.
sudo iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
sudo iptables -A INPUT -s 172.16.0.0/12 -j ACCEPT
sudo iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
# Disallow everything else.
sudo iptables -A INPUT ! -i tun+ -j DROP
# Allow traffic from VPN SERVER.
sudo iptables -A OUTPUT -d $REMOTE_IP -j ACCEPT
# Allow local traffic.
sudo iptables -A OUTPUT -d 10.0.0.0/8 -j ACCEPT
sudo iptables -A OUTPUT -d 172.16.0.0/12 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT
# Disallow everything else.
sudo iptables -A OUTPUT ! -o tun+ -j DROP
sudo openvpn --config client.cfg --auth-user-pass client.cred --daemon
Ecco il mio iptables -vL -n output: (Sostituito il server VPN con XX.XX.XX.XX)
Chain INPUT (policy ACCEPT 25674 packets, 4792K bytes)
pkts bytes target prot opt in out source destination
78848 11M ACCEPT all -- * * XXX.XXX.XXX.XXX 0.0.0.0/0
3176 318K ACCEPT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW,ESTABLISHED
0 0 ACCEPT all -- * * 10.0.0.0/8 0.0.0.0/0
0 0 ACCEPT all -- * * 172.16.0.0/12 0.0.0.0/0
2517 231K ACCEPT all -- * * 192.168.0.0/16 0.0.0.0/0
35 12374 DROP all -- !tun+ * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 32187 packets, 4374K bytes)
pkts bytes target prot opt in out source destination
3681 2443K ACCEPT tcp -- * eth1 0.0.0.0/0 0.0.0.0/0 tcp spt:22 state ESTABLISHED
70697 10M ACCEPT all -- * * 0.0.0.0/0 XXX.XXX.XXX.XXX
0 0 ACCEPT all -- * * 0.0.0.0/0 10.0.0.0/8
0 0 ACCEPT all -- * * 0.0.0.0/0 172.16.0.0/12
27 5787 ACCEPT all -- * * 0.0.0.0/0 192.168.0.0/16
2265 150K DROP all -- * !tun+ 0.0.0.0/0 0.0.0.0/0
E sì, se faccio un ifconfig ho solo un eth1 e non un eth0, quindi non è quello.
Ecco anche l'output di netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 XX.XXX.242.128 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
XX.XXX.193.107 192.168.1.1 255.255.255.255 UGH 0 0 0 eth1
XX.XXX.242.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
128.0.0.0 XX.XXX.242.128 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
iptables -vL
, vedi qualche conteggio dei pacchetti per le regole 4, 5, 6 e 9, 10, 11? Chiunque dal tuo server VPN ha pieno accesso al tuo host. Puoi mostrare unroute -n
onetstat -rn
?