Re: iptables
On Fri, May 26, 2006 at 11:44:35PM +0300, sly mAd wrote:
> здарова народ.
> извините за глупый вопрос(самому аж стыдно:))
> как в debain sarge запустить iptables?
> всё поставлено(по умолчанию стаяло)
>
> в /etc/init.d/ нет и намёка на iptables
Если ты про настройку файрвола, то здесь есть несколько возможностей.
Во-первых, в дистрибутиве есть пакеты (fiaif, например), выполняющие
эту задачу. Во-вторых, всегда можно написать скрипт самому и добавить его в
/etc/init.d/ Второй путь, на мой взгляд, наиболее естественный и простой.
Вообще,
$ apt-cache search firewall
покажет тебе, что есть в дистрибутиве на тему файрволов.
Если писать скрипт самому, то предварительно, конечно, надо изучить
документацию к iptables. Ищи в /usr/share/doc/iptables.
В качестве примера прилагаю свой скрипт. Он для машины (оне не роутер),
которая подключена к локальной сети через eth0 и ходит в интернет через ppp0.
Управляется файрвол командами
# /etc/init.d/firewall { start | stop | restart }
как и другие скрипты из /etc/init.d/.
При загрузке скрипт вызывается из /etc/init.d/networking для чего я добавил
туда нужные команды. На всякий случай, цепляю его тоже. Помнится, я его тоже
правил довольно заметно, так что он не чисто дистрибутивный.
--
Cтанислав
#! /bin/sh
#
# firewall Firewall initialization script
#
# Author: Stanislav Maslovski <stas@shota.mine.nu>
#
# Version: 0.1 16-April-2005
CMD=/sbin/iptables
test -x $CMD || exit 0
#
# Function that starts firewalling
#
d_start() {
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
TORRENT=7881:7999
VALKNUT=9176
USER=30000:30100
# default behaviour
POLICY="$CMD -P"
$POLICY INPUT DROP
$POLICY FORWARD DROP
# filter table
NEWCHAIN="$CMD -t filter -N"
ADDTO="$CMD -t filter -A"
$NEWCHAIN tcpsyn
$ADDTO tcpsyn -m state --state NEW -m limit --limit 1/s -j ACCEPT
$ADDTO tcpsyn -m limit -j LOG
$ADDTO tcpsyn -j DROP
$NEWCHAIN p2p
$ADDTO p2p -p TCP --dport $TORRENT -j tcpsyn
$ADDTO p2p -p TCP --dport $VALKNUT -j tcpsyn
$ADDTO p2p -p UDP --dport $VALKNUT -j ACCEPT
$ADDTO p2p -p TCP --dport $USER -j tcpsyn
$ADDTO p2p -p UDP --dport $USER -j ACCEPT
$NEWCHAIN daemon
$ADDTO daemon -p TCP --dport ssh -j tcpsyn
$ADDTO daemon -p TCP --dport ftp-data:ftp -j tcpsyn
$ADDTO daemon -p TCP --dport auth -j tcpsyn
$NEWCHAIN inet
$ADDTO inet -j p2p
$ADDTO inet -j DROP
$NEWCHAIN lan
$ADDTO lan -j p2p
$ADDTO lan -j daemon
$ADDTO lan -j DROP
$ADDTO INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ADDTO INPUT -i eth+ -j lan
$ADDTO INPUT -i ppp+ -j inet
$ADDTO INPUT -i lo -j ACCEPT
# mangle table
NEWCHAIN="$CMD -t mangle -N"
ADDTO="$CMD -t mangle -A"
$NEWCHAIN settos
$ADDTO settos -p UDP --dport domain -j TOS --set-tos Minimize-Delay
$ADDTO settos -p TCP --dport www -j TOS --set-tos Minimize-Delay
$ADDTO settos -p TCP --sport $TORRENT -j TOS --set-tos Minimize-Cost
$ADDTO settos -p TCP --dport $TORRENT -j TOS --set-tos Minimize-Cost
$ADDTO OUTPUT -j settos
}
#
# Function that stops firewalling
#
d_stop() {
$CMD -t filter -F
$CMD -t filter -X
$CMD -t mangle -F
$CMD -t mangle -X
rmmod ipt_state ip_conntrack_ftp ip_conntrack_irc ip_conntrack
rmmod ipt_LOG
rmmod ipt_limit iptable_filter ipt_TOS iptable_mangle ip_tables
}
case "$1" in
start)
echo "Starting firewall..."
d_start
;;
stop)
echo "Stopping firewall..."
d_stop
;;
restart|force-reload)
echo "Restarting firewall..."
d_stop
sleep 1
d_start
;;
*)
echo "Usage: firewall {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
#!/bin/sh
#
# manage network interfaces and configure some networking options
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
if ! [ -x /sbin/ifup ]; then
exit 0
fi
spoofprotect_rp_filter () {
# This is the best method: turn on Source Address Verification and get
# spoof protection on all current and future interfaces.
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
return 0
else
return 1
fi
}
spoofprotect () {
echo -n "Setting up IP spoofing protection: "
if spoofprotect_rp_filter; then
echo "rp_filter."
else
echo "FAILED."
fi
}
ip_forward () {
if [ -e /proc/sys/net/ipv4/ip_forward ]; then
echo -n "Enabling packet forwarding..."
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "done."
fi
}
syncookies () {
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
echo -n "Enabling TCP/IP SYN cookies..."
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "done."
fi
}
no_redirects () {
if [ -e /proc/sys/net/ipv4/conf/all/accept_redirects ]; then
echo -n "Not accepting ICMP redirects..."
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done
echo "done."
fi
if [ -e /proc/sys/net/ipv4/conf/all/send_redirects ]; then
echo -n "Not sending ICMP redirects..."
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
echo 0 > $f
done
echo "done."
fi
}
no_source_routed () {
if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
echo -n "Disabling source routed packets..."
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
echo "done."
fi
}
harden_icmp () {
if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
echo -n "Ignoring ICMP broadcasts..."
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "done."
fi
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
echo -n "Ignoring bogus ICMP error responses..."
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "done."
fi
}
log_martians () {
if [ -e /proc/sys/net/ipv4/conf/all/log_martians ]; then
echo -n "Enabling logging of strange packets..."
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 1 > $f
done
echo "done."
fi
}
doopt () {
optname=$1
default=$2
opt=`grep "^$optname=" /etc/network/options`
if [ -z "$opt" ]; then
opt="$optname=$default"
fi
optval=${opt#$optname=}
if [ "$optval" = "yes" ]; then
eval $optname
fi
}
case "$1" in
start)
doopt spoofprotect yes
doopt syncookies no
doopt ip_forward no
doopt no_redirects yes
doopt no_source_routed yes
doopt harden_icmp yes
doopt log_martians yes
/etc/init.d/firewall start
echo -n "Configuring network interfaces..."
ifup -a
echo "done."
;;
stop)
if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
grep -q "^/ nfs$"; then
echo "NOT deconfiguring network interfaces: / is an NFS mount"
elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
grep -q "^/ smbfs$"; then
echo "NOT deconfiguring network interfaces: / is an SMB mount"
elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts |
grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
echo "NOT deconfiguring network interfaces: network shares still mounted."
else
echo -n "Deconfiguring network interfaces..."
ifdown -a --exclude=lo
echo "done."
/etc/init.d/firewall stop
fi
;;
force-reload|restart)
doopt spoofprotect yes
doopt syncookies no
doopt ip_forward no
doopt no_redirects yes
doopt no_source_routed yes
doopt harden_icmp yes
doopt log_martians yes
echo -n "Reconfiguring network interfaces..."
ifdown -a --exclude=lo
/etc/init.d/firewall restart
ifup -a
echo "done."
;;
*)
echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
Reply to:
- References:
- iptables
- From: "sly mAd" <sly_mad@bk.ru>