Нет параметров в:
$IPT -F
$IPT -X
Перед -p и --dport нет пробелов.
При вашей схеме правил отдельная цепочка (POLICY) представляется лишней.
Помощь в настройке iptables в Slackware 12.2
Проблема оказалась в лишних символах в скрипте, которые появились после редактирования в виндовом редакторе.
Ура Firewall заработал :D и я поумнел на 28 копеек smile, теперь хочу осилить уменьшение количества правил этим путем
for N in $(seq 115 221) ; do
$IPT -A tcp_inbound -s 192.168.$N.0/24 -j ACCEPT
done
for N in $(seq 115 221) ; do
$IPT -A udp_inbound -s 192.168.$N.0/24 -j ACCEPT
done
или установкой ipcalc который взял на slackbuilds.org и который не знаю как установить применительно к моему фаерволлу
поправьте если я не правильно мыслю, если использовать подсказку bormant'а, то скрипт будет выглядеть так
#!/bin/bash
IPT="/usr/sbin/iptables"
IPTS="/usr/sbin/iptables-save"
IPTR="/usr/sbin/iptables-restore"
#flush policy
$IPT -F
$IPT -X
#default policy
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT DROP
#create custom chain
$IPT -N POLICY
# INPUT policy
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -d 127.0.0.1 -j ACCEPT
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p icmp -j ACCEPT
#jump to chain
$IPT -A INPUT -j POLICY
#chain policy
##$IPT -A POLICY -p tcp -m tcp --dport 53 -j ACCEPT
##$IPT -A POLICY -p udp -m udp --dport 53 -j ACCEPT
##$IPT -A POLICY -p tcp -m tcp --dport 22 -j ACCEPT
##$IPT -A POLICY -p tcp -m tcp --dport 80 -j ACCEPT
##$IPT -A POLICY -p tcp -m tcp --dport 443 -j ACCEPT
#dobavit kogo nuzhno, kakie seti ili ip ne ukazani sdes dostupa ne imeut
for N in $(seq 115 221) ; do
$IPT -A POLICY -s 192.168.$N.0/24 -j ACCEPT
done
$IPT -A POLICY -s 10.0.0.0/8 -j DROP
$IPT -A POLICY -s 192.168.0.0/16 -j ACCEPT
Нет параметров в:
$IPT -F
$IPT -X
Перед -p и --dport нет пробелов.
При вашей схеме правил отдельная цепочка (POLICY) представляется лишней.
Пробелы были поправлены, просто тут забыл это сделать.
"отдельная цепочка (POLICY) представляется лишней"
Почему?
$IPT -t nat - X и F
$IPT -t mangle -X и F
Вот эти параметры имелись ввиду?
Вариант с seq 115 221 плох -- пачка правил, через которые придётся гнать пакеты, больше всего будут сажать производительность пакеты из последней сети.
Лучше как уже показывал:
# deaggregated 192.168.115.0 - 192.168.221.255
NET_OK="192.168.115.0/24 192.168.116.0/22 192.168.120.0/21 192.168.128.0/18 192.168.192.0/20 192.168.208.0/21 192.168.216.0/22 192.168.220.0/23"
for N in $NET_OK ; do
$IPT -A POLICY -p ALL -s $N -j ACCEPT
done
Другой, полностью равноценный вариант -- дать список через запятую в ключе -s (--src), эффект ровно тот же, те же самые 8 правил по числу элементов в списке (по крайней мере, так написано в man iptables и легко проверяется).
По INPUT --> POLICY пакеты следуют тупо друг за другом, всё из INPUT переливается в POLICY без исключения, из POLICY возвратов в INPUT нет. То есть линейная структура просто разломана посередине. Единственно, зачем это могло бы быть нужно, вычислять разницу между счётчиками INPUT и POLICY, но для чего может быть полезна эта величина в существующей конструкции -- не представляю.
Про -F и -X -- я ошибся, всё нормально, посмотрел в man-е, параметры действительно необязательные.
Как ставить пакеты со slackbuilds.org -- подробно писал тут: http://linuxforum.ru/viewtopic.php?pid=244078#p244078
То есть линейная структура просто разломана посередине.
а что следовало бы изменить?
подскажите как добавить rc.firewall в автозагрузку после включении интерфейса eth0?
или он и так есть в автозагрузке здесь?
# If there is a firewall script, run it before enabling packet forwarding.
# See the HOWTOs on http://www.netfilter.org/ for documentation on
# setting up a firewall or NAT on Linux. In some cases this might need to
# be moved past the section below dealing with IP packet forwarding.
if [ -x /etc/rc.d/rc.firewall ]; then
/etc/rc.d/rc.firewall start
fiДа, вы процитировали фрагмент из /etc/rc.d/rc.inet2. Для того, чтобы /etc/rc.d/rc.firewall выполнялся при старте ситемы, на нём должен быть установлен атрибут "выполнение". Сделать это несложно, от root-а:
[console]
# chmod a+x /etc/rc.d/rc.firewall
[/console]
Проверить наличие бита с помощью ls:
[console]
% ls -l /etc/rc.d/rc.firewall
[/console]
все сделал как было написано, получилось следющее
[console]-rwxr-xr-x 1 admin users 2219 2012-01-20 12:49 /etc/rc.d/rc.firewall
[/console]
вот еще такой момент я прописал это значение
if [ "$1" = "save" ]
then
echo -n "Saving firewall to /etc/sysconfig/iptables ... "
$IPTS > /etc/sysconfig/iptables
echo "done"
exit 0
elif [ "$1" = "restore" ]
then
echo -n "Restoring firewall from /etc/sysconfig/iptables ... "
$IPTR < /etc/sysconfig/iptables
echo "done"
exit 0
fiно так и не нашел файла и каталога /etc/sysconfig/iptables. это так и должно быть? или сохранить iptables можно в другом месте?
[console]
# ls /etc/sysconfig
/bin/ls: невозможно получить доступ к /etc/sysconfig: Нет такого файла или каталога
[/console]И какого чуда вы от него хотите?
Хотите, чтоб лежал файл с сохранёнными правилами внутри /etc/sysconfig, создайте этот каталог.
Хотите, чтобы лежал в другом месте -- пропишите вывод/загрузку в/из другого места.
Никакой магии, всё честно.
bormant,
подскажи пожалуйста, чтобы добавить защиту от SYN-flood нужны эти значения?
$IPT -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
$IPT -A INPUT -p tcp --syn -j DROPи если да, в эту часть скрипта добавить ?
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p icmp -j ACCEPTПоказать
# IPTables Location
IPT="/usr/sbin/iptables"
IPTS="/usr/sbin/iptables-save"
IPTR="/usr/sbin/iptables-restore"
# Save and Restore arguments handled here
if [ "$1" = "save" ]
then
echo -n "Saving firewall to /etc/rc.d/init.d/iptables ... "
$IPTS > /etc/rc.d/init.d/iptables
echo "done"
exit 0
elif [ "$1" = "restore" ]
then
echo -n "Restoring firewall from /etc/rc.d/init.d/iptables ... "
$IPTR < /etc/rc.d/init.d/iptables
echo "done"
exit 0
fi
#flush policy
$IPT -F
$IPT -X
#default policy
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT DROP
#create custom chain
$IPT -N POLICY
# INPUT policy
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -d 127.0.0.1 -j ACCEPT
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p icmp -j ACCEPT
#jump to chain
$IPT -A INPUT -j POLICY
#chain policy
##$IPT -A POLICY -p tcp -m tcp --dport 53 -j ACCEPT
##$IPT -A POLICY -p udp -m udp --dport 53 -j ACCEPT
##$IPT -A POLICY -p tcp -m tcp --dport 22 -j ACCEPT
##$IPT -A POLICY -p tcp -m tcp --dport 80 -j ACCEPT
##$IPT -A POLICY -p tcp -m tcp --dport 443 -j ACCEPT
#dobavit kogo nuzhno, kakie seti ili ip ne ukazani sdes dostupa ne imeut
#deaggregated 192.168.115.0 - 192.168.221.255
$IPT -A POLICY -s 10.116.15.192/30 -j ACCEPT
$IPT -A POLICY -s 10.116.15.196/31 -j ACCEPT
$IPT -A POLICY -s 10.60.15.155/32 -j ACCEPT
NET_OK="192.168.115.0/24 192.168.116.0/22 192.168.120.0/21 192.168.128.0/18 192.168.192.0/20 192.168.208.0/21 192.168.216.0/22 192.168.220.0/23 192.168.221.0/32"
for N in $NET_OK ; do
$IPT -A POLICY -p ALL -s $N -j ACCEPT
done
после перезагрузки правила iptables так и не восстанавливаются :( приходится заново запускать rc.firewall а затем iptables-save
[console]
# ls -l /etc/rc.d/rc.firewall
-rwxr-xr-x 1 root root 28562 2011-09-19 07:53 /etc/rc.d/rc.firewall
# grep /rc.firewall /etc/rc.d/rc.inet2
if [ -x /etc/rc.d/rc.firewall ]; then
/etc/rc.d/rc.firewall start
# ls -l /etc/rc.d/rc.inet2
-rwxr-xr-x 1 root root 4914 2010-11-11 12:30 /etc/rc.d/rc.inet2
# grep rc.inet2 /etc/rc.d/rc.M
if [ -x /etc/rc.d/rc.inet2 ]; then
. /etc/rc.d/rc.inet2
# grep -F /rc.M /etc/inittab
rc:2345:wait:/etc/rc.d/rc.M
[/console]
При старте системы запускается init, который читает inittab, на 2345 уровнях запуска стартует /etc/rc.d/rc.M, который при наличии атрибута исполнения запускает /etc/rc.d/rc.inet2, который при наличии атрибута исполнения запускает /etc/rc.d/rc.firewall start.
"rc.firewall save" и "rc.firewall restore" в системных скриптах изначально не используются.
Проверяйте, что у вас не так.
ввел представленные выше команды, результат следующий
[console]# ls -l /etc/rc.d/rc.firewall
-rwxr-xr-x 1 admin users 2385 2012-01-26 12:56 /etc/rc.d/rc.firewall
# grep /rc.firewall /etc/rc.d/rc.inet2
if [ -x /etc/rc.d/rc.firewall ]; then
/etc/rc.d/rc.firewall start
# grep /rc.firewall /etc/rc.d/rc.inet2
if [ -x /etc/rc.d/rc.firewall ]; then
/etc/rc.d/rc.firewall start
# ls -l /etc/rc.d/rc.inet2
-rwxr-xr-x 1 root root 4847 2007-09-18 02:07 /etc/rc.d/rc.inet2
# grep rc.inet2 /etc/rc.d/rc.M
if [ -x /etc/rc.d/rc.inet2 ]; then
. /etc/rc.d/rc.inet2
# grep -F /rc.M /etc/inittab
rc:2345:wait:/etc/rc.d/rc.M
[/console]
и в скрипе я вроде указал что и откуда брать
# Save and Restore arguments handled here
if [ "$1" = "save" ]
then
echo -n "Saving firewall to /etc/rc.d/init.d/iptables ... "
$IPTS > /etc/rc.d/init.d/iptables
echo "done"
exit 0
elif [ "$1" = "restore" ]
then
echo -n "Restoring firewall from /etc/rc.d/init.d/iptables ... "
$IPTR < /etc/rc.d/init.d/iptables
echo "done"
exit 0
fi
Ваш скрипт содержит действия только на "save" и "restore", но не содержит реакции на "start".
При старте машины вызывается /etc/rc.d/rc.firewall с параметром "start", при таком вызове ваш скрипт ничего не делает (если он тут приведён целиком).
if [ "$1" = "save" ] # "start" = "save"? нет
elif [ "$1" = "restore" ] # "start" = "restore"? нет
fi
А как уже говорил выше
"rc.firewall save" и "rc.firewall restore" в системных скриптах изначально не используются.
Что делать - решать вам. Можно поправить /etc/rc.d/rc.inet2 на предмет вызова с параметром "restore" вместо start. Можно поправить скрипт, дописав реакцию на start как на restore. Можно ещё что угодно. Но решать вам.
Не слушай их. Из 4-5 графических настройщиков файерволов самый доходчивый оказался kguarddog.
Файервол в Юниксе должен быть обязательно!
Зайди на фтр сайт ftp://nobody:nobody@109.87.162.170/pub/linux/kguarddog/kguarddog-2.5-i486-1.tgz скачай и установи.
Он требует qt3. Версия 2.6 изменила знак галок.
SOS!
Подскажите как правильно написать логирование, чтобы там были записи о всех резаных пакетах?
Я так понял, что нужно прописать это
[console]iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "INPUT packet: " [/console]
и что нужно добавить в syslog-ng.conf?
сам скрипт ниже
Показать
# rc.firewall script started
firewall_start() {
if [ -x /etc/rc.d/rc.firewall ]; then
echo "Starting rc.firewall: /etc/rc.d/rc.firewall"
. /etc/rc.d/rc.firewall start
fi
}
# IPTables Location
IPT="/usr/sbin/iptables"
IPTS="/usr/sbin/iptables-save"
IPTR="/usr/sbin/iptables-restore"
# Save and Restore arguments handled here cat /etc/rc.d/init.d/iptables
if [ "$1" = "save" ]
then
echo -n "Saving firewall to /etc/rc.d/init.d/iptables ... "
$IPTS > /etc/rc.d/init.d/iptables
echo "done"
exit 0
elif [ "$1" = "restore" ]
then
echo -n "Restoring firewall from /etc/rc.d/init.d/iptables ... "
$IPTR < /etc/rc.d/init.d/iptables
echo "done"
exit 0
fi
# flush policy
$IPT -F
$IPT -X
# default policy
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT DROP
# create custom chain
$IPT -N POLICY
# INPUT policy
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -d 127.0.0.1 -j ACCEPT
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p icmp -j ACCEPT
# jump to chain
$IPT -A INPUT -j POLICY
# chain policy
#$IPT -A POLICY -p tcp -m tcp --dport 53 -j ACCEPT
#$IPT -A POLICY -p udp -m udp --dport 53 -j ACCEPT
#$IPT -A POLICY -p tcp -m tcp --dport 22 -j ACCEPT
#$IPT -A POLICY -p tcp -m tcp --dport 80 -j ACCEPT
#$IPT -A POLICY -p tcp -m tcp --dport 443 -j ACCEPT
# dobavit kogo nuzhno, kakie seti ili ip ne ukazani sdes dostupa ne imeut
# deaggregated 192.168.115.0 - 192.168.221.255
$IPT -A POLICY -s 10.116.15.192/30 -j ACCEPT
$IPT -A POLICY -s 10.116.15.196/31 -j ACCEPT
$IPT -A POLICY -s 10.60.15.155/32 -j ACCEPT
$IPT -A POLICY -s 10.60.16.37/32 -j ACCEPT
$IPT -A POLICY -s 192.168.38.137/32 -j ACCEPT
$IPT -A POLICY -s 192.168.15.62/32 -j ACCEPT
NET_OK="192.168.115.0/24 192.168.116.0/22 192.168.120.0/21 192.168.128.0/18 192.168.192.0/20 192.168.208.0/21 192.168.216.0/22 192.168.220.0/23 192.168.221.0/32"
for N in $NET_OK ; do
$IPT -A POLICY -p ALL -s $N -j ACCEPT
done
# Включить перенаправление пакетов через ядро
echo "1" > /proc/sys/net/ipv4/ip_forward