1

Я пытаюсь настроить шлюз / маршрутизатор и, похоже, не совсем правильно понимаю iptables. Цель состоит в том, чтобы иметь частную сеть оконных боксов, которые могут общаться с WAN для HTTPS, HTTP и SSH. Я хочу, чтобы RDP был открыт для общения с Windows-компьютерами из шлюза, но я не хочу делать переадресацию портов для этого из WAN.

Прямо сейчас я делаю NAT между своими сетевыми картами с маскировкой, мой WAN-интерфейс - eth0, а моя LAN - eth1. Я могу просто вставить ssh в коробку, однако я не могу RDP на мои машины в частной сети или получить HTTP/HTTPS. Журналы говорят, что я сбрасываю пакеты с портом назначения 80/443, когда я пытаюсь подключиться к Google из коробки маршрутизатора.

В настоящее время я пытался это:

# Flushing all rules
iptables -F
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# set up nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# allow DNS lookup
for ip in $DNS
do
    echo "Allowing DNS lookups to server '$ip'"
    iptables -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT  -p udp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
    iptables -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT  -p tcp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
done
# allow http/https, ssh
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth0 -p tcp -m multiport --dports 80,443 -m state --state RELATED,ESTABLISHED -j ACCEPT
# allow private RDP
iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 3389 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -m multiport --sports 3389 -m state --state ESTABLISHED -j ACCEPT
# log for debugging
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

Единственное, что я могу понять, это то, что, поскольку я делаю преобразование адресов портов, указание портов назначения / источника на моем интерфейсе WAN не сокращает его. Любые боссы iptables, желающие сказать мне, насколько я ошибаюсь?

ОБНОВЛЕНИЕ: после прочтения моих журналов и тестирования у меня есть некоторые правила, которые, кажется, работают.

# Flushing all rules
iptables -F  
# Setting default filter policy  
iptables -P INPUT DROP  
iptables -P OUTPUT DROP  
#iptables -P FORWARD DROP  
# Allow unlimited traffic on loopback  
iptables -A INPUT -i lo -j ACCEPT  
iptables -A OUTPUT -o lo -j ACCEPT  
# set up nat  
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
# allow DNS lookup  
for ip in $DNS  
do  
        echo "Allowing DNS lookups to server '$ip'"  
        iptables -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT  
        iptables -A INPUT  -p udp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT  
        iptables -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT  
        iptables -A INPUT  -p tcp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT  

    #DNS lookups for NAT  
    iptables -A FORWARD -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT  
    iptables -A FORWARD -p udp -s $ip --sport 53 -m state --state ESTABLISHED -j ACCEPT  
    iptables -A FORWARD -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT  
    iptables -A FORWARD -p tcp -s $ip --sport 53 -m state --state ESTABLISHED -j ACCEPT  
done  

# allow service ports to be forwarded to local network
iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --dports 22,80,443,1727,8192,8194,36015 -j ACCEPT  
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --sports 22,80,443,1727,8192,8194,36015 -m state --state ESTABLISHED,RELATED -j ACCEPT  

# allow service ports out/in from WAN  
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22 -m state --state NEW,ESTABLISHED -j ACCEPT  
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT  

# allow service ports in, only when outbound connection exists  
# 80 - HTTP ( for yum )  
# 443 - HTTPS ( for yum )  
# 21 - FTP ( for yum )   
iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443,21 -m state --state NEW,ESTABLISHED -j ACCEPT  
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# allow local RDP   
iptables -A INPUT -i eth1 -p tcp --sport 3389 -m state --state ESTABLISHED -j ACCEPT  
iptables -A OUTPUT -o eth1 -p tcp -m tcp --dport 3389 -j ACCEPT  
iptables -A FORWARD -i eth1 -p tcp --dport 3389 -m state --state   ESTABLISHED,RELATED -j ACCEPT  

Я думаю, что последнее правило FORWARD для 3389 не нужно, но я еще не проверял это. Чтобы ответить на некоторые из первых комментариев:

    [root@localhost ~]# iptables -L -n -v  
Chain INPUT (policy DROP 0 packets, 0 bytes)  
 pkts bytes target     prot opt in     out     source               destination           
   79  5224 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 22 state NEW,ESTABLISHED   
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED   
    0     0 ACCEPT     tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp spt:3389 state ESTABLISHED   
    1   229 LOGGING    all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)  
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  eth1   eth0    0.0.0.0/0            0.0.0.0/0           multiport dports 22,80,443,1727,8192,8194,36015
    0     0 ACCEPT     tcp  --  eth0   eth1    0.0.0.0/0            0.0.0.0/0           multiport sports 22,80,443,1727,8192,8194,36015 state RELATED,ESTABLISHED   
    0     0 ACCEPT     tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3389 state RELATED,ESTABLISHED   
    0     0 LOGGING    all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
   68  7488 ACCEPT     tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           tcp spt:22 state NEW,ESTABLISHED   
    0     0 ACCEPT     tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,21 state NEW,ESTABLISHED   
    0     0 ACCEPT     tcp  --  *      eth1    0.0.0.0/0            0.0.0.0/0           tcp dpt:3389 
    0     0 LOGGING    all  --  *      *       0.0.0.0/0            0.0.0.0/0             

Chain LOGGING (3 references)
 pkts bytes target     prot opt in     out     source               destination           
    1   229 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 2/min burst 5 LOG flags 0 level 6 prefix `IPTables-Dropped: ' 
    1   229 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0  

[root@localhost ~]# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 1 packets, 60 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 1 packets, 60 bytes)
 pkts bytes target     prot opt in     out     source               destination  

Я удалил chunks re: мои DNS-серверы из этого вывода. Единственное добавление, которое я хотел бы сделать к этой конфигурации, - это ограничить доступ ssh к подсети ip, но я сделаю это в последнюю очередь, поскольку это должно быть тривиально. Спасибо за комментарии, надеюсь, ничто не кажется неуместным с тем, что у меня есть!

0