В этой статье, мы собираемся показать вам, как настроить брандмауэр с IPTables на Linux VPS под управлением Ubuntu или CentOS в качестве операционной системы. Iptables является инструментом администрирования для фильтрации IPv4 пакетов и NAT, и используется для создания и управления таблицами правил фильтрации пакетов IPv4 в ядре Linux.
Правильная настройка и настройка брандмауэра является одним из наиболее важных вещей, которые вы должны сделать, чтобы защитить сервер.
В IPTables, определены несколько различных таблиц соответствия пакетов и каждая таблица может содержать несколько встроенных цепей, а также некоторые цепочки, определенных пользователем. Цепи на самом деле списки правил, которые соответствуют набору пакетов и каждое правило определяет, что делать с согласованным пакетом.
Таблицей по умолчанию является таблица filter
и содержит встроенные цепи INPUT, FORWARD, and OUTPUT. Цепь INPUT используется для пакетов, предназначенных для локальных сокетов, цепь FORWARD используется для пакетов, маршрутизируемых через локальный сокет, а цепь OUTPUT используются для локально-генерируемых пакетов.
Подключитесь к серверу через SSH и откройте список правил, определенных в конкретной цепи, используя следующий синтаксис:
sudo iptables -L CHAIN
Замените Chain на одной из встроенных цепочек, чтобы увидеть определенные правила. Если не выбрана ни одна цепочка, будут перечислены все сети в выходных данных.
sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Правила брандмауэра указывают, что делать с определенным пакетом, если он соответствует определенным критериям, и в случае, если пакет не соответствует критериям, будет рассмотрено следующее правило брандмауэра указанное в цепочке. Это очень важно знать при определении правил брандмауэра, потому что вы можете легко заблокировать себя из вашего сервера, если вы определяете правило, которое принимает пакеты с вашего локального IP-адреса после правила блокировки.
Цели, которые можно использовать для правил брандмауэра ACCEPT, DROP, QUEUE и RETURN. ACCEPT позволит разрешить пакет, DROP отбросит пакет, QUEUE будет передавать пакет в пользовательское пространство, а RETURN остановит пакетное перемещение по текущей цепочке и будет возобновлено на следующем правиле в предыдущей цепочке. Политика цепи по умолчанию будет определять, что делать с пакетом, если он не соответствует определенному правилу брандмауэра. Как вы можете видеть на выходе первой команды, политика по умолчанию для всех встроенных цепочек устанавливаются ACCEPT. ACCEPT позволит пакету проходить и в принципе не имеет никакой защиты.
Перед добавлением каких-либо конкретных правил, добавьте следующий:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Это позволит предотвратить соединения, которые были уже созданы, и не будет отброшено и текущая SSH сессия будет оставаться активной.
Затем добавить правила, чтобы разрешить трафик на локальном интерфейсе:
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT
Далее, разрешить доступ к серверу через SSH для вашего локального IP-адреса, так только вы можете получить доступ к серверу:
sudo iptables -A INPUT -s 111.111.111.111 -p tcp --dport 22 -j ACCEPT
Где 111.111.111.111
ваш локальный IP — адрес и 22
является портом прослушивания вашего SSH демона. В случае, если ваши локальные изменения IP адреса динамически, лучше опустить часть -s 111.111.111.111
и использовать другой метод, чтобы защитить службу SSH от нежелательного трафика.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Далее, разрешить доступ к важным услугам, как сервер HTTP/HTTPS:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -nvL
Если у вас есть другие услуги, которым вы хотите разрешить доступ, лучше сделать это сейчас. После того, как вы закончите, вы можете установить политику по умолчанию для входной встроенной цепи DROP.
sudo iptables -P INPUT DROP
Это приведет к какому-либо пакету, который не соответствует критериям правил брандмауэра. Конечный результат должен быть похож на следующий:
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
Тем не менее, если вы сейчас перезапустить сервер, вы потеряете все правила брандмауэра, которые вы определили, так что очень важно, чтобы правила оставались постоянно.
В случае, если вы используете Ubuntu VPS необходимо установить дополнительный пакет для этой цели. Идите вперед и установите необходимый пакет с помощью следующей команды:
sudo apt-get install iptables-persistent
На Ubutnu 14.04 вы можете сохранить и перезагрузить правила брандмауэра , используя команды ниже:
sudo /etc/init.d/iptables-persistent save sudo /etc/init.d/iptables-persistent reload
На Ubuntu 16.04 используйте следующие команды вместо:
sudo netfilter-persistent save sudo netfilter-persistent reload
Если вы используете CentOS VPS, вы можете сохранить правила брандмауэра с помощью команды ниже:
service iptables save
PS . Если вам понравился этот пост, можете поделиться им с друзьями в социальных сетях помощью кнопок ниже или просто оставить комментарий в разделе комментариев.