Monday, September 21, 2009

IPTables how to ???

Iptables is the preferred firewall as it supports "state" and can recognize if a network connection has already been "ESTABLISHED" or if the connection is related to the previous connection (required for ftp which makes multiple connections on different ports). Ipchains can not.

Packet Processing In iptables

All packets inspected by iptables pass through a sequence of built-in tables (queues) for processing. Each of these queues is dedicated to a particular type of packet activity and is controlled by an associated packet transformation/filtering chain.

There are three tables in total. The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header. This is hardly used in a home or SOHO environment.

The second table is the filter queue which is responsible for packet filtering. It has three built-in chains in which you can place your firewall policy rules. These are the:

  • Forward chain: Filters packets to servers protected by the firewall.
  • Input chain: Filters packets destined for the firewall.
  • Output chain: Filters packets originating from the firewall.

The third table is the nat queue which is responsible for network address translation. It has two built-in chains; these are:

  • Pre-routing chain: NATs packets when the destination address of the packet needs to be changed.
  • Post-routing chain: NATs packets when the source address of the packet needs to be changed
http://www.youtube.com/watch?v=ldB8kDEtTZA
http://www.youtube.com/watch?v=aDaEXxRHeXY
http://www.youtube.com/watch?v=JojqHKcSxpo
  • Examples
    # Delete and flush. Default table is "filter". Others like "nat" must be explicitly stated.
    iptables --flush - Flush all the rules in filter and nat tables
    iptables --table nat --flush
    iptables --delete-chain - Delete all chains that are not in default filter and nat table
    iptables --table nat --delete-chain

    # Set up IP FORWARDing and Masquerading
    iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
    iptables --append FORWARD --in-interface eth1 -j ACCEPT
  • Example 2
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ---------------------------------------------------------------
    # Allow port forwarding for traffic destined to port 80 of the
    # firewall's IP address to be forwarded to port 8080 on server
    # 192.168.1.200
    #
    # - Interface eth0 is the internet interface
    # - Interface eth1 is the private network interface
    #---------------------------------------------------------------

    iptables -t nat -A PREROUTING -p tcp -i eth0 -d $external_ip \
    --dport 80 --sport 1024:65535 -j DNAT --to 192.168.1.200:8080

    #---------------------------------------------------------------
    # After DNAT, the packets are routed via the filter table's
    # FORWARD chain.
    # Connections on port 80 to the target machine on the private
    # network must be allowed.
    #---------------------------------------------------------------

    iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.200 \
    --dport 8080 --sport 1024:65535 -m state --state NEW -j ACCEPT

    iptables -A FORWARD -t filter -o eth0 -m state \
    --state NEW,ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -t filter -i eth0 -m state \
    --state ESTABLISHED,RELATED -j ACCEPT
  • Example 3
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
    --to 172.31.0.23:80
    If you have a default policy of DROP in your FORWARD chain, you
    must append a rule to allow forwarding of incoming HTTP requests so that
    destination NAT routing can be possible. To do this, run the following
    command:
    iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT

    This rule allows forwarding of incoming HTTP requests from the firewall to its intended
    destination of the Apache HTTP Server server behind the firewall.

rsync with delete option and different ssh port

How to rsync e.g PIPELINE dir from Source to Destination? #rsync -avzr   --delete-before  -e "ssh -p $portNumber"  /local...