Назад | Перейти на главную страницу

Мои iptables в безопасности?

У меня это в моем rc.local на моем новом сервере Ubuntu:

iptables -F

iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 9418 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 5000 -m state --state NEW,ESTABLISHED -j ACCEPT # Heroku
iptables -A INPUT -i eth0 -p tcp --sport 5000 -m state --state ESTABLISHED -j ACCEPT # Heroku

iptables -A INPUT -p udp -s 74.207.242.5/32 --source-port 53 -d 0/0 --destination-port 1024:65535 -j ACCEPT
iptables -A INPUT -p udp -s 74.207.241.5/32 --source-port 53 -d 0/0 --destination-port 1024:65535 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P FORWARD DROP

9418 - это порт Git. 5000 - это порт, используемый для управления приложениями Heroku. И 74.207.242.5 и 74.207.241.5 наши DNS-серверы.

Вы думаете, что это безопасно? Вы видите здесь какие-нибудь дыры?

Обновить: Почему так важно блокировать ВЫХОД? Эта машина будет использоваться только мной.

Единственная серьезная дыра, которую я вижу, - это IPv6. Тебе понадобиться ip6tables для этого. Если какая-либо из ваших служб прослушивает IPv6 (а многие из них, включая ssh, по умолчанию прослушивают IPv6), злоумышленник может использовать это, чтобы полностью обойти все указанные вами правила. Сети будут использовать IPv6 вместо IPv4, когда он доступен.

Предполагая, что ваш OUTPUT политика DROP, вы довольно хорошо ограничили IPv4.

Пропуск RELATED опция может означать, что вы получаете тайм-аут, а не мгновенные отказы, когда служба выходит из строя и перестает слушать, как я понимаю TCP RST пакеты ни NEW или ESTABLISHED в контексте.


Чтобы ответить на обновленную информацию по вашему вопросу: когда это не используется только вами.

Независимо от того, насколько мы все осторожны, всегда остается вероятность того, что мы что-то упустили или на мгновение проявили небрежность и позволили кому-то другому в какой-то мере контролировать нашу коробку. Первое, что злоумышленник сделает после того, как у него возникнет проблема, - это загрузить комплект для повышения привилегий, руткит, свою систему управления и контроля и все, что он действительно хочет запустить на компьютере. Ограничение исходящих подключений означает, что они не могут загрузить этот комплект для повышения привилегий, что означает, что они застряли в работе как пользователь Apache или пользователь Git или что-то еще, что им удалось атаковать. Без прав суперпользователя они не могут скрыться и не могут модифицировать брандмауэр. Это не остановит нападающего навсегда, но может остановить его на достаточно долгое время, чтобы вы заметили, что он там, или достаточно расстроить его, чтобы он сдался и ушел куда-нибудь попроще.

Приведенные выше правила означают, что атака с удаленным включением файлов будет работать только в том случае, если удаленный файл размещен на SSL. Если вы поместите прокси-сервер между этим полем и Интернетом и разрешите ему только определенные шаблоны URL-адресов, вы можете остановить RFI, сохраняя при этом нормальную работу. Это глубокая защита.

В дополнение к комментариям других парней о пропавших без вести OUTPUT цепочка и повторяется ESTABLISHED rules, вы можете ограничить протоколы, такие как SSH (TCP / порт 22), определенными IP-адресами, если это применимо.

Чтобы проверить свою настройку, вы можете попробовать NMAP проверить наличие открытых портов. Это может быть более полезно, если ваши правила брандмауэра усложняются.

Вы должны запустить скрипт из строки предварительной настройки в / etc / network / interfaces (см. man 5 interfaces), чтобы правила брандмауэра действовали ДО того, как сеть станет доступной и службы будут запущены. rc.local запускается в последнюю очередь, поэтому возникает ненужный промежуток времени, когда что-то не защищено.

Также разумно иметь в виду, что такие вещи, которые вы делаете, не являются какой-то волшебной пулей. Если вы просматриваете другие службы, но пытаетесь предотвратить доступ к ним, вам не следует запускать их в первую очередь. Если идея состоит в том, чтобы предотвратить доступ к службам, которые вы не собираетесь запускать, это означает, что на вашей машине уже есть ненадежные люди? В этом случае вы уже проиграли, и можно с уверенностью предположить, что в тот момент, когда у вас есть злоумышленники, запускающие код на вашем компьютере, правила вашего брандмауэра также могут быть изменены.

я с открытым кодом iptables-шаблон несколько дней назад на github. По сути, это хороший набор предопределенных iptable-rules, и он подробно прокомментирован.

возможно, использование и чтение могут помочь вам