Назад | Перейти на главную страницу

Белый список на основе IP для одного порта на сервере Ubuntu

В настоящее время я пытаюсь создать белый список IP-адресов для одного специального порта. В основе приложения лежит простой сервер TeamSpeak3.

Белый список IP-адресов получает IP-адрес посетителя с помощью HTTP-скрипта. Итак, IP-адрес находится в белом списке (это пока работает неплохо).

Но как я могу разрешить эти IP-адреса для порта «9987» и заблокировать все остальное? Я пробовал это до сих пор, используя iptables ACCEPT для специального IP-адреса внутри белого списка, но это работает не очень хорошо, потому что я могу присоединиться к Teamspeak с IP-адресами, не внесенными в белый список?

Можете ли вы пожаловаться на другие души? Я ценю любые полезные предложения!

РЕДАКТИРОВАТЬ: текущий сценарий

# Create chain
iptables -N teamspeakCommunication

# Add ip
iptables -A teamspeakCommunication --src 127.0.0.1 -j ACCEPT

# Deny everything else
iptables -A teamspeakCommunication -j DROP

# Use this chain for port
iptables -I INPUT -m udp -p udp --dport 9987 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 10011 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 30033 -j teamspeakCommunication

Другое редактирование: я немного пробовал, и да: все пакеты падают. Так что никто не может подключиться к TeamSpeak - как я этого хотел! Проблема была в другой цепочке. Итак, я их очистил.

Но новая проблема: цепочка / правила работают отлично, поэтому я добавил в цепочку свой собственный IP-адрес и попытался перезагрузить его. Но я не могу подключиться.

Моя команда для добавления IP:

iptables -A teamspeakCommunication --src 1.2.3.4 -j ACCEPT # 1.2.3.4 stands for my ip

И перезагрузка:

iptables-save > /etc/network/iptables.up.rules && iptables-apply -t 60

Также

iptables-restore < /etc/network/iptables.up.rules

Но перезагрузка не заботится о новых IP? Я думаю, это просто ...

Во-первых, лучше выработать привычку просто использовать -A добавлять правила, а не -I так что окончательный порядок правил в цепочке такой же, как и в сценарии.

Во-вторых, в остальном ваш сценарий выглядит нормально.

Возможно, используется другой порт, или это TCP, а не UDP. Я предпочитаю явно разрешать те порты, которые мне нужны, и отклонять все другие попытки подключения (возможно, используя ведение журнала в начале, чтобы я мог видеть, что пытается войти):

iptables -A chainname -p tcp --dport 1234 -j ACCEPT
...
iptables -A chainname -j LOG -m limit --log-prefix "chainname drop: " --limit 4/minute --limit-burst 20
iptables -A chainname -j DROP

РЕДАКТИРОВАТЬ:

Вы добавляете правила в teamspeakCommunication цепь с -A, что, как я уже упоминал выше, обычно является хорошей идеей. Однако в данном случае это не сценарий, который заполняет цепочки за один раз, вы поддерживаете цепочку постепенно. Теперь вы добавляете -j ALLOW правило после одеяло -j DROP правило, поэтому РАЗРЕШЕНИЕ не достигается. В этом случае я разрешаю добавить эти правила с помощью -I ;-)

РЕДАКТИРОВАТЬ2:

Можно временно добавить IP-адрес в цепочку, которая автоматически удаляется после определенного периода бездействия:

iptables -N teamspeakCommunication
iptables -A teamspeakCommunication -m recent --update --name teamspeak --seconds 1800 -j ACCEPT
iptables -A teamspeakCommunication -j DROP

Это создает recent модуль в iptables, который соответствует "недавно просмотренным" IP-адресам. Вы можете добавить IP-адреса в этот модуль, выполнив следующие действия:

echo "+127.0.0.1" > /proc/net/xt_recent/teamspeak

После этого трафик с этого IP-адреса будет приниматься до тех пор, пока трафик с этого IP-адреса был замечен в течение последних 1800 секунд (как настроено с помощью --seconds). После отсутствия трафика в течение 1800 секунд IP-адрес удаляется из списка и снова блокируется.

Если вы хотите удалить IP-адрес раньше установленного количества секунд, сделайте следующее:

echo "-127.0.0.1" > /proc/net/xt_recent/teamspeak

Вы можете проверить список просто с помощью

cat /proc/net/xt_recent/teamspeak

который показывает всевозможную информацию о том, когда были просмотрены последние пакеты и т. д.

При загрузке xt_recent модуль ядра, вы можете передать количество запоминаемых IP-адресов для каждого списка и владельца / группы / разрешений по умолчанию для /proc/net/xt_recent/* файлы; ими также можно управлять с помощью обычного chown/chmod команды. Видеть modinfo xt_recent для списка и названий параметров.