How to Turn a Unix Computer into a Router and Firewall Using IPTables



Similar documents
Linux Routers and Community Networks

1:1 NAT in ZeroShell. Requirements. Overview. Network Setup

Firewall. IPTables and its use in a realistic scenario. José Bateira ei10133 Pedro Cunha ei05064 Pedro Grilo ei09137 FEUP MIEIC SSIN

+ iptables. packet filtering && firewall

Firewalls. Chien-Chung Shen

Chapter 7. Firewalls

Linux Firewall Wizardry. By Nemus

Linux: 20 Iptables Examples For New SysAdmins

TECHNICAL NOTES. Security Firewall IP Tables

Linux firewall. Need of firewall Single connection between network Allows restricted traffic between networks Denies un authorized users

Track 2 Workshop PacNOG 7 American Samoa. Firewalling and NAT

ipchains and iptables for Firewalling and Routing

Netfilter. GNU/Linux Kernel version 2.4+ Setting up firewall to allow NIS and NFS traffic. January 2008

Linux Networking: IP Packet Filter Firewalling

CS Computer and Network Security: Firewalls

Linux Firewalls (Ubuntu IPTables) II

Intro to Linux Kernel Firewall

CS Computer and Network Security: Firewalls

Network security Exercise 9 How to build a wall of fire Linux Netfilter

Linux Home Networking II Websites At Home

Network Security Exercise 10 How to build a wall of fire

CSC574 - Computer and Network Security Module: Firewalls

How To Understand A Firewall

Netfilter / IPtables

How To Set Up An Ip Firewall On Linux With Iptables (For Ubuntu) And Iptable (For Windows)

Packet filtering with Linux

Building a Home Gateway/Firewall with Linux (aka Firewalling and NAT with iptables )

Protecting and controlling Virtual LANs by Linux router-firewall

Optimisacion del ancho de banda (Introduccion al Firewall de Linux)

Main functions of Linux Netfilter

Lecture 18: Packet Filtering Firewalls (Linux) Lecture Notes on Computer and Network Security. by Avi Kak

Red Hat Linux Networking

Linux Firewall. Linux workshop #2.

Linux Cluster Security Neil Gorsuch NCSA, University of Illinois, Urbana, Illinois.

CSE543 - Computer and Network Security Module: Firewalls

Firewalls (IPTABLES)

Linux Networking Basics

CIT 480: Securing Computer Systems. Firewalls

Topics NS HS12 2 CINS/F1-01

CIS 433/533 - Computer and Network Security Firewalls

Firewall Configuration and Assessment

Linux Administrator (Advance)

iptables: The Linux Firewall Administration Program

Firewall implementation and testing

Firewalls. Firewall types. Packet filter. Proxy server. linux, iptables-based Windows XP s built-in router device built-ins single TCP conversation

How to Create, Setup, and Configure an Ubuntu Router with a Transparent Proxy.

Firewalls with IPTables. Jason Healy, Director of Networks and Systems

Assignment 3 Firewalls

pp=pod number, xxx=static IP address assigned to your pod

Dynamic Host Configuration Protocol (DHCP) 02 NAT and DHCP Tópicos Avançados de Redes

Focus on Security. Keeping the bad guys out

THE HONG KONG POLYTECHNIC UNIVERSITY Department of Electronic and Information Engineering

Packet Filtering Firewall

Module: Firewalls. Professor Patrick McDaniel Spring CMPSC443 - Introduction to Computer and Network Security

CIT 480: Securing Computer Systems. Firewalls

Lecture 18: Packet Filtering Firewalls (Linux) Lecture Notes on Computer and Network Security. by Avi Kak

Linux MDS Firewall Supplement

Home Linux Networking Lab (202) This Howto shows how to recreate the CIS Lab environment at home.

Firewalls. October 23, 2015

Lab Objectives & Turn In

How To Set Up A Network Map In Linux On A Ubuntu 2.5 (Amd64) On A Raspberry Mobi) On An Ubuntu (Amd66) On Ubuntu 4.5 On A Windows Box

