mirror of
https://github.com/pi-hole/pi-hole.git
synced 2025-04-28 20:14:24 +02:00
Created OpenVPN server: Firewall configuration (using iptables) (markdown)
parent
ef07f59ef8
commit
a7c4b14381
1 changed files with 100 additions and 0 deletions
100
OpenVPN-server:-Firewall-configuration-(using-iptables).md
Normal file
100
OpenVPN-server:-Firewall-configuration-(using-iptables).md
Normal file
|
@ -0,0 +1,100 @@
|
|||
### Optional: Firewall configuration (using iptables)
|
||||
If your server is visible to the world, you might want prevent port 53/80 from being accessible from the outside. You will still be able to connect to your Pi-hole from within the VPN.
|
||||
|
||||
Using `iptables`: First, verify that there is no rule that explicitly accepts `http` requests
|
||||
```
|
||||
sudo iptables -L --line-numbers
|
||||
```
|
||||
|
||||
If you get something like
|
||||
<pre>
|
||||
Chain INPUT (policy ACCEPT)
|
||||
num target prot opt source destination
|
||||
<b>1 ACCEPT tcp -- anywhere anywhere tcp dpt:http</b>
|
||||
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
|
||||
3 ACCEPT udp -- anywhere anywhere udp dpt:domain
|
||||
|
||||
Chain FORWARD (policy ACCEPT)
|
||||
num target prot opt source destination
|
||||
|
||||
Chain OUTPUT (policy ACCEPT)
|
||||
num target prot opt source destination
|
||||
</pre>
|
||||
you have to first explicitly delete the first INPUT rule using:
|
||||
```
|
||||
sudo iptables -D INPUT 1
|
||||
```
|
||||
|
||||
Then you can add an explicit rule that allows access from within the VPN
|
||||
```
|
||||
sudo iptables -A INPUT -i tun0 -p tcp --destination-port 53 -j ACCEPT
|
||||
sudo iptables -A INPUT -i tun0 -p tcp --destination-port 80 -j ACCEPT
|
||||
sudo iptables -A INPUT -i tun0 -p udp --destination-port 53 -j ACCEPT
|
||||
sudo iptables -A INPUT -i tun0 -p udp --destination-port 80 -j ACCEPT
|
||||
```
|
||||
|
||||
And another one that prevents access from everywhere else
|
||||
```
|
||||
sudo iptables -A INPUT -p tcp --destination-port 53 -j DROP
|
||||
sudo iptables -A INPUT -p tcp --destination-port 80 -j DROP
|
||||
sudo iptables -A INPUT -p udp --destination-port 53 -j DROP
|
||||
sudo iptables -A INPUT -p udp --destination-port 80 -j DROP
|
||||
```
|
||||
|
||||
Your configuration should look like
|
||||
<pre>
|
||||
sudo iptables -L -v --line-numbers
|
||||
Chain INPUT (policy ACCEPT 104 packets, 8691 bytes)
|
||||
num pkts bytes target prot opt in out source destination
|
||||
1 0 0 ACCEPT tcp -- <b>tun0</b> any anywhere anywhere tcp dpt:domain
|
||||
2 0 0 ACCEPT tcp -- <b>tun0</b> any anywhere anywhere tcp dpt:http
|
||||
3 0 0 ACCEPT udp -- <b>tun0</b> any anywhere anywhere udp dpt:domain
|
||||
4 0 0 ACCEPT udp -- <b>tun0</b> any anywhere anywhere udp dpt:http
|
||||
5 0 0 DROP tcp -- <b>any</b> any anywhere anywhere tcp dpt:domain
|
||||
6 0 0 DROP tcp -- <b>any</b> any anywhere anywhere tcp dpt:http
|
||||
7 0 0 DROP udp -- <b>any</b> any anywhere anywhere udp dpt:domain
|
||||
8 0 0 DROP udp -- <b>any</b> any anywhere anywhere udp dpt:http
|
||||
|
||||
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
|
||||
num pkts bytes target prot opt in out source destination
|
||||
|
||||
Chain OUTPUT (policy ACCEPT 83 packets, 11305 bytes)
|
||||
num pkts bytes target prot opt in out source destination
|
||||
</pre>
|
||||
while there might be other rules in your table. Note that the order of the list entries matters!
|
||||
|
||||
---
|
||||
### Optional: IPv6
|
||||
|
||||
Note that you will have to repeat the firewall setup using `ip6tables` if your server is also reachable via IPv6:
|
||||
|
||||
```
|
||||
sudo ip6tables -A INPUT -i tun0 -p tcp --destination-port 53 -j ACCEPT
|
||||
sudo ip6tables -A INPUT -i tun0 -p tcp --destination-port 80 -j ACCEPT
|
||||
sudo ip6tables -A INPUT -i tun0 -p udp --destination-port 53 -j ACCEPT
|
||||
sudo ip6tables -A INPUT -i tun0 -p udp --destination-port 80 -j ACCEPT
|
||||
sudo ip6tables -A INPUT -p tcp --destination-port 53 -j DROP
|
||||
sudo ip6tables -A INPUT -p tcp --destination-port 80 -j DROP
|
||||
sudo ip6tables -A INPUT -p udp --destination-port 53 -j DROP
|
||||
sudo ip6tables -A INPUT -p udp --destination-port 80 -j DROP
|
||||
```
|
||||
|
||||
```
|
||||
sudo ip6tables -L
|
||||
Chain INPUT (policy ACCEPT)
|
||||
target prot opt source destination
|
||||
ACCEPT tcp anywhere anywhere tcp dpt:domain
|
||||
ACCEPT tcp anywhere anywhere tcp dpt:http
|
||||
ACCEPT udp anywhere anywhere udp dpt:domain
|
||||
ACCEPT udp anywhere anywhere udp dpt:http
|
||||
DROP tcp anywhere anywhere tcp dpt:domain
|
||||
DROP tcp anywhere anywhere tcp dpt:http
|
||||
DROP udp anywhere anywhere udp dpt:domain
|
||||
DROP udp anywhere anywhere udp dpt:http
|
||||
|
||||
Chain FORWARD (policy ACCEPT)
|
||||
target prot opt source destination
|
||||
|
||||
Chain OUTPUT (policy ACCEPT)
|
||||
target prot opt source destination
|
||||
```
|
Loading…
Add table
Add a link
Reference in a new issue