IPTables разрешают только локальный доступ

58

В течение многих лет я изо всех сил пытался получить твердое понимание iptables. Каждый раз, когда я пытаюсь прочитать справочные страницы, мои глаза начинают застекляться.

У меня есть сервис, к которому я хочу разрешить доступ только локальному хосту.

Какие условия (или конфигурацию, если кто-то чувствует себя щедрым) следует использовать в Google, чтобы разрешить только локальному хосту доступ к данному порту?

iptablessuck
источник
2
На каком порту работает эта служба?
Барт Де Вос
44344, услуга написана собственными силами
iptablessuck
1
Я бы хотел временно сменить ник на «iptablesrules», но не могу
Арт Шайдеров
@Art, они только отстой, потому что я их не понимаю :)
iptablessuck
@iptablessuck на самом деле, похоже, я могу. Но я не буду, потому что я не уверен, что смогу изменить это обратно :)
Арт Шайдеров

Ответы:

65

Если под сервисом вы подразумеваете определенный порт, то должны работать следующие две строки. Измените «25» на любой порт, который вы пытаетесь ограничить.

iptables -A INPUT -p tcp -s localhost --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP
Hyppy
источник
1
«Все, что поступает с локального хоста на порт 25, примите», а второе правило гласит «Удалите все, что поступает в порт 25». Первая строка обрабатывается первой, позволяя localhost, а все остальное будет отброшено второй строкой. Да?
iptablessuck
Это правильно!
Hyppy
4
@ Хиппи, как бы ты "отменил" это?
тестер
10
@tester снова введите эти команды, но замените -Aна-D
pepoluan
1
@ Астронавт типа 'sudo service iptables save', чтобы сохранить изменения. затем перезагрузите компьютер. Вы можете проверить, были ли сохранены изменения, набрав 'sudo iptables -L'
Vinayak
30

Я бы порекомендовал:

iptables -A INPUT -i lo -p tcp --dport $APP_PORT -j ACCEPT
iptables -A INPUT -p tcp --dport $APP_PORT -j DROP

Поскольку пакеты с самоадресацией не обязательно имеют 127.0.0.1 в качестве источника, но все они «входят» из loинтерфейса.

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

Наконец, прочитайте много iptablesHOWTO. Практические примеры помогут вам быстро освоить скорость :)

pepoluan
источник
ти! loпоявляется после использования этих команд с последней командой по этой ссылке cyberciti.biz/faq/howto-display-linux-iptables-loaded-rules iptables -L -v -n --line-numbers
2
@Gracchus Я считаю, что намного проще в использовании iptables-save, сохранить вывод в файл, отредактировать его с помощью vimили emacs, и iptables-apply
повторно импортировать
Я думаю, в зависимости от варианта использования, второе правило должно явно ОТКАЗАТЬ, а не отбрасывать молча. Это отброшено молча как лучшая практика? Безопасно ли использовать REJECT?
Мистер Doomsbuster
1
@ tech-pro Да, REJECT безопасен в использовании. Это зависит от того, чего вы пытаетесь достичь, и хотите ли вы быть вежливыми по отношению к людям, пытающимся использовать порт. REJECT отправит обратно пакет TCP RST, сообщая клиенту, что машина работает, но порт закрыт. Если вы закрываете порт, который люди могут законно ожидать использовать, тогда REJECT - это хорошо. Если вы ожидаете только сканеры портов, то DROP лучше.
Закон 29
1
@ x-yuri Например, я запускаю unboundкак DNS-кеш, перед dnscrypt-proxy. unboundсвязывает 127.0.53.1:53и dnscrypt-proxyсвязывает с 127.0.53.2:53. Когда приложение запрашивает unbound или dnscrypt-proxy для разрешения полного доменного имени, угадайте, с какого исходного адреса будет отвечать unbound / dnscrypt-proxy?
pepoluan