Iptables
Jump to navigation
Jump to search
Links
- http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
- http://lpic2.unix.nl/ch13.html
- https://wiki.archlinux.org/index.php/simple_stateful_firewall
- https://wiki.gentoo.org/wiki/Security_Handbook/Firewalls#Iptables
iptables -nvL --line-numbers
Code snips
################################################################################ # FLUSH ALL RULES IN THE MANGLE, NAT AND FILTER TABLES ################################################################################ iptables -t mangle -F iptables -t nat -F iptables -t filter -F ################################################################################ # DELETE ALL USER-DEFINED (NOT BUILT-IN) CHAINS IN THE TABLES ################################################################################ iptables -t mangle -X iptables -t nat -X iptables -t filter -X ################################################################################ # SET ALL POLICIES FOR ALL BUILT-IN CHAINS TO DROP ################################################################################ iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP ################################################################################ # (1) TRAFFIC INITIATED BY THE FIREWALL DESTINED FOR THE INTERNET # DNS, SSH, RC564, PING ################################################################################ # ALLOW INITIATION BY THE FIREWALL iptables -t filter -A OUTPUT -o eth1 -p udp --destination-port dns \ -m state --state NEW -j ACCEPT iptables -t filter -A OUTPUT -o eth1 -p tcp --destination-port ssh \ -m state --state NEW -j ACCEPT iptables -t filter -A OUTPUT -o eth1 -p tcp --destination-port 2064 \ -m state --state NEW -j ACCEPT iptables -t filter -A OUTPUT -o eth1 -p icmp --icmp-type echo-request \ -m state --state NEW -j ACCEPT # ALLOW INCOMING RESPONSES iptables -t filter -A INPUT -i eth1 \ -m state --state ESTABLISHED,RELATED -j ACCEPT ################################################################################ # (2) TRAFFIC INITIATED BY THE OUTSIDE DESTINED FOR THE FIREWALL # SSH ################################################################################ # ALLOW INITIATION iptables -t filter -A INPUT -i eth1 -p tcp --destination-port ssh \ -m state --state NEW -j ACCEPT # ALLOW RESPONSE iptables -t filter -A OUTPUT -o eth1 -p tcp --destination-port ssh \ -m state --state ESTABLISHED,RELATED -j ACCEPT ################################################################################ # (3) TRAFFIC INITIATED BY THE FIREWALL DESTINED FOR THE INTERNAL NETWORK # SSH ################################################################################ # ALLOW INITIATION iptables -t filter -A OUTPUT -o eth0 -p tcp --destination-port ssh \ -m state --state NEW -j ACCEPT # ALLOW RESPONSE iptables -t filter -A INPUT -i eth0 -p tcp --destination-port ssh \ -m state --state ESTABLISHED,RELATED -j ACCEPT ################################################################################ # (4) TRAFFIC INITIATED BY THE INTERNAL NETWORK DESTINED FOR THE FIREWALL # DNS, SSH, RC564, PING ################################################################################ # ALLOW INITIATION iptables -t filter -A INPUT -i eth0 -p udp --destination-port dns \ -m state --state NEW -j ACCEPT iptables -t filter -A INPUT -i eth0 -p tcp --destination-port ssh \ -m state --state NEW -j ACCEPT iptables -t filter -A INPUT -i eth0 -p tcp --destination-port 2064 \ -m state --state NEW -j ACCEPT iptables -t filter -A INPUT -i eth0 -p icmp --icmp-type echo-request \ -m state --state NEW -j ACCEPT # ALLOW RESPONSE iptables -t filter -A OUTPUT -o eth0 \ -m state --state ESTABLISHED,RELATED -j ACCEPT ################################################################################ # (5) TRAFFIC INITIATED BY THE INTERNAL NETWORK DESTINED FOR THE OUTSIDE # EVERYTHING WE CAN INITIATE IS ALLOWED ################################################################################ # ALLOW INITIATION OF EVERYTHING iptables -t filter -A FORWARD -i eth0 -o eth1 \ -m state --state NEW -j ACCEPT # ALLOW RECEPTION iptables -t filter -A FORWARD -i eth1 -o eth0 \ -m state --state ESTABLISHED,RELATED -j ACCEPT ################################################################################ # (6) TRAFFIC INITIATED BY THE OUTSIDE DESTINED FOR THE INTERNAL NETWORK # ALL FORBIDDEN, EXCEPT WEBSERVER FORWARDING TO INTERNAL MACHINE ################################################################################ # ALLOW DESTINATION NAT FROM FIREWALL:80 TO INTERNAL MACHINE:2345 iptables -t nat -A PREROUTING -i eth1 -p tcp --destination-port 80 \ -j DNAT --to-destination 192.168.0.11:2345 iptables -t filter -A FORWARD -i eth1 -p tcp --destination-port 2345 \ -m state --state NEW -j ACCEPT ################################################################################ # (!) TRAFFIC AS A RESULT OF INITIATED TRAFFIC # ALL ALLOWED ################################################################################ # ALLOW ALL PACKETS RESULTING FROM ALLOWED CONNECTIONS iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A INPUT -m state --state NEW -i lo -j ACCEPT ################################################################################ # MASQUERADE PACKAGES FROM OUR INTERNAL NETWORK DESTINED FOR THE INTERNET # THIS IS SNAT (SOURCE NAT) ################################################################################ iptables -t nat -A POSTROUTING -i eth0 -o eth1 -s 192.168.0.0/24 -j MASQUERADE ################################################################################ # ENABLE FORWARDING ################################################################################ echo 1 > /proc/sys/net/ipv4/ip_forward
Block IP address 192.168.1.5:
iptables -A INPUT -s 192.168.1.5 -j DROP
Block outoging IP address 192.168.1.2 from server:
iptables -A OUTPUT -p tcp -d 192.168.1.2 -j DROP