unix 2012-01-04 21-38-16
Домашний firewall/router через iptables
Настройка скриптовЭти скрипты настраивались для работы с модемом ppp диал-ап, так все 3G юзеры могут скрипты не настраивать.
У нас скрипты установлены в /etc/rc.d/rc.ip_forward
Пожалуйста измените интерфейс ppp0 в этих скриптах на интерфейс, который подключен к интернет.
только для роутера
Измените интерфейс eth0 в этих скриптах на интерфейс, который подключен к вашей локальной сети.
Скрипт для обычной машины
Скопируйте, настройте как описано выше и установите этот скрипт если ваша машина напрямую подключена к сети и использует интернет только она.
# Нолик записывается для того, чтобы убедиться, что ваша машина НЕ является шлюзом. Обычная машина, подключенная к сети НЕ должна быть ни для кого шлюзом, иначе кто-то друго сможет использовать ваш трафик и/или маскироваться под ваш IP!!!
echo 0 > /proc/sys/net/ipv4/ip_forward
# Раскомментируйте строку ниже, если хотите, чтоб даже пинги не проходили в ваш компьютер. Иногда это не удобно, поэтому оставляю закомментироваными.
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Все остальное пусть так и будет - очень долго все описывать
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# Сначала удалим все правила кем-либо созданные.
/usr/sbin/iptables -F INPUT
/usr/sbin/iptables -F FORWARD
/usr/sbin/iptables -F OUTPUT
/usr/sbin/iptables -F -t nat
# На входе в компьютер запретим все, что явно не разрешено.
/usr/sbin/iptables -P INPUT DROP
/usr/sbin/iptables -P FORWARD DROP
# А вот все пакеты которые выходят из компьютера - мы разрешим по умолчанию, т.е. на выход разрешим все то, что явно не запрещено.
/usr/sbin/iptables -P OUTPUT ACCEPT
# Разрешим нас пинговать - у нас пипл.нет валится, если не может нас пинговать :(
/usr/sbin/iptables -A INPUT -i ppp0 -p icmp -m icmp -j ACCEPT
# Разрешим на входе все пакеты, для которых соединение установлено ранее (соединение установили вышедшие пакеты)
/usr/sbin/iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Не забудем разрешить кольцевой буфер, иначе иксы и многие другие программы начнуть ругаться и не запустятся ;)
/usr/sbin/iptables -A INPUT -i lo -j ACCEPT
Скрипт для шлюза
Скопируйте, настройте как описано выше и установите этот скрипт если ваша машина напрямую подключена к сети и/или раздает интернет всей локальной сети.
# Разрешим форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
# Раскомментируйте строку ниже, если хотите, чтоб даже пинги не проходили в ваш компьютер. Иногда это не удобно, поэтому оставляю закомментироваными.
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Все остальное пусть так и будет - очень долго все описывать
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# Сначала удалим все правила кем-либо созданные.
/usr/sbin/iptables -F INPUT
/usr/sbin/iptables -F FORWARD
/usr/sbin/iptables -F OUTPUT
/usr/sbin/iptables -F -t nat
# На входе в компьютер запретим все, что явно не разрешено.
/usr/sbin/iptables -P INPUT DROP
/usr/sbin/iptables -P FORWARD DROP
# А вот все пакеты которые выходят из компьютера - мы разрешим по умолчанию, т.е. на выход разрешим все то, что явно не запрещено.
/usr/sbin/iptables -P OUTPUT ACCEPT
# Разрешим форвард пакетов пришедших из локальной сети и просятся в интернет.
/usr/sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
# Разрешим форвард пакетов пришедших из интернета и просятся в локальную сеть. Но только для тех компьютеров и портов, соединение с которыми было ранее установленным (пакетами ушедшими в интернет из локальной сети)
/usr/sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешим нас пинговать - у нас пипл.нет валится, если не может нас пинговать :(
/usr/sbin/iptables -A INPUT -i ppp0 -p icmp -m icmp -j ACCEPT
# Разрешим на входе все пакеты, для которых соединение установлено ранее (соединение установили вышедшие пакеты)
/usr/sbin/iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешим все, что приходит из локальной сети на роутер (ну там самба или телнет)
/usr/sbin/iptables -A INPUT -i eth0 -j ACCEPT
# Не забудем разрешить кольцевой буфер, иначе иксы и многие другие программы начнуть ругаться и не запустятся ;)
/usr/sbin/iptables -A INPUT -i lo -j ACCEPT