打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
防火牆iptables
防火牆iptables
2006-12-02 20:05


防火牆就是在管制進入到我們網域內的主機(或者可以說是網域)的資料封包的一種機制。只要能夠分析與過濾進入我們管理之網域的封包資料,就可以稱為防火牆
硬體防火牆也就是一些廠商設計好的硬體,裡面的系統軟體已經設定好了封包資料的過濾機制
Linux 系統本身提供的軟體防火牆的功能,那就是 iptables 與 TCP Wrappers 喔!
以使用防火牆對於封包的抵擋機制來進行分類     分為兩大類,分別是代理伺服器 (Proxy) 以及 IP Filter

■ iptables

『iptables 與 ipchains 兩者不能同時執行!』設定防火牆的時候,盡量在本機前面設定,不要利用遠端連線服務來設定,否則很容易產生自己將自己擋掉的重大問題!』
[root@test root]# lsmod
# 若有發現 ipchains 的字樣,表示系統不小心載入了 ipchains 了,請使用:
[root@test root]# rmmod ipchains
# 這樣就能夠移除 ipchains 了!然後載入 iptables 吧!
[root@test root]# modprobe ip_tables


§ 觀察規則

[root@test root]# iptables [-t tables] [-L] [-n]
參數說明:
-t:後面接 iptables 的 table ,例如 nat 或 filter ,如果沒有 -t table 
  的話,那麼預設就是 -t filter 這個 table 喔!
-L:列出目前的 table 的規則
-n:不進行 IP 與 HOSTNAME 的轉換,螢幕顯示訊息的速度會快很多! 
範例:
[root@test root]# iptables -L -n
[root@test root]# iptables -t nat -L -n

§ 清除規則

[root@test root]# /sbin/iptables [-t tables] [-FXZ]
參數說明:
-F :清除所有的已訂定的規則;
-X :殺掉所有使用者建立的 chain (應該說的是 tables )囉;
-Z :將所有的 chain 的計數與流量統計都歸零
範例:
[root@test root]# /sbin/iptables -F
[root@test root]# /sbin/iptables -X
[root@test root]# /sbin/iptables -Z
[root@test root]# /sbin/iptables -t nat -F 
# 請注意,如果在遠端連線的時候,『這三個指令必須要用 scripts 來連續執行』, 不然肯定『會讓您自己被主機擋在門外!』

§ 定義政策

[root@test root]# /sbin/iptables [-t tables] [-P] [INPUT,OUTPUT,FORWARD| PREROUTING,OUTPUT,POSTROUTING] [ACCEPT,DROP]
參數說明:
-P   :定義政策( Policy )。注意,這個 P 為大寫啊!
INPUT :封包為輸入主機的方向;
OUTPUT :封包為輸出主機的方向;
FORWARD:封包為不進入主機而向外再傳輸出去的方向;
PREROUTING :在進入路由之前進行的工作;
OUTPUT   :封包為輸出主機的方向;
POSTROUTING:在進入路由之後進行的工作。
範例:
[root@test root]# /sbin/iptables -P   INPUT DROP
[root@test root]# /sbin/iptables -P  OUTPUT ACCEPT
[root@test root]# /sbin/iptables -P FORWARD ACCEPT
[root@test root]# /sbin/iptables -t nat -P  PREROUTING ACCEPT
[root@test root]# /sbin/iptables -t nat -P      OUTPUT ACCEPT
[root@test root]# /sbin/iptables -t nat -P POSTROUTING ACCEPT
# 除了 INPUT 之外,其他都給他設定為接受囉!在上面的設定之後, 我們的主機發出的封包可以出去,但是任何封包都無法進入,
# 包括回應給我們送出封包的回應封包(ACK)也無法進入喔! ^_^

§ 增加與插入規則

[root@test root]# iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD] \
> [-io interface] [-p tcp,udp,icmp,all] [-s IP/network] [--sport ports]  \
> [-d IP/network] [--dport ports] -j [ACCEPT,DROP]
參數說明:
-A  :新增加一條規則,該規則增加在最後面,例如原本已經有四條規則,
    使用 -A 就可以加上第五條規則!
-I   :插入一條規則,如果沒有設定規則順序,預設是插入變成第一條規則,
    例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5
 INPUT :規則設定為 filter table 的 INPUT 鏈
 OUTPUT :規則設定為 filter table 的 OUTPUT 鏈
 FORWARD:規則設定為 filter table 的 FORWARD 鏈
 
-i         :設定『封包進入』的網路卡介面
-o      :設定『封包流出』的網路卡介面
 interface :網路卡介面,例如 ppp0, eth0, eth1....
 
-p  :請注意,這是小寫呦!封包的協定啦!
 tcp :封包為 TCP 協定的封包;
 upd :封包為 UDP 協定的封包;
 icmp:封包為 ICMP 協定、
 all :表示為所有的封包!
 
-s       :來源封包的 IP 或者是 Network ( 網域 );
--sport:來源封包的 port 號碼,也可以使用 port1:port2 如 21:23
     同時通過 21,22,23 的意思
