Настройка Iptables на Centos

Pzychozes

Проверенные
Сообщения
139
Реакции
66
Баллы
11,030
Автор мануала: Alligat0r

Описание на примере операционной системы CentOS 6/7
Чем она лучше дебиана это отдельная большая статься и может быть я как нибудь возьмусь написать ее.

И так имеем свежеустановленную операционную систему Centos на сервере.

Заходим по SSH под пользователем root и проводим следующие манипуляции:

Подключаем репозитарий epel, обновляемся и перезагружаемся

# yum install epel-release
# yum update -y
# shutdown -r 0


Поскольку при перезагрузке нас выкинет из консоли заходим заново по SSH.

Отрубаем штатный скрипт фаервола

Если у нас CentOS 6

# service iptables stop
# service ip6tables stop

# chkconfig iptables off
# chkconfig ip6tables off


Если у нас CentOS 7

# systemctl stop iptables.service
# systemctl stop ip6tables.service
# systemctl disable iptables.service
# systemctl disable ip6tables.service


Если ругнется что ip6tables нет - не обращаем внимания, не во всех дистрибутивах присутствует.

Устанавливаем ipset для бана особо умных рекламщиков в игре которые умеют обходить бан по железу.

# yum install ipset

Создаем свой скрипт с правилами и даем права запуска
# touch /etc/init.d/rc.firewall
# chmod 755 /etc/init.d/rc.firewall


Редактируем

# vi /etc/init.d/rc.firewall

В открывшемся окне редактирования нажимаем 1 раз клавишу Insert и вписываем свои правила.

#!/bin/sh

IPT="/sbin/iptables"


# сбрасываем все при запуске
$IPT -F
$IPT -X
$IPT -Z

# Выставляем правила по умолчанию
# Все входящие неописанные правилами блокируем,
# все исходящие от имени сервера разрешаем

$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD

###Имя нашей сетевой карты (у меня она к примеру eth0 )

IFACE=eth0

# Активируем цепочки ipset
# banip - для бана по IP
# nabnet - для бана по подсети


ipset -N banip iphash
ipset -N nabnet nethash

# Дропаем все, что занесено в цепочки IPSET

$IPT -A INPUT -m set --set banip src -j DROP

# Разрешаем localhost и запрещаем спуфить на него через внешний интерфейс

$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP
$IPT -A INPUT -i lo -j ACCEPT

# Дропаем битые пакеты и разрешаем уже установленные соединения

$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем коннектиться на порт логин сервера (не более 3 подключений с одного IP )

$IPT -A INPUT -p tcp -i $IFACE --dport 2106 -m connlimit --connlimit-above 3 -j DROP
$IPT -A INPUT -p tcp -i $IFACE --dport 2106 -j ACCEPT

# Разрешаем коннектиться на порт гейм сервера (не более 5 подключений с одного IP )
# Если кто то захочет с одного компа поиграть в более 5 окон - его ждет разочарование

$IPT -A INPUT -p tcp -i $IFACE --dport 7777 -m connlimit --connlimit-above 5 -j DROP
$IPT -A INPUT -p tcp -i $IFACE --dport 7777 -j ACCEPT


# Разрешаем подключаться к порту MySQL только с разрешенных IP
# К примеру IP сервера где стоит вебобвязка и домашние IP
# Вместо xx.xx.xx.xx соответственно свои IP
# Если у Вас дома IP меняется то можно добавить целую сеть, к примеру вместо xx.xx.xx.xx 122.12.0.0/16

$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 3306 -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 3306 -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 3306 -j ACCEPT

# Разрешаем SSH порт для доверенных IP (то же самое что и 3306 только IP сервера с вебобвязкой не нужен)

$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 22 -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate NEW -p tcp -i $IFACE -d xx.xx.xx.xx --dport 22 -j ACCEPT

# Все что не подпало под описанные правила - дропаем

$IPT -A INPUT -j DROP

Правим естественно под себя.
Далее нажимаем 1 раз Esc и далее Shift+ZZ

Активируем скрипт при запуске системы:

# chmod +x /etc/rc.d/rc.local
# vi /etc/rc.d/rc.local


Нажимаем Insert и дописываем туда:
/etc/init.d/rc.firewall

Выходим Shift+ZZ и перезагружаемся shutdown -r 0

Фаервол готов к работе.

Теперь как пользоваться утилитой IPSET которая описана у нас в скрипте фаервола для бана нерадивых нам IP адресов и сетей :-)
Делается это очень просто и быстро. Заходим по SSH под пользователем root
Для бана какого нибудь IP даем команду:

ipset -A banip xx.xx.xx.xx (xx меняем на IP подлежащий бану)

И все, фаервол будет дропать все с этого IP и не пускать на сервер.

Для разбана этого IP можно дать команду
ipset -D banip xx.xx.xx.xx
После этого IP будет удален из списка бана.

Для бана целой сети используем:

ipset -A bannet 192.168.10.0/24 (где сеть меняем на нужную)
 
на примере операционной системы CentOS 6/7
# touch /etc/init.d/rc.firewall
# chmod 755 /etc/init.d/rc.firewall
Код:
[root@ns3030472 ~]# ls -la /etc/sysconfig/ | grep tables
-rw-------.  1 root root 1390 Jun 10  2014 ebtables-config
-rw-------.  1 root root  635 Nov 20 12:31 ip6tables
-rw-------.  1 root root 1988 Nov 20 12:31 ip6tables-config
-rw-------.  1 root root 1656 Mar 10 23:32 iptables
-rw-------.  1 root root 1974 Nov 20 12:31 iptables-config
Вот и все, что вам нужно знать про этот мануал.
 
  • Мне нравится
Реакции: Hope
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу