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

Как запретить внешний доступ к 127.0.0.1?

Я использую tcp-сокет на 127.0.0.1:9000 для подключения nginx к php5-cgi. Однако я хочу убедиться, что на этот IP-адрес нельзя делать никаких внешних запросов, чтобы ни один злоумышленник не мог скрыть IP и обойти nginx, чтобы делать неприятные вещи с php.

Теперь мне интересно, действительно ли возможно использовать такой эксплойт, и если да, то как я могу избежать этого с помощью iptables?

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

Вы можете создать правило брандмауэра для блокировки этого трафика, но вместо этого гораздо проще включить фильтрацию обратного пути.

(root)$ echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter

Фильтрация обратного пути использует таблицы маршрутизации для фильтрации поддельных адресов во входящих пакетах.

Вы можете включить это по умолчанию для всех интерфейсов, добавив следующее в /etc/systcl.conf:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

Больше информации: http://www.slashroot.in/linux-kernel-rpfilter-settings-reverse-path-filtering

Тем не мение...

Как уже упоминал MadHatter, для 127.0.0.1/8 это совершенно не нужно. (Если вы хотите, вы можете регистрировать эти пакеты, используя net.ipv4.conf.all.log_martians = 1).