2012-10-17 25 views
19

Tôi có một mạng gia đình với máy tính Linux, tất cả đều có iptables đang chạy. Tôi nghĩ rằng nó dễ dàng hơn để đặt LAN của tôi đằng sau một cổng Linux/tường lửa, vì vậy tôi đã đặt một pc (với fedora, không có gui) giữa router và LAN của tôi và iptables cấu hình. Không có vấn đề ở đây, INPUT chỉ cho phép dns một http (và một số công cụ địa phương), chuyển tiếp hoạt động tốt: LAN kết nối với internet.iptables FORWARD và INPUT

Nhưng câu hỏi của tôi là: FORWARD cho phép tất cả từ bên ngoài hoặc chỉ các cổng tôi đã định cấu hình bằng INPUT? FORWARD và INPUT có hoạt động cùng nhau hay không?

Đây là iptables của tôi:

*nat 
:PREROUTING ACCEPT [16:1336] 
:INPUT ACCEPT [14:840] 
:OUTPUT ACCEPT [30:2116] 
:POSTROUTING ACCEPT [0:0] 
-A POSTROUTING -o p1p1 -j MASQUERADE 
COMMIT 
# Completed on Tue Oct 16 09:55:31 2012 
# Generated by iptables-save v1.4.14 on Tue Oct 16 09:55:31 2012 
*filter 
:INPUT DROP [0:0] 
:FORWARD DROP [0:0] 
:OUTPUT ACCEPT [91:9888] 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
-A INPUT -p UDP --dport 53 -j ACCEPT 
-A INPUT -p TCP --dport 53 -j ACCEPT 
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -i p1p1 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -i p1p1 -p tcp -m multiport --dports 20,21,443 -j DROP 
-A INPUT -i p1p1 -p tcp --dport 5000:5100 -j DROP 
-A INPUT -i p1p1 -p icmp -m icmp --icmp-type 8 -j DROP 
-A FORWARD -s 192.168.2.0/24 -j ACCEPT 
-A FORWARD -d 192.168.2.0/24 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A OUTPUT -j LOG --log-prefix "denied out: " 

COMMIT 

p1p1 (.1.x) là nic bên ngoài của tôi, p3p1 (.2.x) là nội bộ.

Trả lời

55

INPUT, FORWARD và OUTPUT là riêng biệt. Một gói tin sẽ chỉ nhấn một trong ba chuỗi.

Nếu đích đến là đến máy chủ này, nó sẽ truy cập chuỗi INPUT. Nếu nguồn của nó là từ máy chủ này, nó sẽ chạm OUTPUT. Nếu nguồn và đích của nó là cả hai máy khác —, nó đang được định tuyến qua máy chủ — thì nó sẽ chạm vào chuỗi FORWARD.

+1

Vì vậy, nếu tôi hiểu chính xác, tôi có INPUT được bảo mật (loại), nhưng FORWARD cho phép mọi thứ thông qua cách thức hiện tại? Tôi hy vọng lưu lượng truy cập lần đầu tiên được lọc bởi INPUT và sau đó được chuyển tiếp. – Ray

+0

Giao thông từ bên ngoài, tức là. – Ray

+0

@Ray Right. Một gói đi qua hộp của bạn lượt truy cập chỉ FORWARDED. Nó không thực hiện INPUT → FORWARDED → OUTPUT. –

59

RedHat có great doc about iptables (hơi dài một chút), nhưng chủ đề bìa là phức tạp và có quá nhiều trường hợp sử dụng khác nhau mà tôi không thấy cách tránh.

iptables kernel routing

Đây là chương về FORWARD and NAT Rules. Vì nó khẳng định:

Ví dụ, nếu bạn muốn HTTP về phía trước đến yêu cầu để bạn dành riêng Apache HTTP Server tại 172.31.0.23, sử dụng lệnh sau như là người dùng root:

~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 172.31.0.23:80 

đây là những gì sẽ xảy ra:

  • cổng linux của bạn nhận được một gói từ bộ định tuyến của bạn. Header gói có:
    • nguồn: x.x.x.x:y (người gửi IP từ internet cổng & nguồn sử dụng để truyền gói tin)
    • điểm: 192.168.1.1:80 (giả sử cửa ngõ linux của bạn chỉ IP trên NIC bên ngoài, tức là p1p1)
  • cổng linux của bạn áp dụng chuỗi PREROUTING để tìm kết quả phù hợp.Giả sử rằng bạn đã gõ những gì ở trên, gói phù hợp với quy tắc và sau đó gọi (nhảy -j) với chức năng DNAT (Destination Network Address Translation) mà thay đổi địa điểm của tiêu đề gói từ ban đầu 192.168.1.1:80 đến 172.31.0.23:80.
  • sau đó, gói đến Quyết định định tuyến. Điểm đến gói tin bây giờ là 172.31.0.23:80.
    • Cổng linux của bạn tự hỏi: Có phải cho tôi (192.168.1.1:80) không? Không, vì vậy, tôi sẽ không gửi nó tới chuỗi INPUT.
    • => Tôi sẽ gửi đến chuỗi FORWARD.
  • kể từ khi bạn đã thiết lập các quy tắc để Chuyển tiếp tất cả trong mạng nội bộ của bạn (bảng filter chuỗi FORWARD), các gói tin sẽ được chuyển một cách chính xác để địa phương Apache HTTP Server của bạn (ví dụ).

Hy vọng nó sẽ giúp hiểu thêm một chút về cách định tuyến nội bộ hoạt động với iptables.

Các vấn đề liên quan