Home Networking In Linux

Firewalls. Pehr Söderman KTH-CSC

Network Security. Routing and Firewalls. Radboud University Nijmegen, The Netherlands. Autumn 2014

10.4. Multiple Connections to the Internet

Matthew Rossmiller 11/25/03

Worksheet 9. Linux as a router, packet filtering, traffic shaping

Guardian Digital WebTool Firewall HOWTO. by Pete O Hara

IP Firewalls. an overview of the principles

Load Balancing Trend Micro InterScan Web Gateway

Firewalls, NAT and Intrusion Detection and Prevention Systems (IDS)

LAB THREE STATIC ROUTING

Firewalls. configuring a sophisticated GNU/Linux firewall involves understanding

IP Address: the per-network unique identifier used to find you on a network

Computer Firewalls. The term firewall was originally used with forest fires, as a means to describe the

Bridgewalling - Using Netfilter in Bridge Mode

Definition of firewall

Manuale Turtle Firewall

Load Balancing McAfee Web Gateway. Deployment Guide

How to Secure RHEL 6.2 Part 2

Network Security Management

Firewall Firewall August, 2003

Project 2: Firewall Design (Phase I)

NAT Using Source Routing through BGP Gateways

OpenBSD in the wild...a personal journey

Firewalls N E T W O R K ( A N D D ATA ) S E C U R I T Y / P E D R O B R A N D Ã O M A N U E L E D U A R D O C O R R E I A

Lecture Objectives. Lecture 6 Mobile Networks: Nomadic Services, DHCP, NAT, and VPNs. Agenda. Nomadic Services. Agenda. Nomadic Services Functions

Firewall Testing. Cameron Kerr Telecommunications Programme University of Otago. May 16, 2005

Load Balancing Web Proxies Load Balancing Web Filters Load Balancing Web Gateways. Deployment Guide

Firewalls. Test your Firewall knowledge. Test your Firewall knowledge (cont) (March 4, 2015)

Load Balancing Sophos Web Gateway. Deployment Guide

Load Balancing Bloxx Web Filter. Deployment Guide

Linux as an IPv6 dual stack Firewall

Firewall. Vyatta System. REFERENCE GUIDE IPv4 Firewall IPv6 Firewall Zone Based Firewall VYATTA, INC.

Firewall. Vyatta System. REFERENCE GUIDE IPv4 Firewall IPv6 Firewall Zone Based Firewall VYATTA, INC.

Firewalls. Chapter 3

Transcription:

How to Turn a Unix Computer into a Router and Firewall Using IPTables by Dr. Milica Barjaktarovic Assistant Professor of Computer Science at HPU Lecture from CENT370 Advanced Unix System Administration course at HCC

Linux Access Lists: IP Tables Firewalls References: Red Hat Linux Bible, Ch.16 Practical Guide to RH Linux, Ch.25 Red Hat Linux Firewalls, Red Hat Press 2003 frozentux.net/iptables-tutorial/iptables-tutorial.html http://www.netfilter.org/documentation/howto//nat-howto.html http://en.tldp.org/howto/ip-masquerade-howto/ http://www.netfilter.org/documentation/howto//packet-filtering-howto-7.html http://www.sal.ksu.edu/faculty/tim/unix_adm/networking/iptables.html# http://wiki.centos.org/howtos/network/iptables https://help.ubuntu.com/community/iptableshowto https://www.digitalocean.com/community/articles/how-to-setup-a-basic-ip-tables-configurationon-centos-6 http://www.yolinux.com/tutorials/linuxtutorialiptablesnetworkgateway.html

Assumptions You know some Unix? Syntax of Unix commands: command [options] [arguments] Basic Unix commands: ls, vi, cat, chmod, >, You know some networking? IP address, NAT, DMZ, private and public networks,

