mitiya
13-05-2013, 13:37
началось все с того что мне нужно было закрыть все входящие кроме 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 не заработало, вообще не могу правила применить там.
я думал все просто , сделаю так
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 не заработало, вообще не могу правила применить там.