Как мне разрешить определенные 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 не запускается)