The issue: Protect Networks SOHO solution: network behind the main router/firewall More secure solution: DMZ configuration, private network behind the NAT Any Unix machine can be turned into a (100% software-based) router and/or firewall

Step 1: Turn your Unix box into a router Make sure the computer has at least two NICs installed and configured Enable routing Different syntax on different Unixes. Examples below. Temporary change: echo 1 > /proc/sys/net/ipv4/ip_forward Permanent change: Set net.ipv4.ip_forward = 1 in /etc/sysctl.conf OR: Set FORWARD_IPV4=true in /etc/sysconfig/network OR

CentOS6 Example external interface is eth0 and the internal eth1 # cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" NM_CONTROLLED= no" ONBOOT=yes TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=xxx.yyy.204.43 PREFIX=24 GATEWAY=xxx.yyy.204.1 DNS1=xxx.yyy.1.4 DNS2=xxx.yyy.8.3 DOMAIN="mydomain.net" HWADDR=00:25:90:60:27:96 UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 # cat /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE="eth1" NM_CONTROLLED= no" ONBOOT=yes TYPE=Ethernet BOOTPROTO=none IPADDR=192.168.1.1 PREFIX=24 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth1" UUID=9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 GATEWAY=xxx.yyy.204.1 HWADDR=00:25:90:60:27:97 # cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=myhost.mydomain.net FORWARD_IPv4= yes

Step 2: Turn your Unix box into a firewall The firewall is implemented in software, using IPTables access lists Logically, IPTables is a generic table structure that defines rules and commands as part of the netfilter framework that facilitates Network Address Translation (NAT), packet filtering, and packet mangling in the Linux 2.4 and later operating systems. i.e. IP tables is a set of access rules used for routing, firewalls, NAT, proxy servers, etc. Physically, IPTables is implemented using iptables command (chek it out: man iptables)

Each RH box already has a default IPTables firewall built in If iptables service is on, the default firewall is running! The default firewall allows everything The default IPTables is implemented as the script located in /etc/sysconfig/iptables file Default IPTables can be configured: via GUI use System Settings Security Level utility, or /usr/bin/redhatconfig-securitylevel GUI tool to choose a preconfigured firewall (High, Medium or no firewall) OR manually the default configuration file with firewall rules is /etc/sysconfig/iptables, read by the init script /etc/rc.d/init.d/iptables

Best: Create Custom IPTables scripts Create and/or manipulate IPTables manually from the command line using the iptables command Put commands into a script, chmod u+x Manually configuring IPTables is a better choice bc: It allows more control than default firewall, which provides a limited number of configuration options Default firewall will automatically override any changes you make to IPTables manually

The history: Linux Access Lists in RH Family IP Chains Default access list technology before Red Hat Linux 7.1 Provides basic syntax for access lists Not included in Fedora IP Tables Default access list mechanism for Linux kernel 2.4.x- 2.6.x, Red Hat Linux 7.1-9 and Fedora 1,2,3 More complex access list syntax => more capabilities General purpose tool that experienced system administrators must be able to use.

Basics of Packet-Filtering Firewalls Inspect every packet passing through firewall Check access list rules against the packet Each rule is in form: if packet satisfies condition, then action Typically, action is: pass or drop the packet Typically, there are several dozen rules Rules are executed from top to bottom The first rule that fires is taken There is one default rule, applied to packets that don t satisfy any other rule.

Example Conceptually If packet is going out, pass it Else If packet is coming in, drop it Else If packet is passing through, drop it IPTables implementation iptables P OUTPUT j ACCEPT iptables P INPUT j DROP iptables P FORWARD j DROP In IPTables, there are default rules for packets going out (OUTPUT), coming in (INPUT) and passing through (FORWARD)

Sneak Preview: IPTables examples Example: default firewall lets everything in /out /through iptables -P INPUT j ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT Example: block pings SERVER_IP="202.54.10.20" iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d $SERVER_IP -j DROP iptables -P INPUT j ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT The consequence: must specifically address every item to be dropped unrealistic Still unrealistic

