在 Ubuntu 7.10 當中,已經內建了iptables (正確的說法應該是linux kernel 2.6中已經內建)
預設的規則為允許全部封包通過
或是以指令 iptables -L 查看目前的規則

首先要說明預設的table有filter, nat, 以及mangle三個table
設定簡易的防火牆會用到filter這個table
設定NAT會用到nat這個table
下iptables指令,沒有特別指定table時,會使用filter這個table。

特別要注意的是,iptable的rule具有優先順序。
一旦遇到符合的規則,將不會再往下比對。

以下是相當簡單的範例,存成檔案並設定成可執行。之後就不用一次一次打了。
將該檔案的完整路徑放到 /etc/rc.local 這個檔案中,使得開機之後可以自動執行。
作用是讓內部網路通行。除了部份允許的封包之外,阻擋外部進來的封包。

#!/bin/sh
##### iptables.rule #####
EIF="eth0" # 對外的網路介面
IIF="eth1" # 對內的網路介面
INNET="172.16.0.0/24" # 內部子網域

# forwarding
# 讓內部網路的封包可以轉送到外部
echo "1" > /proc/sys/net/ipv4/ip_forward

# flush all rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# 定義 policy
# Policy指的是當進來的封包不屬於rule中的任何一條時,所預設的動作。
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 讓主機主動建立的連線可以進來
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 設定主機上提供的服務可讓外部網路存取
iptables -A INPUT -i $EIF -p tcp --dport 22 -j ACCEPT # ssh
iptables -A INPUT -i $EIF -p udp --dport 22 -j ACCEPT
iptables -A INPUT -i $EIF -p tcp --dport 80 -j ACCEPT # http
# ... 其餘省略

# NAT
iptables -t nat -A POSTROUTING -o $EIF -s $INNET -j MASQUERADE

參考資料:
netfilter - iptables
鳥哥的Linux私房菜 - Linux 防火牆與NAT主機

Posted by ljhuang at 痞客邦 PIXNET 留言(0) 引用(1) 人氣()


open trackbacks list Trackbacks (1)

留言列表 (0)

Post Comment

You haven’t logged in yet, please use guest status to leave message. You can also log in with above service account and leave message

other options