Tôi đang cố gắng tìm ra cách NAT và iptables hoạt động. Trong khi tôi đang trong giai đoạn thử và sai khi tìm hiểu về nó, tôi đã tìm thấy hai howtos hơi mâu thuẫn.
Một cách sử dụng một tập lệnh để gọi iptables
các quy tắc lần lượt. Tập lệnh dường như được đặt tên và lưu trữ sao cho nó được thực thi sớm trong quá trình khởi động hệ thống và tôi nghĩ một vấn đề có thể là các tập lệnh khác có thể được gọi sau nó và hoàn tác ý định của nó. Tôi thậm chí nghĩ rằng tôi đã làm điều này một lần một cách tình cờ khi tôi lưu và đổi tên tập lệnh gốc (00-tường lửa) bằng cách sử dụng bản sao lưu (00-tường lửa cũ). Kịch bản ví dụ hình thành nên cách:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Don't forward from the outside to the inside.
iptables -A FORWARD -i eth1 -o eth1 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
Một cách khác không sử dụng tập lệnh mà là tập tin có một số quy tắc lọc được xác định. Nó trông như thế này:
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
# Now you should read up on iptables rules and consider whether ssh access
# for everyone is really desired. Most likely you will only allow access from certain IPs.
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-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:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Những ưu và nhược điểm của cả hai cách thiết lập iptables là gì? Thông tin cơ bản được đánh giá cao vì tôi khá mới đối với toàn bộ. Ví dụ: tôi không biết ai đang đọc tệp từ hướng dẫn sau và cách xử lý. Cảm giác của tôi cho tôi biết cách thứ hai gợi ý một giải pháp tốt hơn, nhưng tại sao chính xác?