Example: real firewall lets only allowed packets in iptables -P INPUT j DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Accept packets from trusted IP addresses iptables -A INPUT -s 192.168.0.4 -j ACCEPT # Accept tcp packets on destination port 22 (SSH) iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT This script wont allow internal users to surf the web, query DNS, etc.. Why. Example: desktop firewall lets in only responses initiated by requests from the inside net iptables -P INPUT j DROP iptables -P FORWARD j DROP iptables -P OUTPUT j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #allow internal users to get response from outside servers iptables -A INPUT -i lo -j ACCEPT

IPTables inherits chains from IPChains, so there are total of 6 chains, including 3 main userdefined chains: INPUT for packets coming in from outside OUTPUT - for packets going outside FORWARD for packets being forwarded The 3 chains are grouped in 3 tables IPTables Syntax: IPTables Chains A chain is a list of rules, i.e. an access list, to be applied to certain packets A rule has a condition to match and a target action to perform

3 tables used IPTables tables ;) filter table (default table for firewalls) used for packet filtering access lists used to control forwarding packets between network interfaces nat table used for network address translation (destination NAT aka DNAT source NAT aka SNAT, and masquerading) mangle table used for modifying packet header fields enables modifying Type of Service and Time To Live fields of packet header enables marking packets for later recognition not usually required for firewall designs

Filter Table Used to create firewalls based on packet filtering Uses 3 chains similar to the main chains: INPUT, OUTPUT, FORWARD Rules are stateful They can test whether a packet is associated with or related to an established connection.

NAT Table Used for source and destination NAT (SNAT and DNAT) and masquerading DNAT: proxying, port forwarding SNAT: accessing host on private net Masquerading: simple case of SNAT NAT table uses 2 chains: PREROUTING for DNAT operations (i.e. modify the destination IP address or port) POSTROUTING for SNAT and masquerading (i.e. modify the source IP or port)

IPTables Packet Paths http://www.adminsehow.com/2011/09/iptables-packet-traversemap/

Syntax for IPTables Rules iptables -A INPUT -i eth0 -p tcp -s 10.0.0.0/8 -d 192.168.1.0/24 -j DROP Command name: iptables Operation to perform: -A, -I, -D, -R Chain to apply operation to: INPUT,OUTPUT,FORWARD Interface to apply rule to: -i eth0 Protocol to test: -p tcp Source address/network: -s 10.0.0.0/8 Destination address/network: -d 192.168.1.0/24 Action to take: -j DROP

IPTables Operations (evoked via options of iptables command) Chain Operations List the rules associated with a chain (-L) Flush a chain (i.e., delete its rules) (-F) Zero counters associated with a chain (-Z) Create a user chain (must be associated with a table) (-N) Delete a user chain (-X) Set the default policy associated with a chain (-P) Rename a user chain (-E) Rule Operations Add a rule at the head of a chain (insert) (-I) Add a rule at the end of a chain (append) (-A) Delete a rule (-D) Replace a rule (-R)

Operations for Chains List a chain iptables -L chain iptables -L --line-numbers chain iptables -L -v chain List and display line-numbers iptables -L --line-numbers chain Flush a chain - delete all associated rules iptables -F chain Set default policy (ACCEPT, REJECT, DROP) iptables -P chain policy (e.g. iptables -P INPUT DROP) Create a user-defined chain iptables -N chain Delete a user-defined chain iptables -X chain

Operations for Rules Insert a rule at the head of the chain iptables -I INPUT specifiers target Add a rule at the end of the chain iptables -A INPUT specifiers target Delete a rule iptables -D INPUT specifiers target iptables -D chain line-number Replace a rule iptables -R chain line specifiers

