По умолчанию в Ubuntu Server LTS пакет iptables присутствует,  в нем есть одно правило – разрешено абсолютно все. Естественно на сервере это не допустимо! Ниже я расскажу мой способ настройки Iptables с чистого листа.

Создаем в директории – /etc/init.d файл – iptables с таким содержанием

#!/bin/sh
#
# Invoked from /etc/init.d/iptables.
# description: Starts and stops the IPTABLES packet filter \
# used to provide firewall network services.

### BEGIN INIT INFO
# Provides:          Iptables
# Required-Start:     $syslog
# Required-Stop:      $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Run Iptables on boot server
### END INIT INFO

if [ ! -x /sbin/iptables ]; then
exit 0
fi

DATE_RUN=`/bin/date "+%F_%H-%M-%S"`
SAVE_FILE="/etc/network/IPTABLES.office.save/$DATE_RUN.save"
IPTABLES="/sbin/iptables"
IPTABLES_SAVE="/sbin/iptables-save"
IPTABLES_RULES="/etc/network/IPTABLES.office"

start() {

    if [ ! -x $IPTABLES_RULES ]; then
        echo -n "Iptable rule does not exist."; failure; echo
        exit 0
    fi

    echo -n "Starting Firewall: "
    $IPTABLES_RULES

    echo
}

save() {

    echo "Saving firewall rules to $SAVE_FILE"
    echo -n "Progress... "
    $IPTABLES_SAVE --counters > $SAVE_FILE 2>/dev/null

    echo

}

print() {

    $IPTABLES_SAVE --counters

    echo

}

stop() {
    echo -n "Stoping Firewall: "
    $IPTABLES --flush
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F
    $IPTABLES -P INPUT ACCEPT
    $IPTABLES -P OUTPUT ACCEPT
    $IPTABLES -P FORWARD ACCEPT
    # Delete all User-specified chains
    $IPTABLES -X
    #
    # Reset all IPTABLES counters
    $IPTABLES -Z

    echo
}

# See how we were called.
case "$1" in
start)
    stop
    start
    RETVAL=$?
    ;;
stop)
    save
    stop
    RETVAL=$?
    ;;

save)
    save
    RETVAL=$?
    ;;

status)
    status iptables
    RETVAL=$?
    ;;

restart)
    save
    stop
    start
    RETVAL=$?
    ;;

print)
    print
    RETVAL=$?
    ;;

*)
    echo $"Usage: $0 {start|stop|restart|status|save|print}"
    exit 1
    ;;

esac

exit  $RETVAL

# EOF

Делаем его исполняемым.

chmod +x /etc/init.d/iptables

Создаем директорию где будет хранится история изменений в Iptables.

mkdir /etc/network/IPTABLES.office.save

Создаем в директории – /etc/network файл с именем IPTABLES.office, в котором и будут размещаться все наши правила Iptables.

#!/bin/bash
#
#       Iptables cfg
#       Developing by Mihail Belobrov
#       20.09.2011
#
#

IPT="/sbin/iptables"
IPTS="/sbin/iptables-save"
IPTR="/sbin/iptables-restore"


#add modules for ftp
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_tftp
/sbin/modprobe ip_nat_ftp
ANY_IP="0.0.0.0/0"              # произвольный IP-адрес

LOOPBACK_INTERFACE='lo'         # интерфейс обратной петли
LOOPBACK="127.0.0.0/8"          # диапазон IP-адресов обратной петли

# IP address list
OFFICE_LAN="10.0.30.0/24"
OFFICE_WAN="1.1.1.1"
ADMIN_HOME="2.2.2.2"

# LOOPBACK - Unlimited traffic on the loopback interface.
#
$IPT -A INPUT  -i $LOOPBACK_INTERFACE -j ACCEPT
$IPT -A OUTPUT -o $LOOPBACK_INTERFACE -j ACCEPT

###########################################################################################################
#                                       Flood
###########################################################################################################

#Drop fragments packets
#
$IPT -A INPUT      -s $ANY_IP      -f                           -j DROP
$IPT -A FORWARD    -s $ANY_IP      -f                           -j DROP

#Allow SYN connect
#
$IPT -A INPUT      -s $ANY_IP                 -p tcp ! --syn -m state --state NEW   -j DROP
$IPT -A FORWARD    -s $ANY_IP                 -p tcp ! --syn -m state --state NEW   -j DROP

#Drop malformed XMAS packets
#
$IPT -A INPUT      -s $ANY_IP                 -p tcp --tcp-flags ALL ALL            -j DROP
$IPT -A FORWARD    -s $ANY_IP                 -p tcp --tcp-flags ALL ALL            -j DROP

#DROP all NULL packets
#
$IPT -A INPUT      -s $ANY_IP                 -p tcp --tcp-flags ALL NONE           -j DROP
$IPT -A FORWARD    -s $ANY_IP                 -p tcp --tcp-flags ALL NONE           -j DROP

#DROP INVALID packets
$IPT -A INPUT      -s $ANY_IP                 -p ALL -m state --state INVALID           -j DROP
$IPT -A FORWARD    -s $ANY_IP                 -p ALL -m state --state INVALID           -j DROP

#Disable icmp echo-request > 1s
#
$IPT -A INPUT   -s $ANY_IP          -p icmp --icmp-type 8  -m limit --limit 1/s         -j ACCEPT
$IPT -A FORWARD -s $ANY_IP          -p icmp --icmp-type 8  -m limit --limit 1/s         -j ACCEPT

$IPT -A INPUT   -s $ANY_IP         -p icmp --icmp-type 8                                -j DROP
$IPT -A FORWARD -s $ANY_IP         -p icmp --icmp-type 8                                -j DROP

###################################################################################################################################

#################################################################################################################################
# SSH port
#
$IPT -A INPUT -s $OFFICE_LAN                -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -s $ADMIN_HOME               -p tcp --dport 22 -j ACCEPT

$IPT -A INPUT -s $ANY_IP -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "SSH DROP:"
$IPT -A INPUT -s $ANY_IP -p tcp --dport 22 -m state --state NEW -j DROP

######################################################################################################################################
#                                       HTTP
#####################################################################################################################################

$IPT -A INPUT -s $ANY_IP      -p tcp --dport 80 -m state --state NEW -j ACCEPT
$IPT -A INPUT -s $ANY_IP      -p tcp --dport 443 -m state --state NEW -j DROP

##############################################################################################################################################################
#                                       Enable established connections (!!! needed !!!)
############################################################################################################################################################
$IPT -A INPUT -s $ANY_IP                -m state --state ESTABLISHED,RELATED            -j ACCEPT

#############################################################################################################################
# Enabling SNAT (MASQUERADE) functionality
#############################################################################################################################
$IPT -t nat -A POSTROUTING -s $OFFICE_LAN -o eth0 -j MASQUERADE

# Set the default policy of the filter to deny.
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

#
# EOF
#

Добавляем запуск скрипта в /etc/rc.local

#Run Iptables script
/etc/init.d/iptables start

Новые правила добавляем в файле  /etc/network/IPTABLES.office и перезапускаем наподобие Red-Hat дистрибутивов командой

service iptables restart

Правила в приведенном Iptables,  запрещают все что не разрешено, но только на вход. Желательно такие же  добавить на цепочку OUTPUT и  FORWARD.