Настройка 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, приму все комментарии по поводу данной темы.

One Response to Настройка IPTABLES

  1. Pingback: Настройка IPTables на сервере. Часть вторая, с поправками. | Персональный блог Толика Панкова

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *