iptables: разрешить определенные ips и заблокировать все остальные соединения

26

Как мне разрешить определенные ips и заблокировать все остальные соединения в iptables?

Дэвид
источник
Как демонстрирует Жиль, концепция выглядит следующим образом: добавьте правила ACCEPT для каждой конкретной вещи, которую вы хотите разрешить, будь то по IP-адресу источника или другим квалификациям, а затем установите политику по умолчанию REJECT.
Калеб

Ответы:

27

Я написал пост в блоге об основных правилах Iptables для пользователя настольного компьютера, и вам, вероятно, стоит прочитать его и связанную с ним статью о разработке межсетевого экрана Stateful . Но до ядра 2.6.39 (которое включает ipsetи вы можете использовать его для белых IP-адресов, если у вас есть более 10 в белый список (где 10 произвольно)).

Сначала обработайте состояния, которые мы знаем, что мы хотим принять или отбросить, и интерфейсы.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Если вы хотите разрешить только по IP, без указания состояния

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

хотя вы, вероятно, столкнетесь с проблемами при этом, и я предлагаю использовать состояние, чтобы облегчить вашу жизнь. Например, не разрешать -i loи -o lo, безусловно, вызовет проблемы для определенных приложений.

xenoterracide
источник
4
Вместо DROP вам следует ОТКАЗАТЬ нежелательные пакеты, потому что это значительно упрощает диагностику и предотвращает тайм-ауты. См. Отклонить IP-пакеты с ошибкой ICMP или просто отбросить их?
Жиль "ТАК - перестань быть злым"
Я пробовал обе установки, и KeePass2 не запускается, понимаете? Кроме того, если я сделаю iptables -Fэто, я должен очистить все правила, даже не могу пропинговать ubuntu.com
Pawel Cioch
@PawelCioch, зачем KeePass2 все равно нужно подключение к интернету?
Алекс
@ Алекс для хранения файла БД в удаленном месте, это я хочу один IP. Но я разобрался со всем, установка сложнее, чем пример здесь
Pawel Cioch
10

Вот (непроверенный!) Пример, который блокирует только входящие соединения. Разрешены соединения через интерфейс обратной связи, поступающие из 192.168.3.x, ICMP или к порту SSH. Все остальные соединения отклоняются.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
Жиль "ТАК - перестань быть злым"
источник
Чтобы правильно использовать состояния RELATED и ESTABLISHED, вам нужно сопоставить исходный пакет как состояние NEW. loв приведенном выше примере исключается из состояния соответствия и всегда разрешено.
penguin359
@ penguin359: Не могли бы вы рассказать, зачем нужен NEW? Я далеко не эксперт по iptables, я частично скопировал эти правила со своего домашнего роутера, что не совпадает с NEW. Насколько я понимаю, все, что осталось после первого правила, это НОВЫЕ (или НЕ ОБНАРУЖЕННЫЕ) пакеты в любом случае. (Если я слишком далеко от истины , и вы не можете объяснить в комментариях, размещать свои версии с объяснениями , как ответ , и я буду удалять мой.)
Жиля SO- перестать быть злым »
@Gilles Я всегда сбрасываю состояние INVALID перед тем, как что-либо принимать ... что делает что-либо не INVALID, RELATED, ESTABLISHED, должно быть NEW. Но я не знаю причин, по которым все остальное должно указывать NEW. Теоретически, если вы не обрабатываете INVALID и не указываете NEW, вы можете в конечном итоге принять INVALID. Но после обработки INVALID мне кажется, что проверка состояния NEW для каждого правила просто требует дополнительной обработки пакета.
ксенотеррацид
@Gilles также политика отклонения по умолчанию является плохой, потому что он отправляет пакет отклонения для каждого полученного пакета, это составляет DOS-атаку.
ксенотеррацид
@xenoterracide: Хороший вопрос. Должен ли когда-либо использоваться REJECT? Я спросил: Отклонить IP-пакеты с ошибкой ICMP или просто отбросить их?
Жиль "ТАК - прекрати быть злым"
7

Приведенное ниже правило разрешает только ваш IP-адрес и блокирует все другие IP-адреса через порт 22 или ssh. Проверьте с новым терминалом перед отключением.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
Иштияк Ноори
источник
3
спасибо за краткий ответ. Как бы это изменилось, если я хочу разрешить несколько IP-адресов и диапазонов IP-адресов. На месте yourIPaddressя мог бы добавить несколько IP - адреса и диапазоны? И если я использую SSH на нестандартном порту, таком как 2888, то 22в вашем примере команда изменится на 2288? Кроме того, это также заблокирует rsync, sftp и т. Д. Для этого сервера со всех IP-адресов, кроме разрешенных?
PKHunter
1
Обратите внимание, что -p tcpэто важно здесь, потому --dportчто не работает без него. Я бы также предложил использовать -j REJECTвместо, DROPпотому что REJECTделает порт идентичным закрытому порту и DROPделает пакеты, предназначенные для этого порта, черными дырами. На практике удаленный злоумышленник может обнаружить DROPнастроенные порты из фактически закрытых портов.
Микко Ранталайнен,