Как мне разрешить определенные ips и заблокировать все остальные соединения в iptables?
Как мне разрешить определенные ips и заблокировать все остальные соединения в iptables?
Ответы:
Я написал пост в блоге об основных правилах 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, безусловно, вызовет проблемы для определенных приложений.
iptables -Fэто, я должен очистить все правила, даже не могу пропинговать ubuntu.com
Вот (непроверенный!) Пример, который блокирует только входящие соединения. Разрешены соединения через интерфейс обратной связи, поступающие из 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
loв приведенном выше примере исключается из состояния соответствия и всегда разрешено.
Приведенное ниже правило разрешает только ваш IP-адрес и блокирует все другие IP-адреса через порт 22 или ssh. Проверьте с новым терминалом перед отключением.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddressя мог бы добавить несколько IP - адреса и диапазоны? И если я использую SSH на нестандартном порту, таком как 2888, то 22в вашем примере команда изменится на 2288? Кроме того, это также заблокирует rsync, sftp и т. Д. Для этого сервера со всех IP-адресов, кроме разрешенных?
-p tcpэто важно здесь, потому --dportчто не работает без него. Я бы также предложил использовать -j REJECTвместо, DROPпотому что REJECTделает порт идентичным закрытому порту и DROPделает пакеты, предназначенные для этого порта, черными дырами. На практике удаленный злоумышленник может обнаружить DROPнастроенные порты из фактически закрытых портов.
Вот полный рабочий пример.
Также заставляет приложения работать (мой комментарий о том, что keepass не запускается)