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