Полезные примеры
У меня есть коммутируемое PPP соединение (-i ppp0). При каждой PPP-сессии я скачиваю новости (-p TCP -s news.virtual.net.au nntp) и почту (-p TCP -s mail.virtual.net.au pop-3). Для обновления пакетов Debian я регулярно использую FTP-метод (-p TCP -y -s ftp.debian.org.au ftp-data). По web я брожу через прокси моего ISP (-p TCP -d proxy.virtual.net.au 8080), но ненавижу doubleclick.net на Dilbert Archive (-p TCP -y -d 199.95.207.0/24 и -p TCP -y -d 199.95.208.0/24).
Меня не беспокоят люди, заходящие на мой ftp пока я в Сети (-p TCP -d $LOCALIP ftp), но мне не нравится, когда кто-то притворяется, что он из моей внутренней сети (-s 192.168.1.0/24). Это обычно называется IP spoofing (спуфингом), и для защиты от него в ядрах 2.1.х и выше существуют лучшие способы: см. ``Как мне установить защиту от IP спуфинга?''.
Эта установка довольно проста, потому что в моей внутренней сети в настоящее время нет никаких других машин.
Я не хочу, чтобы любой локальный процесс (то есть Netscape, lynx и т.д.) подсоединялся к doubleclick.net:
# ipchains -A output -d 199.95.207.0/24 -j REJECT # ipchains -A output -d 199.95.208.0/24 -j REJECT #
Теперь я хочу установить приоритеты для различных исходящих пакетах (для входящих пакетов это делать бессмысленно). Так как этих правил много, то имеет смысл поместить их всех в одну цепочку по имени ppp-out.
# ipchains -N ppp-out # ipchains -A output -i ppp0 -j ppp-out #
Минимальная задержка для web и telnet.
# ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0x01 0x10 # ipchains -A ppp-out -p TCP -d 0.0.0.0 telnet -t 0x01 0x10 #
Низкая цена для ftp-data, nntp, pop-3:
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02 # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02 # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02 #
Имеется несколько ограничений на пакеты, приходящие на интерфейс ppp0: давайте создадим цепочку "ppp-in":
# ipchains -N ppp-in # ipchains -A input -i ppp0 -j ppp-in #
Теперь, никакие пакеты, приходящие на ppp0 не должны быть из сети 192.168.1.*, так что мы регистрируем их и отбрасываем:
# ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY #
Я разрешаю входящие UDP пакеты для DNS (у меня стоит кэширующий сервер имен, который пересылает все запросы к 203.29.16.1, так что я ожидаю ответы DNS только от них), входящие пакеты ftp, и только ответные пакеты ftp-data (которые должны идти только на порту с номером больше 1023, и не на портах X11 в районе примерно 6000).
# ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT # ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT # ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT # ipchains -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT #
В заключение, даем добро для передачи от локального хоста к локальному хосту:
# ipchains -A input -i lo -j ACCEPT #
Теперь, моя заданная по умолчанию сполитика на цепочке input - DENY, так что все неподошедшее под условия правил цепочки выбрасывается:
# ipchains -P input DENY #
ОБРАТИТЕ ВНИМАНИЕ: я не располагаю мои цепочки в этом порядке, поскольку в то время, пока я их настраиваю, могли прийти пакеты. Самая надежная политика - сперва назначить DENY, а затем вставлять правила. Конечно, если ваши правила требуют поиска DNS для преобразования имен, то вы можете столкнуться с проблемами.