У меня на ноутбуке установлена Ubuntu 12.04 x64.
Я довольно новичок в Linux, и я хотел указать определенные правила для брандмауэра iptables.
Это сохраненная конфигурация моих iptables:
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.1.100:3306
-A PREROUTING -p tcp -m tcp --dport 11002 -j DNAT --to-destination 192.168.1.100:11002
-A PREROUTING -p tcp -m tcp --dport 13000 -j DNAT --to-destination 192.168.1.100:13000
-A PREROUTING -p tcp -m tcp --dport 13001 -j DNAT --to-destination 192.168.1.100:13001
-A PREROUTING -p tcp -m tcp --dport 13002 -j DNAT --to-destination 192.168.1.100:13002
-A PREROUTING -p tcp -m tcp --dport 13003 -j DNAT --to-destination 192.168.1.100:13003
-A PREROUTING -p tcp -m tcp --dport 13004 -j DNAT --to-destination 192.168.1.100:13004
-A PREROUTING -p tcp -m tcp --dport 13061 -j DNAT --to-destination 192.168.1.100:13061
-A PREROUTING -p tcp -m tcp --dport 13099 -j DNAT --to-destination 192.168.1.100:13099
-A POSTROUTING -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
Теоретически это означает, что нужно отбрасывать все соединения во всех портах, кроме http, mysql и нескольких других портов. .
Кроме того, он перенаправляет все подключения портов mysql и 13000-13004 и т. Д. К определенному локальному IP-адресу в том же порту, который равен 192.168.1.100.
Но что я нахожу странным, так это то, что когда мой брандмауэр активен, он блокирует абсолютно все входные соединения, даже те, которые не должны блокировать (http, mysql). На самом деле, я буквально заблокирован и не могу установить внешнее соединение.
Что я делаю не так?
PS: я протестировал брандмауэр без этих перенаправлений, и он по-прежнему блокирует все входы, поэтому я полагаю, что это не проблема.
и прежде всего вам необходимо проверить, разрешена ли пересылка пакетов в вашей системе:
cat /proc/sys/net/ipv4/ip_forward
или
sysctl ipv4_forward
Это должно иметь значение «1». если нет (sudo или root):
echo '1' > /proc/sys/net/ipv4/ip_forward
и сделать изменение постоянным, вы можете раскомментировать net.ipv4.ip_forward=1
в /etc/sysctl.conf
. После того, как это будет сделано, вы можете дополнительно протестировать свои настройки iptables (я предполагаю, что после этого незначительного изменения это сработает ;-)). Так как вы сказали, что вы новичок в этом, я поместил описание правила под каждым правилом, надеясь, что все это имеет смысл для вас.
iptables -P INPUT DROP
iptables -A OUTPUT ACCEPT
iptables -A FORWARD ACCEPT
Это отбросит весь трафик, кроме трафика, который соответствует определенным правилам. -P INPUT DROP можно указать как первое правило, тогда как -A INPUT DROP должно быть последним. Следующие 2 правила позволят исходящие соединения и переадресацию.
iptables -A INPUT -i lo -j ACCEPT
Разрешить петлевой (127.0.0.1) трафик
iptables -A INPUT -m state --state RELEATED,ESTABLISHED -j ACCEPT
Это позволит всем пакетам иметь состояние RELATED (новое вторичное соединение, например FTP) или ESTABLISHED (пакеты для этого соединения были замечены в обоих направлениях (например, HTTP-трафик).
iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE
nat, потому что вы, вероятно, натуете, маскируете пакет, выходящий из интерфейса ethx
. F.e .: WAN находится на eth1, а lan на eth0, поэтому ethx будет eth0. Это на POSTROUTING.
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 192.168.1.100:3306
это фактическая пересылка.
Итак, в основном ваши правила iptables, где все в порядке, вы, вероятно, просто забыли настройку ip_forward.