Как демонстрирует Жиль, концепция выглядит следующим образом: добавьте правила ACCEPT для каждой конкретной вещи, которую вы хотите разрешить, будь то по IP-адресу источника или другим квалификациям, а затем установите политику по умолчанию REJECT.
Сначала обработайте состояния, которые мы знаем, что мы хотим принять или отбросить, и интерфейсы.
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, безусловно, вызовет проблемы для определенных приложений.
Я пробовал обе установки, и 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-атаку.
Приведенное ниже правило разрешает только ваш IP-адрес и блокирует все другие IP-адреса через порт 22 или ssh. Проверьте с новым терминалом перед отключением.
спасибо за краткий ответ. Как бы это изменилось, если я хочу разрешить несколько IP-адресов и диапазонов IP-адресов. На месте yourIPaddressя мог бы добавить несколько IP - адреса и диапазоны? И если я использую SSH на нестандартном порту, таком как 2888, то 22в вашем примере команда изменится на 2288? Кроме того, это также заблокирует rsync, sftp и т. Д. Для этого сервера со всех IP-адресов, кроме разрешенных?
PKHunter
1
Обратите внимание, что -p tcpэто важно здесь, потому --dportчто не работает без него. Я бы также предложил использовать -j REJECTвместо, DROPпотому что REJECTделает порт идентичным закрытому порту и DROPделает пакеты, предназначенные для этого порта, черными дырами. На практике удаленный злоумышленник может обнаружить DROPнастроенные порты из фактически закрытых портов.
Микко Ранталайнен,
0
Вот полный рабочий пример.
Также заставляет приложения работать (мой комментарий о том, что keepass не запускается)
Ответы:
Я написал пост в блоге об основных правилах Iptables для пользователя настольного компьютера, и вам, вероятно, стоит прочитать его и связанную с ним статью о разработке межсетевого экрана Stateful . Но до ядра 2.6.39 (которое включает
ipset
и вы можете использовать его для белых IP-адресов, если у вас есть более 10 в белый список (где 10 произвольно)).Сначала обработайте состояния, которые мы знаем, что мы хотим принять или отбросить, и интерфейсы.
Если вы хотите разрешить только по IP, без указания состояния
хотя вы, вероятно, столкнетесь с проблемами при этом, и я предлагаю использовать состояние, чтобы облегчить вашу жизнь. Например, не разрешать
-i lo
и-o lo
, безусловно, вызовет проблемы для определенных приложений.источник
iptables -F
это, я должен очистить все правила, даже не могу пропинговать ubuntu.comВот (непроверенный!) Пример, который блокирует только входящие соединения. Разрешены соединения через интерфейс обратной связи, поступающие из 192.168.3.x, ICMP или к порту SSH. Все остальные соединения отклоняются.
источник
lo
в приведенном выше примере исключается из состояния соответствия и всегда разрешено.Приведенное ниже правило разрешает только ваш IP-адрес и блокирует все другие IP-адреса через порт 22 или ssh. Проверьте с новым терминалом перед отключением.
источник
yourIPaddress
я мог бы добавить несколько IP - адреса и диапазоны? И если я использую SSH на нестандартном порту, таком как 2888, то22
в вашем примере команда изменится на2288
? Кроме того, это также заблокирует rsync, sftp и т. Д. Для этого сервера со всех IP-адресов, кроме разрешенных?-p tcp
это важно здесь, потому--dport
что не работает без него. Я бы также предложил использовать-j REJECT
вместо,DROP
потому чтоREJECT
делает порт идентичным закрытому порту иDROP
делает пакеты, предназначенные для этого порта, черными дырами. На практике удаленный злоумышленник может обнаружитьDROP
настроенные порты из фактически закрытых портов.Вот полный рабочий пример.
Также заставляет приложения работать (мой комментарий о том, что keepass не запускается)
https://github.com/skironDotNet/linux-allow-only-single-ip
источник