LinuxForum.Fans
Тема

Ошибка в правилах iptables

Автор: waldi 8 сообщений 4046 просмотров
#114014

Делаю отладку правил 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
подвешивают сервер?

#114027

*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 А лучше опиши задачу проще написать с нуля.

#114054


А лучше опиши задачу проще написать с нуля.

Задача для спеца крайне проста
Есть сервер 168.192.0.1 (он же шлюз для выхода в инет через eth0) локально соединенный с клиентской машиной 168.192.0.2 через eth1
Сейчас правила iptables на сервере пусты, есть выход с сервера в нет, есть выход из локальной машины в нет через сервер(он же шлюз) и есть связь локальной машины с сервером(шлюзом) по портам 22,80
Нужно создать файл /etc/iptables.up.rules для сервера, чтобы сохранились все вышеописанные возможности плюс чтобы этими правилами закрыть на вход на сервере порты, например, такие 143,3306
Это мне нужно, чтобы отладить правила на боевой машине, к которой у меня есть физический доступ, прежде чем бросать их на удаленный сервер

#114135

хорошо smile скрипт вечером выложу
какие порты открыть?

#114612

Огромное спасибо!
Извините за задержку с ответом, праздник, с Рождеством Вас!!!
Открыть надо порты 22,25,80,110

#114619

Завтра выложу полностью. А так вот мой может из него что выкуришь.

text

 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
Ток это временно у меня отладка сервера).

#114948

Редактировать не буду, может вот это под себя отредактируешь,
закрываем наружу все, потом открываем что надо....

text

#!/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

ы. У меня в таком виде работает.
То что за комментами - это если пригодится...

#115002

Большое спасибо!!

Войдите или зарегистрируйтесь, чтобы ответить.