Описание на примере операционной системы 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 на сервере.
Заходим по 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 (где сеть меняем на нужную)
Последнее редактирование: