[[http://tmade.de|Home tmade.de]]
[[http://wiki.tmade.de|Home Wiki]]
===== IP-Tables =====
Tutorial:
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html
==== SLES ====
1. Step: IP-Tables will be set:
/usr/sbin/iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -p tcp --destination-port 443 -j ACCEPT
/usr/sbin/iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 80 --to-ports 8080
/usr/sbin/iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 443 --to-ports 8443
/usr/sbin/iptables -A OUTPUT -d 172.16.123.23/32 -j REJECT --reject-with icmp-port-unreachable
/usr/sbin/iptables -A OUTPUT -d 172.16.123.141/32 -j REJECT --reject-with icmp-port-unreachable
/usr/sbin/iptables -A OUTPUT -d 172.16.123.22/32 -j REJECT --reject-with icmp-port-unreachable
2. Step: IP-Tables will be saved
iptables-save > /etc/iptables_custom.conf
3. Step: A script will be created and IP_Tables exported
echo '#!/bin/sh' > /etc/sysconfig/network/if-up.d/iptables
echo 'echo "IPTABLES will be started"' >> /etc/sysconfig/network/if-up.d/iptables
echo "iptables-restore < /etc/iptables_custom.conf" >> /etc/sysconfig/network/if-up.d/iptables
4. Step: Make the startscript (Init-Script) executable
chmod +x /etc/sysconfig/network/if-up.d/iptables
5. Step: Check the tables after reboot
iptables --list
or
iptables -L -n
To show all settings run
iptables-save
or to show NAT Rules
iptables -t nat -L -vn
==== Systemd ====
Create a executable script (e. g.: "chmod 750 /sbin/iptables.sh") with following content:
#!/bin/bash
# Configure iptables
# Limit PATH
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
# iptables configuration
firewall_start() {
# Define rules
/usr/sbin/iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD -p tcp --destination-port 443 -j ACCEPT
/usr/sbin/iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 80 --to-ports 8080
/usr/sbin/iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 443 --to-ports 8443
}
# clear iptables configuration
firewall_stop() {
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
}
# execute action
case "$1" in
start|restart)
echo "Starting firewall"
firewall_stop
firewall_start
;;
stop)
echo "Stopping firewall"
firewall_stop
;;
esac
Create unit-file:
cat << EOF | sudo tee /etc/systemd/system/iptables.service
[Unit]
Description=iptables service
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables.sh start
RemainAfterExit=true
ExecStop=/sbin/iptables.sh stop
StandardOutput=journal
[Install]
WantedBy=multi-user.target
EOF
Update systemd:
systemctl daemon-reload
Usage:
systemctl start iptables.service
systemctl stop iptables.service
systemctl status iptables.service
systemctl is-enabled iptables.service #check, if active on system boot
systemctl enable iptables.service #enable to start with system
==== Delete IP-Tables ====
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
To delete/add manually:
iptables-save > somefile
Edit with favourite texteditor like vi, than
iptables-restore < somefile
==== Delete Single Rules ====
Execute:
iptables -L INPUT --line-numbers
iptables -L FORWARD --line-numbers
iptables -L OUTPUT --line-numbers
Output example:
root@rasp:~# iptables -L FORWARD --line-numbers
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
To delete rule 1 run:
iptables -D FORWARD 1
==== Forwarding ====
To forward incomming trafic to another IP:
First you have to check "cat /proc/sys/net/ipv4/ip_forward"
If you are getting "0" forwarding isnĀ“t allowed. To change it run
echo "1" > /proc/sys/net/ipv4/ip_forward
or
sysctl net.ipv4.ip_forward=1
Check it with "cat /proc/sys/net/ipv4/ip_forward" and you get "1"
Afterwards you can set your rules such as e.g.:
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.30:22
iptables -t nat -A POSTROUTING -j MASQUERADE
To forward to IP range:
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 192.168.1.100-192.168.1.200:1111
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.100-192.168.1.200
To forward to a port range:
iptables -t nat -A PREROUTING -p tcp --dport 1024:65000 -j DNAT --to-destination 192.168.1.30:1024-65000
==== Commands ====
iptables -vnL #Show hom many times a rule was used
iptables -t filter -L FORWARD -nv #Show hom many times a forward rule was used
iptables -t filter -L INPUT -nv
iptables -t filter -L OUTPUT -nv
iptables -L INPUT --line-numbers
iptables -L FORWARD --line-numbers
iptables -L OUTPUT --line-numbers