Толик Панков
hex_laden
............ .................. ................

October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Толик Панков [userpic]
Настройка IPTABLES

На самом деле, жутко не люблю настраивать IPTables, поскольку синтаксис у него несколько инопланетный. Дома и на работе я как-то настроил один раз лет 10 назад и благополучно все забыл. Теперь вот приходится мучительно вспоминать: "Чем ты это делал? Ну вот этой вот мясорубкой.".


Открытие порта на исходящие соединения.


Ну чтоб с чем-то связаться по определенному порту.

iptables -A INPUT -p tcp --sport <# порта> -j ACCEPT
iptables -A OUTPUT -p tcp --dport <# порта> -j ACCEPT

Если порт UDP, меняем -p tcp на -p udp

Открытие порта на входящие соединения


iptables -A INPUT -p tcp --dport <# порта> -j ACCEPT
iptables -A OUTPUT -p tcp --sport <# порта> -j ACCEPT


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


#!/bin/bash

if [ -z "$1" ]; then
    echo "parameters: <port> [t|f]"
    exit
fi

echo "Open  port "$1
if [ -z "$2" ]; then
    #to computer
    iptables -A INPUT  -p tcp --dport $1 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport $1 -j ACCEPT
    #from computer
    iptables -A INPUT  -p tcp --sport $1 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport $1 -j ACCEPT
else
    if [ "$1"="t" ]; then
	#to computer
	iptables -A INPUT  -p tcp --dport $1 -j ACCEPT
	iptables -A OUTPUT -p tcp --sport $1 -j ACCEPT
    else
	#from computer
	iptables -A INPUT  -p tcp --sport $1 -j ACCEPT
	iptables -A OUTPUT -p tcp --dport $1 -j ACCEPT
    fi
fi

echo "OK"


На PasteBin
На GitHub

Настройка IPTABLES на сервере


Да, бессовесно передрал со своего домашнего компа.

# Удаление всех правил
echo "Delete firewall rules..."
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Запрет всего трафика
echo "Set main policy..."
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Включение логов (когда-то было для отладки)
#iptables -A INPUT -j LOG --log-prefix '[FW INPUT]:'
#iptables -A OUTPUT -j LOG --log-prefix '[FW OUTPUT]:'
#iptables -A FORWARD -j LOG --log-prefix '[FW FORWARD]:'

#Открываем порты VPN и протокол GRE для PPTP-VPN
#Есть как на сервере для виндовых клиентов,
#так и серверу может понадобиться соединяться с VPN
echo "Open VPN ports and GRE..."
#to computer (входящие)
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT
#from computer (исходящие)
iptables -A INPUT -p tcp --sport 1723 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 1723 -j ACCEPT

iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT

#разрешить весь трафик на lo интерфейсе
echo "Accept all lo interface traffic..."
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#открыть порты для VPN-клиентов (входящие)
# ssh (22 port)
echo "Open 22 port (ssh) for VPN clients..."
iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -s 172.16.1.0/24 -p tcp --sport 22 -j ACCEPT
# XDMCP
echo "Open 177 port UDP (XDMCP) for VPN clients..."
iptables -A INPUT -s 172.16.1.0/24 -p udp --dport 177 -j ACCEPT
iptables -A OUTPUT -s 172.16.1.0/24 -p udp --sport 177 -j ACCEPT

echo "Open 6000:6005 ports (Windows XDMCP) in both directions for VPN clients..."
iptables -A INPUT -s 172.16.1.0/24 -p tcp -m multiport --dports 6000:6005 -j ACCEPT
iptables -A OUTPUT -s 172.16.1.0/24 -p tcp -m multiport --sports 6000:6005 -j ACCEPT

iptables -A INPUT -s 172.16.1.0/24 -p tcp -m multiport --sports 6000:6005 -j ACCEPT
iptables -A OUTPUT -s 172.16.1.0/24 -p tcp -m multiport --dports 6000:6005 -j ACCEPT

echo "Open DNS for VPN clients..."
iptables -A INPUT -s 172.16.1.0/24 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.1.0/24 -p udp --sport 53 -j ACCEPT

iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.1.0/24 -p udp --sport 53 -j ACCEPT


# Разрешить ICMP
echo "Allow ICMP and ports for TRACEROUTE..."
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
#открыть порты для traceroute
iptables -A INPUT -p udp -m multiport --sports 33434:33534 -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dports 33434:33534 -j ACCEPT


#Открыть стандартные порты (входящие)
echo "Open standart ports (DNS,WWW, email) from server"
# 53-DNS,80 8080/tcp - WWW, 443/tcp - https, 110,443,25,587 - e-mail 873/tcp - rsync (for sbopkg)
iptables -A INPUT -p udp -m multiport --sports 53,443 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 53,80,8080,443,110,443,25,587,873 -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dports 53,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 53,80,8080,443,110,443,25,587,873 -j ACCEPT

#FTP (21,20,49152-65534 tcp) пока не нужен
#echo "Setup FTP access from server..."
# 21 & 49... from computer
#iptables -A INPUT -p tcp -m multiport --sports 21,49155:65534 -j ACCEPT
#iptables -A OUTPUT -p tcp -m multiport --dports 21,49155:65534 -j ACCEPT
# 20 - to computer
#iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT


На PasteBin


Вроде все правильно, но стойкое ощущение, что где-то накосячил. Кто больше шарит в IPTABLES, приму все комментарии по поводу данной темы.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/10/20/nastrojka-iptables/

Comments

"Открытие порта на исходящие соединения.

Ну чтоб с чем-то связаться по определенному порту.

iptables -A INPUT -p tcp --sport <# порта> -j ACCEPT
iptables -A OUTPUT -p tcp --dport <# порта> -j ACCEPT"

Нет.

iptables -A OUTPUT -p tcp --dport <# порта> -j ACCEPT" -- это верно вроде,

а "iptables -A INPUT -p tcp --sport <# порта> -j ACCEPT" -- нет. Потому что это правило позволяет любой входящий пакет с указанного порта с любого адреса. Если ты хочешь открыть ответы на исходящий трафик, то нужно писать что-то в стиле iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

В принципе, в обратную сторону то же самое (если ты не все исходящие разрешаешь).

Благодарю, надо будет переделать. Я что-то помнил про RELATED,ESTABLISHED -j ACCEPT, но, как выяснилось, не тем местом.