-d      :目標主機的 IP 或者是 Network ( 網域 );
--dport:目標主機的 port 號碼;
 
-j   :動作,可以接底下的動作;
 ACCEPT :接受該封包
 DROP  :丟棄封包
 LOG  :將該封包的資訊記錄下來 (預設記錄到 /var/log/messages 檔案)
 
範例:
 
範例一:所有的來自 lo 這個介面的封包,都予以接受
[root@test root]# iptables -A INPUT -i lo -j ACCEPT
# 注意一下,因為 -d, --dport, -s, --sport 等等參數都沒有設定,這表示:
# 不論封包來自何處或去到哪裡,只要是來自 lo 這個介面,就予以接受!
# 這個觀念挺重要的,就是『沒有設定的規定,則表示該規定完全接受』的意思!
# 例如這個案例當中,關於 -s, -d...等等的參數沒有規定時!
 
範例二:來自 192.168.0.1 這個 IP 的封包都予以接受:
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.1 -j ACCEPT
# 新增一條規則,只要是來自於 192.168.0.1 的封包,不論他要去哪裡,
# 使用的是那個協定 (port) 主機都會予以接受的意思~
 
範例三:來自 192.168.1.0 這個 C Class 的網域的任何一部電腦,就予以接受!
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 -j ACCEPT
# 這個是網域的寫法喔!稍微注意一下的是,在範例二當中我們僅針對一個 IP ,
# 至於這個範例當中,則是針對整個網域來開放吶!而網域的寫法可以是:
# 192.168.1.0/24 也可以是 192.168.1.0/255.255.255.0 都能夠接受喔!
 
範例四:來自 192.168.1.25 的封包都給他丟棄去!
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.25 -j DROP
 
範例五:只要是想進入本機的 port 21 的封包就給他丟棄
[root@test root]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
 
範例六:來自 192.168.0.24 這個 IP 的封包,想要到我的 137,138,139 埠口時,都接受
[root@test root]# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.24  \
> --dport 137:139 -j ACCEPT
 
範例七:只要是接觸到我主機的 port 25 就將該封包記錄 (LOG) 下來
[root@test root]# iptables -A INPUT -p tcp --dport 25 -j LOG
# 還是請特別注意到『規則的順序排列』的問題喔!


§ iptables 的其他相關參數說明:
 
[!] --syn :這個設定僅能用於 -p tcp 的規則中,因為 TCP 封包有 syn 的旗標存在啊!當 TCP 封包存有 syn 旗標,表示這個連線是對方『主動』連過來的!
  若於 --syn 之前加上 ! 表示該封包不帶有 syn 的意思~(剛好相反之意!)
 
範例一:將來自 192.168.100.200 的主動連線封包丟棄:
[root@test root]# iptables -A INPUT -p tcp -i eth0 -s 192.168.1.235  \
> --syn -j DROP
 
--icmp-type:可以管制 ICMP 封包的某些類型!還記得我們在 網路基礎 裡面談到的 ICMP 的某些類型吧!對啦!如果您不想要讓對方 ping 到您的機器,就是利用這個項目啦!
 
範例二:別的主機 ping 我們主機時,我們主機不予以回應
[root@test root]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# 當您下達這樣的指令後,就表示未來別人對您使用 ping 的時候,我們的主機將不會回應,所以對方主機就會顯示我們主機『無法連接』的狀態!
 
-m :表示封包的狀態,狀態有底下數種:
 -m mac --mac-source aa:bb:cc:dd:ee:ff 
   這個就是我們上面提到的可以控制『網路卡卡號, MAC』的設定方法囉! 那個 aa:bb:cc:dd:ee:ff 就是網路卡的 MAC !
 -m state --state <狀態>
   有數種狀態,狀態有:
   INVALID:無效的封包,例如資料破損的封包狀態
   ESTABLISHED:已經連線成功的連線狀態;
   NEW:想要新建立連線的封包狀態;
   RELATED:這個最常用!表示這個封包是與我們主機發送出去的封包有關, 可能是回應封包或者是連線成功之後的傳送封包!這個狀態很常被設定,
    因為設定了他之後,只要未來由本機發送出去的封包,即使我們沒有設定封包的 INPUT 規則,該有關的封包還是可以進入我們主機喔!可以簡化相當多的設定規則啦!
 
範例三:讓 bb:cc:dd:aa:ee:ff 網路卡無法使用我們主機的資源
[root@test root]# iptables -A INPUT -p all -m mac --mac-source \
> 01:01:01:01:02:01 -j DROP
# 這種方式可以用來管制網路卡卡號喔!就不怕別人使用 IP 搞怪了!
 
範例四:讓已經建立或者是與我們主機有關的回應封包通過,但是讓不合法的,
    以及想要嘗試新建立的封包被抵擋在外!
[root@test root]# iptables -A INPUT -p tcp -m state  \
> --state ESTABLISHED,RELATED -j ACCEPT
[root@test root]# iptables -A INPUT -p tcp -m state  \
> --state INVALID,NEW -j DROP
# 需要設定兩條喔!至於封包狀態則可以使用逗號隔開!逗號兩邊不要有空格
 
