пытаюсь разобраться в iptables правилах

Автор mitiya, 13 мая 2013, 23:50:33

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

mitiya

началось все с того что мне нужно было закрыть все входящие кроме ssh

я думал все просто , сделаю так

iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

но не тут то было.
после применения этого правила, стал очень сильно тормозить процесс авторизации в ssh

мне подкинули следующий скрипт, не объяснили что и как там работает.


#!/bin/bash
# NETFILTER

# SYSTEM VARIABLES
IPTABLES="/sbin/iptables"

# NETWORK VARIABLES

LAN="eth0"
INET="eth0"
LOOPBACK="lo"
ANYNET="0.0.0.0/0"

# SET POLICIES & FLUSH ALL THE CHAINS

    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD DROP
    $IPTABLES -P OUTPUT ACCEPT
    $IPTABLES -t nat -P PREROUTING ACCEPT
    $IPTABLES -t nat -P POSTROUTING ACCEPT
    $IPTABLES -t nat -P OUTPUT ACCEPT
    $IPTABLES -t mangle -P PREROUTING ACCEPT
    $IPTABLES -t mangle -P OUTPUT ACCEPT
    $IPTABLES -F
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F
    $IPTABLES -X
    $IPTABLES -t nat -X
    $IPTABLES -t mangle -X

    # $IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# CUSTOM CHAINS

    $IPTABLES -N chain_ssh
    $IPTABLES -F chain_ssh
    # see /proc/net/xt_recent/SSH
    $IPTABLES -A chain_ssh -m recent --set --name SSH
    $IPTABLES -A chain_ssh -m recent --update --seconds 60 --hitcount 2 --name SSH -j DROP
    $IPTABLES -A chain_ssh -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport 22 -j LOG --log-level 4 --log-prefix "chain_ssh RST: "
    $IPTABLES -A chain_ssh -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport 22 -j LOG --log-level 4 --log-prefix "chain_ssh FIN: "
    $IPTABLES -A chain_ssh -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport 22 -j ACCEPT

#=======================================================================
#=======================================================================
# FILTER

#=======================================================================
# INPUT CHAIN
#=======================================================================

    # redirect to ssh chain
    $IPTABLES -A INPUT -s $ANYNET -p tcp --dport 22 -j chain_ssh

    # allow all input loopback
    $IPTABLES -A INPUT -i $LOOPBACK -j ACCEPT

#=======================================================================
# FORWARD CHAIN
#=======================================================================



#=======================================================================
# OUTPUT CHAIN
#=======================================================================

# redirect to additional tcp filtering chain

# allow all output loopback
    $IPTABLES -A OUTPUT -o $LOOPBACK -j ACCEPT


я его опробовал на virtualbox и все отлично заработао, но опять же не понятно из-за чего.

а вот на vps не заработало, вообще не могу правила применить там.

yura_n

Зачем столько всего?! Вот так попробуйте:

#!/bin/bash
IPTABLES="/sbin/iptables"

# Запрет доступа на все.
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# Разрешение пакетов для интерфейса обратной петли.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

$IPTABLES -A INPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

# Открытие TCP портов.
$IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT


mitiya

на vps команда

$IPTABLES -A INPUT -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

вызывает такой вот ответ

iptables: No chain/target/match by that name.

fry

Если тормозит процесс авторизации, то попробуйте добавить в /etc/ssh/sshd_config строку
UseDNS no
Потом перезапустите демона ssh и попробуйте заново авторизоваться.
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

yura_n

#4
Попробуйте так:

#!/bin/bash
IPTABLES="/sbin/iptables"

# Запрет доступа на все.
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

# Разрешение пакетов для интерфейса обратной петли.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Разрешение трафика для соединений.
$IPTABLES -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Открытие TCP портов.
$IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

mitiya

со state --state
я пробовал, работает.

Но я так понимаю что  conntrack --ctstate  это более современный способ.

в чём вообще разница между state --state и conntrack --ctstate ?

yura_n

#6
Цитата: mitiya от 14 мая 2013, 03:08:58Но я так понимаю что  conntrack --ctstate  это более современный способ.
Насколько я понимаю, это следствие более современной реализации iptables/netfilter. В какой-то момент, после очередного обновления, вываливается ошибка iptables и предлагается заменить state на conntrack.