iptables specifiers Packet characteristics For example: Protocol (-p) -p tcp, -p udp, -p icmp Source IP address (-s) -s 10.10.10.0/24 Destination IP address (-d) -d 166.122.23.130 Input interface (-i) -i eth0, -i lo Output interface (-o) -o lo, -o eth0 Header characteristics TCP datagrams: Source port (--sport), destination port (--dport), SYN or other TCP flags, TCP options UDP datagrams: Source port (--sport), destination port (--dport) ICMP Messages ICMP type and code Use! to indicate negation or exclusion (spaces required) -p! tcp -s!192.1.1.1 -s!192.1.1.0/24

IPTables Targets (actions to perform) Possible actions for IPTables rules ACCEPT - packet is passed to next chain DROP - packet is discarded aka blocked without any response aka in stealth mode) REJECT - sends an error packet to sender - unsafe LOG - logs packet using syslog RETURN - returns from user chain SNAT, DNAT, MASQUERADE Invoke chain using -j chain-name Examples -j ACCEPT -j DROP -j mychain

Non-routable aka private IP addresses class A 10.0.0.0 10.255.255.255 10.0.0.0/8 (255.0.0.0) class B 172.16.0.0 172.31.255.255 172.16.0.0/12 (255.240.0.0) class C 192.168.0.0 192.168.255.255 192.168.0.0/16 (255.255.0.0)

Specify Protocol -p tcp, -p udp IPTables Rules Options Specify Source/Destination -s 192.168.0.1/255.255.255.0 or -s! 10.0.0.0/8 -d 192.168.0.5/255.255.255.0 or -d! 10.0.0.0/8 Specify Interface -i eth0 or -i eth+ (input, forward chains) -o eth0 or -o eth+ (output, forward chains) Specify Fragment Flag -f or! -f (fragment flag set or not set)

IPTables Rules Options Protocols and Ports -p udp --sport 53 or -p udp -dport 53 -p tcp, udp --sport 0:1023 or -p tcp, udp --dport 0:1023 -p tcp, udp --sport :1023 or -p tcp, udp --dport :1023 -p tcp, udp --sport 1024: or -p tcp, udp -dport 1024: Protocol and control flags -p tcp --syn (SYN set, but ACK and FIN not set) -p tcp! --syn (SYN not set, or SYN and ACK or FIN set) -p tcp --tcp-flags SYN, ACK, FIN SYN (same as --syn) -p tcp --tcp-flags ALL NONE ALL = ACK, FIN, RST, PSH, SYN, URG

IPTables Rules Options ICMP protocol -p icmp --icmp-type echo-request -p icmp --icmp-type echo-reply -p icmp -icmp-type host-unreachable

IPTables Rules Connection State Connection States NEW - no connection established yet ESTABLISHED - 2-way exchange completed RELATED - associated with a new connection related to an established connection (e.g., ftp) INVALID - associated with a connection that has a problem (malformed packet or header) To test for connection state, do: -m state --state ESTABLISHED,RELATED

MAC source address use in filter FORWARD and INPUT chains -m mac --mac-source 00:05:69:00:04:BA

Multiple ports -p tcp -m multiport --source-port 21,22,25,80 -p tcp -m multiport --destination-port 20,21

-m ttl --ttl 1 Time to Live

Process owner -m owner --uid-owner uid-owner-id -m owner --gid-owner gid-owner-id

User Chains User chains are user-defined chains and must be associated with the FILTER, NAT, or MANGLE table. User chains can be used to create chain components that can be called from other chains to perform specific actions. To create a user chain use iptables -N chain where chain is the name of the chain being created. To delete a user chain use: iptables -X chain To rename a user chain, use iptables -E old new

Creating a User Chain (log_badip) # create a chain to log and drop bad IP addresses iptables -N log_badip iptables -A log_badip -p tcp --dport 137:139 -j DROP iptables -A log_badip -p udp --dport 137:139 -j DROP iptables -A log_badip -j LOG --log-prefix "IPT BAD" iptables -A log_badip -j DROP

Creating a User Chain (using a script) #create a chain to test for bad IP addresses BADIP="0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 \ 172.16.0.0/12 192.0.0.0/24 192.168.0.0/16 \ 224.0.0.0/4 240.0.0.0/5 255.255.255.255" iptables -N test_badip for ip in $BADIP do iptables -A test_badip -s $ip -j log_badip iptables -A test_badip -d $ip -j log_badip done

Invoking User-Chains from INPUT chain #Uses INPUT chain to invoke the # user-defined chains, test_badip and log_badip iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -j test_badip iptables -A INPUT -j log_badip

Starting and Stopping IPTables service To start/stop/restart (pick only one choice) the IPTables service use: /sbin/service iptables start/stop/restart To save the IPTables rules for reuse: /sbin/service iptables save

Setting IPTables to Start by default display iptables runlevel settings /sbin/chkconfig --level iptables change iptables runlevel settings /sbin/chkconfig --level 345 iptables on

IPTables as a shell script Can create very complex, operational firewalls using the iptables command with shell variables and shell scripts The IP tables rules and configuration are stored in file /etc/sysconfig/iptables This file must exist in order to use the iptables command to modify the rules in your access list. But don t put your IPTables into this file.

Creating IPTables rules Method 1 (recommended) Use the iptables command. Put all commands into a custom script and run it. The first command should be flushing the existing default IPTables with iptables F. Review: how do we make and run a script? Method 2 (NOT recommended) Edit the default iptables file /etc/sysconfig/iptables

Put all rules into a script: (too) Simple IPTables Firewall #flush old rules iptables -F iptables X # Replace xxx.xxx.xxx.xxx with IP address of name server MYSERVER= xxx.xxx.xxx.xxx #these rules are checked first, in exactly this order; packet is treated according to the first rule that matches iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p udp -s $MYSERVER --sport 53 -j ACCEPT iptables -A INPUT -p tcp --syn -j REJECT iptables -A INPUT -p udp -j REJECT #default rules, applied last (usually they are specified on top of file) iptables -P INPUT ACCEPT What is the problem iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT with this script?

Simple IPTables Firewall: allow in only DNS responses #flush old rules iptables -F iptables X # Replace xxx.xxx.xxx.xxx with IP address of name server MYSERVER= xxx.xxx.xxx.xxx #no hardwiring; work with variables #these rules are checked first, in exactly this order; packet is treated according to the first rule that matches iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p udp -s $MYSERVER --sport 53 -j ACCEPT #iptables -A INPUT -p tcp --syn -j REJECT #iptables -A INPUT -p udp -j REJECT #default rules, applied last (usually they are specified on top of file) iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP

Advanced IPTables Firewall Implementation Two basic network flavors: private network behind a NAT, or servers in DMZ IPTables can do: Packet Forwarding Network Address Translation (NAT) Destination NAT Source NAT Masquerading Enabling Linux Routing

DMZ Setup SOHO Setup Private network NAT Public network

Public and Private Firewall F has: prf: private IP on internal interface IIF pubf: public IP on external interface EIF Server S is DNATed; it has: prs: private IP pubs: public IP where pubs = pubf Client C is SNATed; it has: prc: private IP pubc: public IP where pubc = pubf

Packet Forwarding Multi-homed hosts Filter packets traversing network interfaces Routing host or router Forwarded packets traverse the IPTables FORWARD chain associated with the filter table. Add rules to the FORWARD chain to control flow of traffic between networks. IIF=eth0 #internal interface EIF=eth1 #external interface iptables -P FORWARD DROP iptables -A FORWARD -i $IIF -o $EIF -j ACCEPT iptables -A FORWARD -i $EIF -o $IIF -j ACCEPT

Packet Forwarding Example iptables -P FORWARD j DROP iptables -A FORWARD -i eth0 -o eth1 -s 112.0.34.1 -d 192.168.1.12 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -s 192.168.1.12 -d 112.0.34.1 -j ACCEPT iptables -A FORWARD -j LOG --log-prefix "IPT FWD Drop "

