Câu hỏi iptables - quy tắc NAT / PAT cho HTTPS, HTTP, RDP, SSH


Tôi đang cố gắng để thiết lập một gateway / router hộp và dường như không thể có được iptables của tôi khá đúng. Mục đích là để có một mạng riêng của các cửa sổ hộp có thể nói chuyện với WAN cho HTTPS, HTTP và SSH. Tôi muốn RDP mở để nói chuyện với các cửa sổ máy từ hộp gateway, nhưng không muốn làm bất kỳ cổng chuyển tiếp cho rằng từ WAN.

Ngay bây giờ tôi làm NAT giữa các card mạng của tôi với giả mạo, giao diện WAN của tôi là eth0, và mạng LAN của tôi là eth1. Tôi có thể ssh vào hộp tốt, tuy nhiên tôi không thể RDP vào máy của tôi trên mạng riêng, hoặc nhận được HTTP / HTTPS. Các bản ghi nói rằng tôi đang bỏ gói với cổng đích 80/443 khi tôi cố gắng kết nối với google từ hộp bộ định tuyến.

Hiện tại những gì tôi đã cố gắng là:

# 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

Điều duy nhất tôi có thể tìm được là vì tôi đang làm dịch địa chỉ cổng, xác định các cổng đích / nguồn trên giao diện WAN của tôi không cắt nó. Bất kỳ ông chủ iptables sẵn sàng cho tôi biết bao nhiêu tôi nhận được sai?

CẬP NHẬT: Sau khi đọc qua nhật ký và kiểm tra của tôi, tôi có một số quy tắc có vẻ như đang hoạt động.

# 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  

Tôi nghĩ rằng quy tắc FORWARD cuối cùng cho 3389 là không cần thiết nhưng tôi chưa thử nghiệm. Để giải quyết một số nhận xét đầu tiên:

    [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  

Tôi đã loại bỏ các khối lại: máy chủ DNS của tôi từ đầu ra này. Việc bổ sung duy nhất tôi muốn thực hiện cho cấu hình này là để hạn chế truy cập ssh đến một subnet của ip, nhưng tôi sẽ làm điều đó cuối cùng vì nó cần được tầm thường. Cảm ơn các ý kiến ​​cho đến nay, hy vọng không có gì có vẻ ngoài nơi với những gì tôi có!


1
2018-02-17 19:08


gốc


Bạn có thể làm một iptables -nvL và iptables -nvL -t nat và thêm kết quả đầu ra cho câu hỏi của bạn? Cảm ơn. :) - xpac
Thực hiện lệnh trên, chúng ta cần xem cách iptables nhìn thấy các quy tắc, bạn chỉ cần đặt chúng trong một đơn đặt hàng podge lộn xộn. - cybernard
Theo đầu vào, điều này phải là quy tắc # 1 iptables -A INPUT -m conntrack -j ACCEPT --ctstate LIÊN QUAN, THÀNH LẬP  Tôi không biết thiết lập DNS của bạn, nhưng trong tất cả các khả năng tất cả các quy tắc DNS của bạn là một sự lãng phí thời gian. iptables biết bạn đã gửi một yêu cầu DNS và mong đợi một phản hồi, do đó nó rơi theo quy tắc RELATED, ESTABILISHED và các quy tắc dns bạn đang lãng phí không gian. - cybernard
XÓA liên quan, được thiết lập từ tất cả các quy tắc khác trong ĐẦU VÀO chuỗi. - cybernard
THẤT ​​BẠI --sports 3389   các cổng nguồn được gán ngẫu nhiên trên chuỗi INPUT và do đó chỉ có các vấn đề đích. - cybernard


Các câu trả lời: