По умолчанию в 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.