Another Packet Forwarding Example iptables -P FORWARD j DROP iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m state -- state ESTABLISHED, RELATED -j ACCEPT iptables -A FORWARD -j LOG --log-prefix "IPT FWD DROP"

Network Address Translation (NAT) Flavors NAT Modifies either source or destination IP addresses. Source NAT (SNAT) Modifies the source IP address of a packet Performed in POSTROUTING chain of the nat table (outbound direction) Destination NAT (DNAT) Modifies the destination IP address of a packet Performed in the PREROUTING chain of the nat table (inbound direction)

NAT Packet Path

Uses for Destination NAT (DNAT) Transparent proxying Clients request services using surrogate IP address Port forwarding Modification of destination port Enables clients to access a service via a surrogate destination port Load balancing Specify multiple IP addresses in DNAT rule Each host in range receives a proportional share of the traffic

DNAT General Form iptables -t nat -A PREROUTING -i intf specifiers \ -j DNAT --to-destination ip[-ip][:port[-port]] Example: iptables -t nat -A PREROUTING -i eth0 -o eth1 \ -p tcp -d 112.0.34.1 --dport 80 -j DNAT \ --to-destination 192.168.1.12:8080 Caveat: also must have forwarding rules

DNAT 1. Transparent proxying: access a host on a private network E.g. Client refers to server as 112.0.34.72, the actual address is 192.168.1.72: iptables -t nat -A PREROUTING -i eth0 \ -d 112.0.34.72 -j DNAT --to-destination 192.168.1.72 2. Port forwarding E.g. Reach a web server running on port 8080 via destination port 80: iptables -t nat -A PREROUTING -i eth0 -p tcp \ -d 112.0.34.72 dport 80 -j DNAT \ -- to-destination 192.168.1.72:8080 3. Load balancing: for selecting one of many servers

Uses of Source NAT (SNAT) Enable hosts with nonroutable addresses to communicate with Internet hosts Enable multiple hosts to share a single IP address Hide the true IP address of a host Resolve certain problems with DNAT

SNAT Enabling private IPs to access Internet; hiding the true IP; enabling multiple clients to share a single IP E.g. Client's actual address is 192.168.1.1; firewall performs NAT; servers sees client as 112.0.34.72: iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.1 -j SNAT --to-source 112.0.34.72 Many clients can share one (or more) SNATs: iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.0/24 -j SNAT \ --to-source 112.0.34.72-112.0.34.81 (or only one IP)

SNAT Examples iptables -t nat -A POSTRTOUTING -o eth0 \ -s 192.168.1.1 -j SNAT --to-source 192.1.34.254 iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.0/24 -j SNAT --to-source 192.0.34. 254 iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.0/24 -j SNAT --to-source 192.0.34.242-192.0.34.254 iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.0/24 -j SNAT --to-source 192.0.34.254:32768-65535 iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.0/24 -j MASQUERADE [--to-ports 32768-65535] Caveat: also must include forwarding rules

IP Masquerading Simplified form of SNAT, but slower-to-run Packets receive IP address of output interface as their source address. Useful when the IP address of the output interface is not fixed (i.e., obtained via DHCP) and cannot be embedded in firewall rules. Example (applied on routing host): E.g. Client's actual address is 192.168.1.1; firewall's actual address is 192.0.34.72; server sees client's packets as coming from 192.0.34.72: iptables -t nat -A POSTROUTING -o eth0 \ -s 192.168.1.1 -j MASQUERADE

Reply Packets IPTables automatically de-nats reply packets associated with a connection established via SNAT. For DNAT, IPTables automatically re-nats reply packets associated with a connection established using DNAT.

Accessing a DNAT Host from the local network If a local host can be accessed from Internet, it can be a problem to access it from the LAN For example: If internal client accesses WebServer using the WebServer's public address, the routing host performs DNAT and forwards request to WebServer. WebServer sees unmodified source address and sends replies directly to the requestor. Client does not properly associate replies with requests, since IP addresses don't match.

