Для домашнего использования я выполняю Secunia PSI. Это отслеживает то, что установлено на машине и затем предупреждает меня, когда существуют обновления - даже дает ссылку на загрузку при необходимости. Блестящее небольшое приложение. Конечно, это только работает на то, что на самом деле установлено на моей машине и не лицензируется для корпоративного использования...
Secunia действительно предлагает Корпоративную версию также: http://secunia.com/vulnerability_scanning/corporate у меня не было шанса проверить его все же все же.
Что касается ответов HTTP, у меня создалось впечатление, что они используют соединение, открытое клиентом, что разрешено моим правилом. Я был неправ?
Да, ты был неправ. Скорее всего, вы захотите принять установленные соединения или связанные с входящими соединениями. Таким образом, можно ответить на все, что принято в правиле ввода. С брандмауэром без сохранения состояния нужно явно открывать исходный порт. Поскольку IPtables отслеживает состояние, вам не нужно этого делать. Он будет отслеживать состояние подключений для вас и автоматически разрешать исходящие подключения так, как вы думаете, но только если вы скажете ему об этом. Правило для этого: iptables -A INPUT -p ALL -m state --state ESTABLISHED, RELATED -j ACCEPT
. Поместите это в начало вашего выходного списка. Если вы хотите быть особенно агрессивным, вы могли бы привязать это правило к определенным портам.
Если бы вы смотрели на это без сохранения состояния, вам нужно было бы помнить, откуда приходят и куда идут пакеты. Ваш сервер в настоящее время настроен, чтобы вы могли подключаться к другой машине по SSH. Поскольку вы не разрешаете трафик с портом 22 в качестве источника, ваш сервер не может отвечать на входящие соединения. Опять же, правило «ESTABLISHED, RELATED» решает эту проблему, разрешая трафику отвечать на входящие соединения, как и разрешая трафик, исходящий из порта 22, но в отличие от открытия 22 на брандмауэре без сохранения состояния, эта настройка не позволяет запускать новые соединения оттуда.
Ваш сервер в настоящее время настроен, чтобы вы могли подключаться к другой машине по SSH. Поскольку вы не разрешаете трафик с портом 22 в качестве источника, ваш сервер не может отвечать на входящие соединения. Опять же, правило «ESTABLISHED, RELATED» решает эту проблему, разрешая трафику отвечать на входящие соединения, как и разрешая трафик, исходящий из порта 22, но в отличие от открытия 22 на брандмауэре без сохранения состояния, эта настройка не позволяет запускать новые соединения оттуда. Ваш сервер в настоящее время настроен, чтобы вы могли подключаться к другой машине по SSH. Поскольку вы не разрешаете трафик с портом 22 в качестве источника, ваш сервер не может отвечать на входящие соединения. Опять же, правило «ESTABLISHED, RELATED» решает эту проблему, разрешая трафику отвечать на входящие соединения, как и разрешая трафик, исходящий из порта 22, но в отличие от открытия 22 на брандмауэре без сохранения состояния, эта настройка не позволяет запускать новые соединения оттуда.Ваш подход плохой. Вы разрешаете все входные соединения, а затем останавливаете их на выходе. Это не предотвратит DDoS-атаки. Правильный способ - остановить входные соединения и разрешить выход.
Читая ваш код, я пытался переделать. Вот как, я думаю, это должно выглядеть:
#!/bin/sh
IPT=/usr/sbin/iptables
echo "Clear firewall rules..."
$IPT -F
$IPT -Z
$IPT -t nat -F
$IPT -t nat -Z
$IPT -t mangle -F
$IPT -t mangle -Z
$IPT -X
echo "Setting firewall policy..."
$IPT -P INPUT DROP # Deny all incoming connections
$IPT -P OUTPUT ACCEPT # Allow all outgoing connections
$IPT -P FORWARD DROP # Deny all forwaring
echo "Allow connections from: lo, eth0, eth0.2654"
$IPT -I INPUT -i lo -j ACCEPT
$IPT -I INPUT -i eth0 -j ACCEPT
echo "Allow icmp requests from eth0"
$IPT -A INPUT -p icmp -i eth0 -j ACCEPT
echo "Allow traffic for HTTP(S), SSH, SMTP, DNS, NTP, PgSQL, SolR"
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp --dport 25 -i eth0 -j ACCEPT
$IPT -A INPUT -p tcp --dport 53 -i eth0 -j ACCEPT
$IPT -A INPUT -p udp --dport 53 -i eth0 -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
$IPT -A INPUT -p udp --dport 123 -i eth0 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -i eth0 -j ACCEPT
$IPT -A INPUT -p tcp --dport 5433 -i eth0.2654 -j ACCEPT
$IPT -A INPUT -p udp --dport 5433 -i eth0.2654 -j ACCEPT
$IPT -A INPUT -p tcp --dport 8983 -i eth0.2654 -j ACCEPT
$IPT -A INPUT -p udp --dport 8983 -i eth0.2654 -j ACCEPT
echo "Deny web server user outgoing connections; eth0"
$IPT -A INPUT -o eth0 -m owner --uid-owner www-data -j DROP
echo "Drop everything."
$IPT -A INPUT -s 0/0 -j DROP
echo "Firewall loaded."
sleep 20
$IPT -nvL
echo "Clear firewall rules..."
$IPT -F
$IPT -Z
$IPT -t nat -F
$IPT -t nat -Z
$IPT -t mangle -F
$IPT -t mangle -Z
$IPT -X
Я не тестировал, так что имейте это в виду. Я не уверен, что "-i eth0.2654" будет работать с виртуальными интерфейсами.
Если хотите - попробуйте и дайте мне знать, работает он или нет.