Делаю отладку правил iptables на боевом сервере, к которому имею физический доступ
Сервер 168.192.0.1 (он же шлюз для выхода в инет через eth0) локально соединен с машиной 168.192.0.2 через eth1
На сервере файл /etc/iptables.up.rules следующего содержания
*filter
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp -m tcp -i eth1 --dport 22 -j ACCEPT
# все пользователи сети 192.168.1.0/24 имели доступ к 80 и 110 портам tcp
-A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --dports 25,53,80,110 -i eth1 -j ACCEPT
# хождение в обратную сторону, когда клиенты локальной сети будут получать данные из интернета
-A FORWARD -d 192.168.1.0/24 -p tcp -m multiport --sports 25,53,80,110 -i eth0 -j ACCEPT
# Разрешаем dns серверу
-A INPUT -i eth1 -p udp --sport 53 -j ACCEPT
-A OUTPUT -o eth1 -p udp --dport 53 -j ACCEPT
#Разрешаем пинговать узлы интернета
-A FORWARD -i eth0 -o eth1 -p icmp -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy: reject for ports 143,3306,10000
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Проблема в следующем, если закомментировать последние два запрещающие правила
#-A INPUT -j DROP
#-A FORWARD -j DROP
то локалка нормально работает, могу ходить между машинами 192.168.0.1 и 192.168.0.2 через порты 22,80, и выход в нет тоже работает с обеих машин
Если же эти правила не комментировать, т е пробовать заставить их работать, то после подачи команды на сервере
/sbin/iptables-restore < /etc/iptables.up.rules
мой боевой сервер просто виснет и я жду пока кронтаб не затрет правила, чтобы сервер заработал снова
В манах пишут, что сначала нужно ставить все разрешающие правила, а в конце правил запрет по принципу
"что не разрешено- то запрещено"
В syslog пишутся сообщения ядра об обмене через интерфейсы eth1 и lo.
Я пока плохо разбираюсь в iptables, подскажите, где у меня проблема в правилах?
Почему правила
-A INPUT -j DROP
-A FORWARD -j DROP
подвешивают сервер?
Ошибка в правилах iptables
*filter
-A INPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp -m tcp -i eth1 --dport 22 -j ACCEPT
# все пользователи сети 192.168.1.0/24 имели доступ к 80 и 110 портам tcp
-A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --dports 25,53,80,110 -o eth1 -j ACCEPT
# хождение в обратную сторону, когда клиенты локальной сети будут получать данные из интернета
-A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --sports 25,53,80,110 -o eth0 -j ACCEPT
#---
-A FORWARD -i eth0 -p tcp -m multiport --sports 25,53,80,110 -d 192.168.1.0/24 -j ACCEPT
-A FORWARD -i eth1 -p tcp -m multiport --sports 25,53,80,110 -d 192.168.1.0/24 -j ACCEPT
# хождение в обратную сторону, когда клиенты локальной сети будут получать данные из интернета
-A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --sports 25,53,80,110 -o eth0 -j ACCEPT
# Разрешаем dns серверу
-A INPUT -i eth1 -p udp --sport 53 -j ACCEPT
#Разрешаем пинговать узлы интернета
-A FORWARD -i eth0 -o eth1 -p icmp -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy: reject for ports 143,3306,10000
-A FORWARD -j DROP
COMMIT
#как то так> smile А лучше опиши задачу проще написать с нуля.
А лучше опиши задачу проще написать с нуля.
Задача для спеца крайне проста
Есть сервер 168.192.0.1 (он же шлюз для выхода в инет через eth0) локально соединенный с клиентской машиной 168.192.0.2 через eth1
Сейчас правила iptables на сервере пусты, есть выход с сервера в нет, есть выход из локальной машины в нет через сервер(он же шлюз) и есть связь локальной машины с сервером(шлюзом) по портам 22,80
Нужно создать файл /etc/iptables.up.rules для сервера, чтобы сохранились все вышеописанные возможности плюс чтобы этими правилами закрыть на вход на сервере порты, например, такие 143,3306
Это мне нужно, чтобы отладить правила на боевой машине, к которой у меня есть физический доступ, прежде чем бросать их на удаленный сервер
хорошо smile скрипт вечером выложу
какие порты открыть?
Огромное спасибо!
Извините за задержку с ответом, праздник, с Рождеством Вас!!!
Открыть надо порты 22,25,80,110
Завтра выложу полностью. А так вот мой может из него что выкуришь.
cat firewall.sh
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_conntrack_pptp
iptables -F
iptables -F -t nat
iptables -F -t mangle
#drop
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# разрешаем локальный траффик для loopback и внутренней сети
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A INPUT -i wlan0 -j ACCEPT
iptables -A OUTPUT -o wlan0 -j ACCEPT
iptables -A INPUT -i mon.wlan0 -j ACCEPT
iptables -A OUTPUT -o mon.wlan0 -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A OUTPUT -o br0 -j ACCEPT
# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
#mtu
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#Разрешаем порты для l2tp
iptables -A INPUT -i eth1 -p udp --dport 1701 --sport 1701 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp --sport 1701 --dport 1701 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --dport 500 --sport 500 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp --sport 500 --dport 500 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --dport 47 --sport 47 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp --sport 47 --dport 17 -j ACCEPT
#web server
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 7800 -m limit --limit 1/min -j LOG --log-prefix "Incoming90: "
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 7800 -j DNAT --to-destination 172.16.0.100:7800
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -m limit --limit 1/min -j LOG --log-prefix "Incoming80: "
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT --to-destination 172.16.0.100:80
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 443 -m limit --limit 1/min -j LOG --log-prefix "Incoming443: "
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 443 -j DNAT --to-destination 172.16.0.100:443
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 465 -m limit --limit 1/min -j LOG --log-prefix "Incoming465: "
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 465 -j DNAT --to-destination 172.16.0.100:465
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -m limit --limit 1/min -j LOG --log-prefix "Incominglocal80: "
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 172.16.0.100:80
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 443 -m limit --limit 1/min -j LOG --log-prefix "Incominglocal443: "
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 443 -j DNAT --to-destination 172.16.0.100:443
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 21 -m limit --limit 1/min -j LOG --log-prefix "Incominglocal21: "
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 21 -j DNAT --to-destination 172.16.0.100:21
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 20 -m limit --limit 1/min -j LOG --log-prefix "Incominglocal20: "
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 20 -j DNAT --to-destination 172.16.0.100:20
iptables -A FORWARD -p tcp -s 172.16.0.100 --sport 21 -j ACCEPT
iptables -A FORWARD -p tcp -d 172.16.0.100 --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -s 172.16.0.100 --sport 465 -j ACCEPT
iptables -A FORWARD -p tcp -d 172.16.0.100 --dport 465 -j ACCEPT
iptables -A FORWARD -p tcp -s 172.16.0.100 --sport 20 -j ACCEPT
iptables -A FORWARD -p tcp -d 172.16.0.100 --dport 20 -j ACCEPT
iptables -A FORWARD -p tcp -s 172.16.0.100 --sport 443 -j ACCEPT
iptables -A FORWARD -p tcp -d 172.16.0.100 --dport 443 -j ACCEPT
iptables -A FORWARD -p tcp -s 172.16.0.100 --sport 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 172.16.0.100 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -s 172.16.0.100 --sport 7800 -j ACCEPT
iptables -A FORWARD -p tcp -d 172.16.0.100 --dport 7800 -j ACCEPT
#maskarding
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface wlan0 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface mon.wlan0 -j MASQUERADE
# ICMP разрешаем пинг с локальной сети провайдера до сервера
iptables -A INPUT -i eth1 -p icmp -j ACCEPT
iptables -A OUTPUT -o eth1 -p icmp -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp -j ACCEPT
iptables -A OUTPUT -o ppp0 -p icmp -j ACCEPT
# Разрешаем ssh серверу
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT
# Разрешаем dns серверу
iptables -A INPUT -i eth1 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp --dport 53 -j ACCEPT
#Разрешаем TV
iptables -A INPUT -i ppp0 -p tcp --sport 10000 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 10000 -j ACCEPT
#Разрешаем пинговать узлы интернета
iptables -A INPUT -i ppp0 -p icmp -j ACCEPT
iptables -A OUTPUT -o ppp0 -p icmp -j ACCEPT
#Разрешаем серверу http
iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
#Разрешаем серверу https и webmin
iptables -A INPUT -i eth1 -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 443 -j ACCEPT
#Ну а тут разрешаем пользователям внутренней сети доступ в инет и в локалку
iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp -m multiport --sport 80,110,443,25,143,5190,20,21 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --dport 80,443,110,25,143,5190 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --sport 80,110,443,25,143,5190 -j ACCEPT
#Разрешаем пинговать узлы интернета
iptables -A FORWARD -i eth0 -o ppp0 -p icmp -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p icmp -j ACCEPT
#Разрешаем RDP
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 3389 -j ACCEPT
#Разрешаем Radmin
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 8450 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 8450 -j ACCEPT
#Разрешаем ssh
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 22 -j ACCEPT
#Разрешаем NETBIOS & FTP
iptables -A FORWARD -i eth0 -o eth1 -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --ports 135,136,137,138,139,445,20,21 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --ports 135,136,137,138,139,445,20,21 -j ACCEPT
#Разрешаем VALVE
iptables -A FORWARD -i eth0 -o ppp0 -p udp -m multiport --ports 27000:27015 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p udp -m multiport --ports 27000:27015 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m multiport --ports 27000:27015 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp -m multiport --ports 27000:27015 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m multiport --ports 27020:27039 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp -m multiport --ports 27020:27039 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m multiport --ports 27040,27041 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p tcp -m multiport --ports 27040,27041 -j ACCEPT
#Разрешаем пинговать узлы локальной сети
iptables -A FORWARD -i eth0 -o eth1 -p icmp -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
#drop
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Ток это временно у меня отладка сервера).
Редактировать не буду, может вот это под себя отредактируешь,
закрываем наружу все, потом открываем что надо....
#!/bin/sh
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
export LAN=eth1
export NAT=eth0
export WAN=ppp0
# Сообщаем ядру, что ip-форвардинг разрешен
echo 1 >/proc/sys/net/ipv4/ip_forward
# RESET
iptables -v -P INPUT ACCEPT
iptables -v -P FORWARD ACCEPT
iptables -v -P OUTPUT ACCEPT
# reset the default policies in the nat table.
iptables -v -t nat -P PREROUTING ACCEPT
iptables -v -t nat -P POSTROUTING ACCEPT
iptables -v -t nat -P OUTPUT ACCEPT
# reset the default policies in the mangle table.
iptables -v -t mangle -P PREROUTING ACCEPT
iptables -v -t mangle -P OUTPUT ACCEPT
# flush all the rules in the filter and nat tables.
iptables -v -F
iptables -v -t nat -F
iptables -v -t mangle -F
# erase all chains that's not default in filter and nat table.
iptables -v -X
iptables -v -t nat -X
iptables -v -t mangle -X
# Let's go
iptables -v -P INPUT DROP
iptables -v -P OUTPUT DROP
iptables -v -P FORWARD DROP
iptables -v -A INPUT -i lo -j ACCEPT
iptables -v -A INPUT -i ${NAT} -j ACCEPT
iptables -v -A OUTPUT -o lo -j ACCEPT
iptables -v -A OUTPUT -o ${NAT} -j ACCEPT
iptables -v -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -v -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -v -A FORWARD -o ${NAT} -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -v -A FORWARD -i ${NAT} -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Разрешаем доступ из внутренней сети наружу
iptables -v -A FORWARD -i ${NAT} -o ${WAN} -j ACCEPT
# Включаем NAT
iptables -v -t nat -A POSTROUTING -o ${WAN} -s 192.168.0.2 -j MASQUERADE
# Запрещаем доступ снаружи во внутреннюю сеть
iptables -v -A FORWARD -i ${WAN} -o ${WAN} -j REJECT
# Проброс локального и VPN трафика
#iptables -v -t nat -A POSTROUTING -o ${NAT} -j MASQUERADE
#iptables -v -t nat -I POSTROUTING -o ${WAN} -j MASQUERADE
#iptables -v -t nat -I POSTROUTING -o ${LAN} -j MASQUERADE
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
iptables -v -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#Торренты - дальше сюда порты которые надо открыть подкидывать
iptables -v -A INPUT -p tcp --dport 6881:6889 -m state --state NEW -j ACCEPT
# Проброс трафика Bittorrent
# iptables -v -t nat -A PREROUTING -p tcp --dport 6881:6889 -i ${WAN} -j DNAT --to 192.168.0.10
# Пробрасываем на ssh внутреннего хоста
# iptables -v -t nat -A PREROUTING -p tcp --dport 2 -i ${WAN} -j DNAT --to 192.168.0.2:22
# ------------------------------------------------------------------------------------------
# aptitude install dnsmasq
# /etc/dnsmasq.conf
# dhcp-range=192.168.240.200,192.168.251.250,300h
# interface=eth1
ы. У меня в таком виде работает.
То что за комментами - это если пригодится...
Большое спасибо!!