CODE |
#!/bin/bash # Пути к файлам FW="/usr/sbin/iptables" LSMODE="/sbin/lsmod" MODPROBE="/sbin/modprobe" # Сетевые интерфейсы (IF_INT "смотрит" в и-нет, IF_LAN - в локалку) IF_INT="eth1" IF_LAN="eth0" IF_LO="lo" # IP-адрес на "внешнем" интерфейсе IP_INT="83.222.31.168" # --- Загрузка модулей --- RESULTS='$LSMOD | grep ip_conntrack_ftp' if [ -z ${RESULTS} ]; then ${MODPROBE} ip_conntrack_ftp fi RESULTS='$LSMOD | grep ip_nat_ftp' if [ -z ${RESULTS} ]; then ${MODPROBE} ip_nat_ftp fi RESULTS='$LSMOD | grep ip_conntrack_irc' if [ -z ${RESULTS} ]; then ${MODPROBE} ip_conntrack_irc fi RESULTS='$LSMOD | grep ip_nat_irc' if [ -z ${RESULTS} ]; then ${MODPROBE} ip_nat_irc fi # --- Очистка цепочек --- ${FW} -t filter --flush ${FW} -t filter --delete-chain ${FW} -t nat --flush ${FW} -t nat --delete-chain # ... и установка правил по умолчанию ${FW} -t filter -P INPUT DROP ${FW} -t filter -P OUTPUT DROP ${FW} -t filter -P FORWARD DROP # Запреты от SYN-атак, флуд-атак и прочей бяки for ip in ${IP_INT} ${IP_WWW} ${IP_LAN}; do ${FW} -t filter -A INPUT -p tcp --syn -d ${ip} --dport ident -j REJECT done for ethX in ${IF_INT} ${IF_LAN}; do ${FW} -t filter -A INPUT -f -p tcp -i ${ethX} -j REJECT done # --- Разрешающие правила --- for ethX in ${IF_LO} ${IF_LAN} ${IF_INT}; do for proto in tcp udp icmp; do ${FW} -t filter -A INPUT -i ${ethX} -p ${proto} -j ACCEPT ${FW} -t filter -A OUTPUT -o ${ethX} -p ${proto} -j ACCEPT ${FW} -t filter -A FORWARD -i ${ethX} -p ${proto} -j ACCEPT ${FW} -t filter -A FORWARD -o ${ethX} -p ${proto} -j ACCEPT done done # --- NAT --- for proto in tcp udp icmp; do ${FW} -t nat -A POSTROUTING -o ${IF_INT} -p ${proto} -j SNAT --to-source ${IP_INT} done # --- Правила для разрешенных пакетов --- for rule in INPUT OUTPUT FORWARD; do ${FW} -t filter -A ${rule} -m state --state ESTABLISHED,RELATED -j ACCEPT done # ...и на последок :) $FW -t filter -A INPUT -j REJECT $FW -t filter -A OUTPUT -j REJECT $FW -t filter -A FORWARD -j REJECT |
QUOTE |
P.S. Не забудь включить ip_forward |