Commit 627a66
2024-12-30 11:11:48 Steven Anderson: init/dev/null .. ScriptFU/networking/iptables.md | |
@@ 0,0 1,89 @@ | |
+ | # iptables |
+ | |
+ | #### list rules with line numbers |
+ | sudo iptables --list --line-numbers |
+ | |
+ | #### delete a rule with number |
+ | sudo iptables -D INPUT <number> |
+ | |
+ | #### add an input rule |
+ | sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT |
+ | |
+ | #### make iptables persistent |
+ | sudo apt install iptables-persistent |
+ | sudo netfilter-persistent save |
+ | |
+ | #### only allow communication when connected to VPN |
+ | iptables config to prevent communication unless connected to a VPN. |
+ | ``` bash |
+ | #!/bin/sh |
+ | |
+ | IPT="/sbin/iptables" |
+ | |
+ | # Allow loopback device |
+ | $IPT -A INPUT -i lo -j ACCEPT |
+ | $IPT -A OUTPUT -o lo -j ACCEPT |
+ | |
+ | # Allow all local traffic. |
+ | $IPT -A INPUT -s 192.168.1.0/24 -j ACCEPT |
+ | $IPT -A OUTPUT -d 192.168.1.0/24 -j ACCEPT |
+ | $IPT -A INPUT -s 10.0.1.0/24 -j ACCEPT |
+ | $IPT -A OUTPUT -d 10.0.1.0/24 -j ACCEPT |
+ | |
+ | # Allow VPN establishment |
+ | $IPT -A OUTPUT -p udp --dport 1194 -j ACCEPT |
+ | $IPT -A INPUT -p udp --sport 1194 -j ACCEPT |
+ | |
+ | # Accept all TUN connections (tun = VPN tunnel) |
+ | $IPT -A OUTPUT -o tun+ -j ACCEPT |
+ | $IPT -A INPUT -i tun+ -j ACCEPT |
+ | |
+ | # Set default policies to drop all communication unless specifically allowed |
+ | $IPT -P INPUT DROP |
+ | $IPT -P OUTPUT DROP |
+ | $IPT -P FORWARD DROP |
+ | ``` |
+ | |
+ | #### ipv4 iptables rules for a VPS |
+ | ``` iptables |
+ | *filter |
+ | |
+ | # Allow all loopback (lo0) traffic and reject traffic |
+ | # to localhost that does not originate from lo0. |
+ | -A INPUT -i lo -j ACCEPT |
+ | -A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT |
+ | |
+ | # Allow ping. |
+ | -A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT |
+ | |
+ | # Allow SSH connections. |
+ | -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT |
+ | |
+ | # Allow HTTP and HTTPS connections from anywhere |
+ | # (the normal ports for web servers). |
+ | -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT |
+ | -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT |
+ | |
+ | # Allow inbound traffic from established connections. |
+ | # This includes ICMP error returns. |
+ | -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
+ | |
+ | # Log what was incoming but denied (optional but useful). |
+ | #-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 7 |
+ | |
+ | # Reject all other inbound. |
+ | -A INPUT -j REJECT |
+ | |
+ | # Log any traffic that was sent to you |
+ | # for forwarding (optional but useful). |
+ | -A FORWARD -m limit --limit 5/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 7 |
+ | |
+ | # Reject all traffic forwarding. |
+ | -A FORWARD -j REJECT |
+ | |
+ | # Block docker access |
+ | -A DOCKER-USER -m state --state ESTABLISHED,RELATED -j ACCEPT |
+ | -A DOCKER-USER -i eth0 ! -s 127.0.0.1 -j DROP |
+ | |
+ | COMMIT |
+ | ``` |