-j <動作>:除了比較常見的 ACCEPT 與 DROP 之外,還有哪些動作?
 REDIRECT --to-ports <port number>
   這個也挺常見的,基本上,就是進行本機上面 port 的轉換就是了!
         不過,特別留意的是,這個動作僅能夠在 nat table 的 PREROUTING 以及 OUTPUT 鏈上面實行而已喔!(關於連線流程,請參考圖八)
 MASQUERADE:封包偽裝
   這個就是 NAT 主機最重要的一個機制啦!進行封包的偽裝!
 
範例五:將要求與 80 連線的封包轉遞到 8080 這個 port 
[root@test root]# iptables -t nat -A PREROUTING -p tcp  --dport 80 \
> -j REDIRECT --to-ports 8080
# 這玩意最容易在您使用了非正規的 port 來進行某些 well known 的協定, 例如使用 8080 這個 port 來啟動 WWW ,但是別人都以 port 80 來連線,
   所以,您就可以使用上面的方式來將對方對您主機的連線傳遞到 8080 囉!
 
範例六:進行封包的偽裝,將來自 192.168.0.0/24 的封包的來源 IP 偽裝成為
    本機的 ppp0 那個介面的 IP
[root@test root]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \
> -o ppp0 -j MASQUERADE

§ 紀錄與回復防火牆規則

[root@test root]# iptables-save > filename
# 將目前的防火牆機制儲存成 filename 那個檔案!該檔案為 ASCII 格式, 您可以進入查閱一下喔!
[root@test root]# iptables-restore < filename
# 將 filename 那個防火牆檔案 (注意!並不是 shell scripts 的格式) 的規則 讀入目前的 Linux 主機環境中!


■ TCP_Wrappers:

TCP Wrappers 的抵擋機制其實是以 tcpd 這支程式為主,而這支程式的主要參數檔在 /etc/hosts.allow 以及 /etc/hosts.deny 兩個檔案當中,『當某個軟體支援 tcpd (TCP Wrappers) 的功能,則當網路封包嘗試向該服務要求資料時,該網路封包將接受 TCP Wrappers 的檢驗,而檢驗的參數設定則是取自 /etc/hosts.allow 以及 /etc/hosts.deny兩個檔案』。
在預設的狀態下,/etc/hosts.allow 這個檔案的設定內容會先被讀取; 然後才會讀取 /etc/hosts.deny 的內容。


舊版的使用 tcpd 程式的語法
<服務名稱> :  <IP/network> : <action>
# 特別注意, network 可以使用 192.168.0.0/255.255.255.0 ,  但不可使用 192.168.0.0/24 !
 
範例一:
[root@test root]# vi /etc/hosts.allow
in.telnetd: 127.0.0.1 : allow
in.telnetd: 192.168.1.0/255.255.255.0 : allow
in.telnetd: .ncku.edu.tw : allow
in.ftpd:    127.0.0.1 : allow
# 允許的 127.0.0.1 這個 IP 使用本機的 telnet 及 ftp 這兩個服務! 請特別注意,那個『服務名稱』其實就是『程式檔名』喔!
 
[root@test root]# vi /etc/hosts.deny
in.telnetd: 192.168.2.3 : deny      # 將來自 192.168.2.3 對於使用本機 telnet 的權限關掉!
# 特別注意,這個語法在 xinetd 裡面時,<action> 已經被拿掉了! 所以,目前您可以使用這樣的格式:
[root@test root]# vi /etc/hosts.allow
in.telnetd: 127.0.0.1 
in.telnetd: 192.168.1.0/255.255.255.0 
in.telnetd: .ncku.edu.tw 
# 事實上,這也是 TCP Wrappers 支援的格式,所以建議您直接使用此格式即可, 亦即不需要加上 allow 或者是 deny 的動作,因為在 hosts.allow 裡面的
# 規則就是 allow 而在 hosts.deny 裡面的規則就是 deny 的意思!

在上面的語法當中,最重要的莫過於找出『服務名稱』!
ssh 這個遠端連線伺服器,而這個伺服器的啟動的 binary 可執行檔為 sshd 這個檔名的程式,所以您要讓某些來源的 IP 或主機名稱通過 TCP Wrappers 的檢驗時,就必須要:
     sshd: 192.168.0.100             並且同時需要注意 SSH 是否有支援 TCP Wrappers 喔!
您也可以使用 ALL 來代表『所有的服務』或者是『所有的來源』,例如在 /etc/hosts.deny 裡面加入:
     ALL: ALL                             代表『不論何種服務、不論來自哪裡的封包,全部都給他擋掉!』

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CentOS 6.3 NFS的安装配置、启动及mount挂载方法
CentOS下如何在防火墙中打开端口
Linux下简单实用的防火墙配置
Linux的iptables常用配置范例(1)
Software Router
(1)vsftpd主、被动模式iptables配置方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服