РЕШЕНО. Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Защита сервера от взлома, антивирус, файрвол, SSL-сертификаты и прочие вопросы, связанные с безопасностью данных.
Ответить
AlektroNik
Сообщения: 109
Зарегистрирован: Ср июл 29, 2020 7:26 pm

РЕШЕНО. Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Сообщение AlektroNik » Вс авг 09, 2020 9:00 am

Добрый день, коллеги.
Хочу сказать спасибо разрабам панели. Чем глубже погружаюсь в изучении этой панели, тем больше восхищаюсь ее функциональности и гибкости!

Цель:
Не настраивать каждый сервис в отдельности, а все сделать через правила iptables и/или CSF.
  • РАЗРЕШИТЬ ВХОДЯЩИЕ порты как минимум 80,443 со ВСЕХ IP
    РАЗРЕШИТЬ ВХОДЯЩИЕ порты ко всем остальным портам типо SMTP, IMAP, FTP, MYSQL и т. д. ТОЛЬКО С КОНКРЕТНЫХ IP
    Все остальные входящие запретить.
Может кто-нибудь подсказать где, в какой последовательности и какие конкретно правила прописать? Хотя бы примеры для пары сервисов.
Последний раз редактировалось AlektroNik Пт авг 14, 2020 2:11 pm, всего редактировалось 1 раз.

Аватара пользователя
sbury
Сообщения: 1344
Зарегистрирован: Вт фев 06, 2018 7:51 am

Re: Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Сообщение sbury » Ср авг 12, 2020 8:41 am

пречисленные вами порты и так открыты по умолчанию, кроме mysql. Он открывается отдельно

AlektroNik
Сообщения: 109
Зарегистрирован: Ср июл 29, 2020 7:26 pm

Re: Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Сообщение AlektroNik » Ср авг 12, 2020 8:55 am

sbury писал(а):
Ср авг 12, 2020 8:41 am
пречисленные вами порты и так открыты по умолчанию, кроме mysql. Он открывается отдельно
Ключевой момент:
РАЗРЕШИТЬ ВХОДЯЩИЕ порты ко всем остальным портам типо SMTP, IMAP, FTP, MYSQL и т. д. ТОЛЬКО С КОНКРЕТНЫХ IP
Т. Е. ограничить источник подключений ... Как и где это правильней в панели сделать? Есть вкладка IPtables поидее там нужно добавлять правила?

Аватара пользователя
sbury
Сообщения: 1344
Зарегистрирован: Вт фев 06, 2018 7:51 am

Re: Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Сообщение sbury » Ср авг 12, 2020 1:30 pm

да. там их добавляеете, только потом жмете сохранить

AlektroNik
Сообщения: 109
Зарегистрирован: Ср июл 29, 2020 7:26 pm

Re: Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Сообщение AlektroNik » Пт авг 14, 2020 2:10 pm

РЕШЕНО. Возможно кому-то пригодится.

Сначала начал ковыряться в правилах IPTables, после их изучения понял как это сделать из web-ки :D

Отобразить список правил с номерами строк.

Код: Выделить всё

# iptables -n -L -v --line-numbers
1. Разрешаем конкретным IP и сетям доступ к любому порту по любому протоколу

csf - ConfigServer Firewall -> Firewall Allow IPs -> вписываем ТОЛЬКО свои IP и сети для доступа к серверу.
или

Код: Выделить всё

# vim /etc/csf/csf.allow
2. Оставляем открытыми только HTTP и HTTPS порты
csf - ConfigServer Firewall -> Firewall Configuration

БЫЛО:
Allow incoming TCP ports
TCP_IN = 20, 21, 22, 25, 53, 80, 110, 143, 443, 465, 587, 993, 995, 8000, 4747, 30000:65535, 8002, 3306,4200,5432,43
Allow incoming UDP ports
UDP_IN = 20, 21, 53, 1024:65535

СТАЛО:
Allow incoming TCP ports
TCP_IN = 80, 443
Allow incoming UDP ports
UDP_IN =

AlektroNik
Сообщения: 109
Зарегистрирован: Ср июл 29, 2020 7:26 pm

Re: РЕШЕНО. Как в iptables и/или CSF разрешить доступ к портам только с определенных IP?

Сообщение AlektroNik » Пн сен 07, 2020 1:55 pm

А вот более точечное решение. Для дальнейшего добавления исключений.

Оригинальная инструкция
https://download.configserver.com/csf/readme.txt


Синтаксис и пример использования /etc/csf/csf.allow
10. Advanced Allow/Deny Filters
###############################

In /etc/csf/csf.allow and /etc/csf/csf.deny you can add more complex port and
ip filters using the following format (you must specify a port AND an IP
address):

tcp/udp|in/out|s/d=port|s/d=ip|u=uid

Broken down:

tcp/udp : EITHER tcp OR udp OR icmp protocol
in/out : EITHER incoming OR outgoing connections
s/d=port : EITHER source OR destination port number (or ICMP type)
(use a _ for a port range, e.g. 2000_3000)
(use a , for a multiport list of up to 15 ports, e.g. 22,80,443)
s/d=ip : EITHER source OR destination IP address
u/g=UID : EITHER UID or GID of source packet, implies outgoing connections,
s/d=IP value is ignored

Note: ICMP filtering uses the "port" for s/d=port to set the ICMP type.
Whether you use s or d is not relevant as either simply uses the iptables
--icmp-type option. Use "iptables -p icmp -h" for a list of valid ICMP types.
Only one type per filter is supported

Examples:

# TCP connections inbound to port 3306 from IP 11.22.33.44
tcp|in|d=3306|s=11.22.33.44

# TCP connections outbound to port 22 on IP 11.22.33.44
tcp|out|d=22|d=11.22.33.44

Note| If omitted, the default protocol is set to "tcp", the default connection
direction is set to "in", so|

# TCP connections inbound to port 22 from IP 44.33.22.11
d=22|s=44.33.22.11

# TCP connections outbound to port 80 from UID 99
tcp|out|d=80||u=99

# ICMP connections inbound for type ping from 44.33.22.11
icmp|in|d=ping|s=44.33.22.11

# TCP connections inbound to port 22 from Dynamic DNS address
# www.configserver.com (for use in csf.dyndns only)
tcp|in|d=22|s=www.configserver.com

# TCP connections inbound to port 22,80,443 from IP 44.33.22.11
d=22,80,443|s=44.33.22.11


Вот конкретный пример для добавления доступа к FTP с кокнкретных IP или сетей:
Смотрю пассивные порты используемые моим FTP сервером

Код: Выделить всё

# grep 'PassivePorts' /etc/proftpd.conf
PassivePorts    30000 35000
csf - ConfigServer Firewall -> Firewall Allow IPs -> вписываем избранные IP для доступа к FTP.
или

Код: Выделить всё

# vim /etc/csf/csf.allow
tcp|in|d=20,21,30000_35000|s=44.33.22.11    # FTP IP
tcp|in|d=20,21,30000_35000|s=11.22.33.44/24    # FTP Network
Перезапуск правил CSF (если есть fail2ban, скорее всего и его нужно будет рестартануть)

Код: Выделить всё

# csf -r

Ответить