การเขียน firewall หรือ iptables ใน debian เพื่อให้เครื่องๆเดียวกันทำหน้าเป็น Websever และ internet gateway

"ขอบคุณมากๆ สำหรับทุกคำตอบนะครับ" คือผมต้องการให้เครื่องทำหน้าที่ทั้ง webserver และ internet gateway และ dhcp ด้วยครับ ผมติดตั้ง linux เสร็จแล้วติดตั้ง package ตามทีต้องการครับ ปัญหาติดอยู่ที่ว่าถ้าให้ แชร์ internet(ใช้ iptables แชร์ internet) ได้เว็บเข้าจากภายนอกไม่ได้แต่เข้าจากภายในเข้าได้แต่ถ้ายกเลิก iptables ออกไม่ไห้ run จะเข้าเน็ตจากภายนอกได้ ถ้าต้องการเขียน file iptables ให้เข้าเน็ตจากภายนอกได้และภายในก็เข้าได้และสามารถ แชร์ internet ได้จะต้องเขียนอย่างไรครับขอบคุณมากครับ(ไม่ค่อยรูเรื่อง linux มากนักครับ ถ้ามีวิธีอื่นช่วยแนะนำด้วยครับ)
ไฟล์ iptables ที่ใช้อยู่ครับ แชร์ internet ได้เว้บเข้าจาก ip local ได้แต่จาก ip ภายนอกไม่ได้ครับ

#----Start script------#

#Make Static route
route add -net 10.10.10.0 netmask 255.255.255.0 gw 10.10.10.100

# eth0 is connected to the internet.
# eth1 is connected to a private sunet.
PRIVATE=10.10.10.0/24
# Loopback address
LOOP=127.0.0.1

# Delete old iptables rules
# and temporarily block all traffic.
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -F

# Set default policies
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Prevent external packets from using loopback addr
iptables -A INPUT -i eth0 -s $LOOP -j DROP
iptables -A FORWARD -i eth0 -s $LOOP -j DROP
iptables -A INPUT -i eth0 -d $LOOP -j DROP
iptables -A FORWARD -i eth0 -d $LOOP -j DROP

# Anything coming from the Internet should have a real Internet address
iptables -A FORWARD -i eth0 -s 10.10.10.0/24 -j DROP
iptables -A INPUT -i eth0 -s 10.10.10.0/24 -j DROP

# Block outgoing NetBios (if you have windows machines running
# on the private subnet). This will stop local windows machines from
# broadcasting themselves to the internet.
# iptables -A OUTPUT -p tcp --sport 135:139 -j DROP
# iptables -A OUTPUT -p udp --sport 135:139 -j DROP
# iptables -A FORWARD -p tcp --sport 135:139 -j DROP
# iptables -A FORWARD -p udp --sport 135:139 -j DROP

#Block 445
# iptables -A OUTPUT -p tcp --sport 445 -j DROP
# iptables -A OUTPUT -p udp --sport 445 -j DROP
# iptables -A FORWARD -p tcp --sport 445 -j DROP
# iptables -A FORWARD -p udp --sport 445 -j DROP
#Check source address validity on packets going to internet
# iptables -A FORWARD -s ! $PRIVATE -i eth1 -j DROP

# Allow local loopback
iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT

# Allow incoming pings (can be disabled)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Allow services such as www , ssh and others(can be disabled)
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 161 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 554 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT

# Allow packets from private subnets
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
#===================================================================================

#Block
#acl msn_user src "/etc/squid3/msn_user_list.txt"
#acl msn_server reg_minme_type application/x-msn-messenger
#acl msn_server2 reg_mime_type ^application/x-msn-messenger$
#acl msn_url url_regex -i gateway.dll
#
#Block msn
#iptables add 2001 deny tcp from any to any 1800-60000 # msn
#iptables add 2002 deny udp from any to any 1800-60000 # msn
#iptables add 2003 deny tcp from any to any 1080 # msn
#iptables add 2004 deny udp from any to any 1080 # msn
#iptables add 100 deny tcp any to any 6667 # prich
#iptables add 150 deny tcp any to any 4000
#
iptables -A FORWARD -p tcp --dport 1863 -j DROP
iptables -A FORWARD -p udp --dport 1863 -j DROP
# # qq
#iptables -A FORWARD -p TCP --dport 5000:5010 -j REJECT
#iptables -A FORWARD -d cs.yahoo.com -j REJECT
#iptables -A FORWARD -b scsa.yahoo.com -j REJECT
#
# Keep state of connections from local machine and private subnets
iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Masquerade local subnet
echo 1 > /proc/sys/net/ipv4/ip_forward

#iptables -F
iptables -t nat -F

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
#enable NAT on output device
iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE

#Allow transparent proxy device
#iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j dnat -- to -destination 10.10.10.0/24:3128
#iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to -port 3128
# Redirect to squid
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

#----End script------#

...
#iptables -F
iptables -t nat -F

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 <-- (1)
#enable NAT on output device
iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE

#Allow transparent proxy device
#iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j dnat -- to -destination 10.10.10.0/24:3128
#iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to -port 3128
# Redirect to squid
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

(1) บรรทัดนี้ ตั้งใจหรือเปล่าครับ เพราะเป็นการ Redirect TCP/80 (Web) ไปยัง TCP/3128 (Squid Cache/Proxy) ซึ่งหมายความว่า ทุกการร้องขอเพื่อติดต่อ Web server จาก Internet (eth0) จะถูกส่งเข้า Squid หมด
ถ้าไม่ได้ตั้งใจ ก็เอาบรรทัดนี้ออก ก็น่าจะเข้า Web จากข้างนอกได้ครับ
___
Neutron: Linux Addict!

ขอบคุณมากครับ

/sbin/ip ro add 202.57.155.216 via 192.168.100.253 table 101
/sbin/ip ro add 202.57. 70-236 155.217 via 192.168.100.254 table 101
/sbin/ip ro add 66.94.230.41 via 192.168.100.253 table 101
/sbin/ip ro add 66.94.230.42 via 192.168.100.254 table 101
/sbin/ip route add default via 192.168.100.253 table 101

Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้