NETFILTER

Netfilter is a host-based firewall for Linux based operating systems. It is included as part of Linux distribution and it is activated by default. This firewall is controlled by the program called iptables. Netfilter filtering takes place at kernel level, before a program can even process the data from the network packet.
Iptables/Ip6tables - administration tool for IPv4/IPv6 packet filtering and NAT
Author: Rusty Russell
Developer(s): Netfilter Core Team
Original release: 1998

Tables:
  • Filter Table: Used for normal filtering of traffic based on rules defined by user
     Chains Used: INPUT CHAIN/OUTPUT CHAIN/FORWARD CHAIN
  • NAT Table: Iptable can be used for Network Address Translation purpose. This table contains rules related to NAT
     Chains Used: PREROUTING/OUTPUT/POST ROUTING
  • Mangle Table: Rules in this table can be used to modified the packets based on user given criteria. User can modify the TTL, MMS value, Terms of service(like., which traffic should be given more priority, etc)
     Chains Used: PREROUTING/OUTPUT/INPUT/POSTROUTING/FORWARD
  • Raw Table: Primarily used to add no connection tracking rules
  • Security: Used for mandatory access control networking rules
Chains:
  • PREROUTING Chain: It is used to add rules which define actions that need to be taken before a routing decision is made by a kernel
  • INPUT Chain: It is used for rules which are applicable to the traffic/packets coming towards the server
  • OUTPUT Chain: It is used for rules which need to be applied on outgoing traffic/packets from server
  • FORWARD Chain: It is used for adding rules related to forwarding an IP packet
  • POST ROUTING Chain: It is used for adding rules which will define actions that need to be taken after a routing decision which is taken by the kernel
Targets:
  • ACCEPT
  • DROP
  • REJECT
  • LOG
  • QUEUE
  • RETURN 
Usage: 
       iptables -[ACD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]
       iptables -R chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LS] [chain [rulenum]] [options]
       iptables -[FZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain        Append to chain
  --check   -C chain        Check for the existence of a rule
  --delete  -D chain        Delete matching rule from chain
  --delete  -D chain rulenum
                Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
                Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
                Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
                List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
                Print the rules in a chain or all chains
  --flush   -F [chain]        Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
                Zero counters in chain or all chains
  --new     -N chain        Create a new user-defined chain
  --delete-chain
            -X [chain]        Delete a user-defined chain
  --policy  -P chain target
                Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
                Change chain name, (moving any references)
Options:
    --ipv4    -4        Nothing (line is ignored by ip6tables-restore)
    --ipv6    -6        Error (line is ignored by iptables-restore)
[!] --protocol    -p proto    protocol: by number or name, eg. `tcp'
[!] --source    -s address[/mask][...]
                source specification
[!] --destination -d address[/mask][...]
                destination specification
[!] --in-interface -i input name[+]
                network interface name ([+] for wildcard)
 --jump    -j target
                target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --match    -m match
                extended match (may load extension)
  --numeric    -n        numeric output of addresses and ports
[!] --out-interface -o output name[+]
                network interface name ([+] for wildcard)
  --table    -t table    table to manipulate (default: `filter')
  --verbose    -v        verbose mode
  --wait    -w [seconds]    maximum wait to acquire xtables lock before give up
  --wait-interval -W [usecs]    wait time to try to acquire xtables lock
                default is 1 second
  --line-numbers        print line numbers when listing
  --exact    -x        expand numbers (display exact values)
[!] --fragment    -f        match second or further fragments only
  --modprobe=<command>        try to insert modules using this command
  --set-counters PKTS BYTES    set the counter during insert/append
[!] --version    -V        print package version


Configuration file

sudo vi /etc/sysconfig/iptables

sudo service iptables status

sudo service iptables start

sudo service iptables stop

sudo service iptables status

sudo iptables -L or sudo iptables –list

iptables -L INPUT or iptables -L OUTPUT

with line-numbers and numeric

iptables -L –line-numbers --numeric

delete rules with line-number

iptables –delete INPUT 2

create a new chain

iptables –new MOHAN-INPUT

iptables –new MOHAN-OUTPUT

check rule is already exists

iptables -t filter -C INPUT -p tcp –dport 80 -j DROP

deleting chain

iptables -X MOHAN-INPUT

iptables -X MOHAN-OUTPUT
 

inserting rule with line-number

iptables -t filter -I INPUT 2 -p tcp –dport 25 -m state –state NEW,ESTABLISHED -j ACCEPT

replacing a rule with line-number

iptables -t filter -R INPUT 2 -p tcp –dport 25 -j ACCEPT

flushing iptables

iptables -F

renaming chain name

iptables E MOHAN-INPUT M-INPUT

used full forms and short forms

iptables –table filter –append INPUT –in-interface eno16777736 –protocol tcp –source 172.20.10.3 –dport 22 -m state –state NEW,ESTABLISHED –jump ACCEPT

iptables -t filter -A INPUT -i eno16777736 -p tcp -s 172.20.10.3/24 –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT