[紀錄]iptables的使用
1.正文
iptables是Linux 2.6 以後內定的防火牆。其構造主要有三條filter鍊、三條nat鍊與自訂規則為主(詳細情形請看vbird的網站介紹)。一般來說,我方電腦在Output鍊允許,而INPUT鍊拒絕連線情況下,並不代表瀏覽網頁等我方主動對方被動的操作即可順利無虞。因為即使是我方主動連線,對方主機也需要傳送TCP/IP三向交握的另外兩次封包進入主機。因此,需要對SYN之外的封包一一作INPUT規則設定才可以。以下是主要的服務開啟方式(轉自Linux 防火牆入門 - by 臥龍小三 )
Linux學習第一站:鳥哥的私房菜
OLS3的網路管理技術文件
iptables是Linux 2.6 以後內定的防火牆。其構造主要有三條filter鍊、三條nat鍊與自訂規則為主(詳細情形請看vbird的網站介紹)。一般來說,我方電腦在Output鍊允許,而INPUT鍊拒絕連線情況下,並不代表瀏覽網頁等我方主動對方被動的操作即可順利無虞。因為即使是我方主動連線,對方主機也需要傳送TCP/IP三向交握的另外兩次封包進入主機。因此,需要對SYN之外的封包一一作INPUT規則設定才可以。以下是主要的服務開啟方式(轉自Linux 防火牆入門 - by 臥龍小三 )
2.相關連結
開放某一個介面
作法如下:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
註:IPFW 或 Netfilter 的封包流向,local process 不會經過 FORWARD Chain,
因此 lo 只在 INPUT 及 OUTPUT 二個 chain 作用。
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT
IP 偽裝
使內部網路的封包經過偽裝之後,使用對外的 eth0 網卡當作代表號,對外連線。作法如下:
###-----------------------------------------------------###
# 啟動內部對外轉址
###-----------------------------------------------------###
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT --to-source $FW_IP
上述指令意指:把 172.16.0.0/16 這個網段,偽裝成 $FW_IP 出去。
虛擬主機
利用轉址、轉 port 的方式,使外部網路的封包,可以到達內部網路中的伺服主機,俗稱虛擬主機。這種方式可保護伺服主機大部份的 port 不被外界存取,只開放公開服務的通道(如 Web Server port 80),因此安全性甚高。
作法如下:
###-----------------------------------------------------###
# 啟動外部對內部轉址
###-----------------------------------------------------###
# 凡對 $FW_IP:80 連線者, 則轉址至 172.16.255.2:80
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.255.2:80
開放內部主機可以 telnet 至外部的主機
開放內部網路,可以 telnet 至外部主機。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open 外部主機 telnet port 23
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT
開放郵包轉遞通道
開放任意的郵件主機送信包給你的 Mail Server,而你的 Mail Server 也可以送信包過去。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open SMTP port 25
###-----------------------------------------------------###
# 以下是:別人可以送信給你
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT
# 以下是:你可以送信給別人
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT
開放對外離線下載信件的通道
開放內部網路可以對外部網路的 POP3 server 取信件。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open 對外部主機的 POP3 port 110
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT
開放觀看網頁的通道
開放內部網路可以觀看外部網路的網站。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open 對外部主機的 HTTP port 80
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT
開放查詢外部網路的 DNS 主機
開放內部網路,可以查詢外部網路任何一台 DNS 主機。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open DNS port 53
###-----------------------------------------------------###
# 第一次會用 udp 封包來查詢
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 若有錯誤,會改用 tcp 封包來查詢
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 開放這台主機上的 DNS 和外部的 DNS 主機互動查詢:使用 udp
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
# 開放這台主機上的 DNS 和外部的 DNS 主機互動查詢:使用 tcp
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! -y -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
開放內部主機可以 ssh 至外部的主機
開放內部網路,可以 ssh 至外部主機。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open 外部主機 ssh port 22
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 以下是 ssh protocol 比較不同的地方
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1020:1023 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1020:1023 -j ACCEPT
開放內部主機可以 ftp 至外部的主機
開放內部網路,可以 ftp 至外部主機。
作法如下:(預設 policy 為 DROP)
###-----------------------------------------------------###
# open 對外部主機 ftp port 21
###-----------------------------------------------------###
# 以下是打開命令 channel 21
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 21 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 以下是打開資料 channel 20
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 20 -d $FW_IP --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT
# 以下是打開 passive mode FTP 資料通道
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT
開放 ping
可以對外 ping 任何一台主機。
作法如下:(預設 policy 為 DROP)
iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP --icmp-type 8 -d any/0 -j ACCEPT
iptables -A INPUT -i eth0 -p icm -s any/0 --icmp-type 0 -d $FW_IP -j ACCEPT
Linux學習第一站:鳥哥的私房菜
OLS3的網路管理技術文件