Accessing a DNAT Host from the local network, cntd. Example: server at 192.168.1.1 is DNATed as 112.0.34.1. So: When a local host contacts the server at 112.0.34.1, firewall DNATs it to 192.168.1.1 and gives it to the server; the server replies directly to the client instead of replying via the firewall, using source IP of 112.168.1.1, so the client cannot associate this reply with its original request. Fixes Split-horizon DNS DNS server configured to handle internal requests differently from external requests. Router performs both SNAT and DNAT when handling internal requests, so responses are sent via the router.

Accessing a DNAT Host from the local network cntd. Solution1: substitute the IP address of the firewall as the source IP of packets destined to the server; server replies to firewall 192.168.1.1; firewall gives to the client iptables -t nat -A PREROUTING \ -i eth0 -o eth1 -d 192.0.34.72 \ -j DNAT --to-destination 192.168.1.72 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.72 \ -j SNAT --to-source 192.168.1.1

Accessing a DNAT Host from the local network general formula In general: Firewall F has private IP prf and public IP pubf Server S is DNATed; it has private IP prs and public IP pubs, where pubs = pubf Client C is SNATed; it has private IP prc and public IP pubc, where pubc = pubf Problem: Client C contacts server at pubs, so the packet ends at F and F forwards to prs. Since the packet has sourceip = prc, S replies directly to prc, so sourceip =prs, and C cannot tell that the reply is associated with the request to pubs.

Accessing a DNAT Host from the local network general formula cntd. Recap: Firewall F has private IP prf and public IP pubf Server S is DNATed; it has private IP prs and public IP pubs, where pubs = pubf Client C is SNATed; it has private IP prc and public IP pubc, where pubc = pubf Solution: Client C contacts server at pubs but with sourceip=prf; F forwards to prs. Since the packet has sourceip = prf, S replies to prf and firewall forwards to C.

Firewall Maintenance Maintain record of changes to firewall Keep backup copy of firewall code Include a command in firewall script that mails a copy of the firewall to a designated user on your local network. mail -s "Firewall backup" user@host.domain < script Encrypt the file before sending Flush old rules first; if the firewall is accessed remotely, put in a rule for allowing incoming SSH packets, in case you flush the IPTables and lock yourself out iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Enabling Linux Routing Define a default gateway or default gateway device in the /etc/sysconfig/network file GATEWAY=192.0.34.72 GATEWAYDEV=eth0 Turn on IP packet forwarding in /etc/sysctl.conf file: net.ipv4.ip_forward = 1 Restart network and iptables /etc/init.d/network restart /etc/init.d/iptables restart Verify network netstat -r

Summary of Forwarding Define forwarding rules (FORWARD chain) Define NAT translation rules nat table, PREROUTING and POSTROUTING chains Save changes to iptables service iptables save #if you are working with default Define default gateway or gateway device Enable packet forwarding Restart network and iptables

IPTables Specifics To use NAT, we must set up forwarding first: the firewall has forwarding enabled IPTables has FORWARD chain rules that specify from interface to what interface we want to forward and how to deal with forwarded packets Local hosts have to be configured to have the private side of the firewall listed as their gateway (and the DNS server is the DNS server of the firewall - optional)

IPTables at-a-glance 1. Put all iptables commands into a script: 1) flush all old iptables and also nat iptables (those are separate options) 2) Specify INPUT, OUTPUT, FORWARD, and/or nat rules (nat requires FORWARD rules first) 3) Specify default policy 1) If default policy is to DROP then the rules should be about ACCEPT, and vice versa. Why? 2. Configure the firewall 3. Configure the local hosts 4. Run the script

Example: A simple firewall for a NAT and DMZ network https://www.frozentux.net/iptables-tutorial/iptablestutorial.html#rcfirewalltxt https://www.frozentux.net/iptables-tutorial/iptablestutorial.html#includercdmzfirewall and https://www.frozentux.net/iptables-tutorial/iptablestutorial.html#examplecode