Я использую 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
).