Может ли кто-нибудь указать мне, если, при условии, что для данного (Ubuntu 12.04) сервера нужны только SSH, NTP (клиент), HTTP (S) и системные обновления (apt-get или aptitude), следующий набор правил достойный? Моя идея - отбросить весь трафик по умолчанию и открыть только необходимые порты на нужные состояния и интерфейсы ...

*filter

#------------------------------------------------------------------------------
# Defaults
#------------------------------------------------------------------------------

-P INPUT   DROP
-P OUTPUT  DROP
-P FORWARD DROP

#------------------------------------------------------------------------------
# Loopback
#------------------------------------------------------------------------------

-A INPUT  -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

#------------------------------------------------------------------------------
# SSH
#------------------------------------------------------------------------------

-A INPUT  -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED,RELATED     -j ACCEPT

#-------------------------------------------------------------------------------
# NTP
#-------------------------------------------------------------------------------

-A INPUT  -i eth0 -p udp --sport 123 -m state --state ESTABLISHED,RELATED     -j ACCEPT
-A OUTPUT -o eth0 -p udp --dport 123 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#------------------------------------------------------------------------------
# DNS
#------------------------------------------------------------------------------

-A INPUT  -i eth0 -p udp --sport 53 -m state --state ESTABLISHED,RELATED     -j ACCEPT
-A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#------------------------------------------------------------------------------
# Updates
#------------------------------------------------------------------------------

-A INPUT  -i eth0 -p tcp --sport 80  --dport 32768:61000 -m state --state ESTABLISHED,RELATED     -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 80  --sport 32768:61000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A INPUT  -i eth0 -p tcp --sport 443 --dport 32768:61000 -m state --state ESTABLISHED,RELATED     -j ACCEPT
-A OUTPUT -o eth0 -p tcp --dport 443 --sport 32768:61000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#------------------------------------------------------------------------------
# Logging
#------------------------------------------------------------------------------

-A INPUT -m limit --limit 125/min -j LOG --log-prefix "IPTABLES DENIED " --log-level 7

COMMIT

Я что-то пропускаю? Большое спасибо.

1 ответ1

2

Обратите внимание, что с этим набором правил вы также ограничиваете исходящий трафик только для определенных портов. В какой-то момент вы можете столкнуться с проблемами из-за этого (например, клонировать git-репозиторий). Вы можете удалить правила -A OUTPUT и вместо этого добавить следующее перед COMMIT:

## Allow inbound established and related outside communication
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Allow initiating outbound communications
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT

Вы также можете разрешить трафик ICMP (ping и т.д.):

## Allow ICMP traffic
-A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Наконец, следующее удалит пакеты от посторонних, отправляющих пакеты как localhost (добавьте перед правилами обратной петли):

## Drop outside packets with localhost address - anti-spoofing measure
-A INPUT -s 127.0.0.0/255.0.0.0 -i ! lo -j DROP

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .