本文旨在簡單介紹Linux下防火墻軟件iptables
的使用及相關知識。
1. Netfilter
一般依據防火墻的作用域范圍,Linux下提供了三種防火墻機制:Netfilter(同時適用單一主機網域和區網域)、TCP Wrapper(常用于單主機網域)和Proxy Server(常用于區網域),而本文要講的是iptables
這個軟件則是由Netfilter提供的,通過分析進入主機的網絡,主要是比對封包的表頭數據比如MAC、IP等,進而決定對其放行或是阻擋。
2. iptables幾個重要概念
iptables
下定義了幾個表格,而每個表格又定義了自己的預設政策和規則,來實現不同的功能。
2.1 filter
主要跟進入的Linux本機的封包相關,且是默認的表格,主要包括如下三種類型的鏈:
- INPUT:進入本機的封包;
- OUTPUT:本機發出的封包;
- FROWARD:轉發,跟NAT表相關;
舉個簡單的例子:
iptables -A INPUT -p tcp -s 192.168.10.50 --dport 21:23 -j DROP
2.2 nat
主要是用來做源、目標地址和端口轉換的,包括如下常見的三種類型的鏈:
- PREROUTING:進入路由之前要判斷的規則(DNAT/REDIRECT),可以修改封包的目標IP;
- POSTROUTING:進入路由之后要判斷的規則(SNAT/MASQUERADE),可以修改封包的源IP;
- OUTPUT:發出的封包規則;
舉兩個相關的簡單例子:
iptables -t nat -A POSTROUTING -s 192.168.10.100 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SDAT --to-source 10.106.5.14
2.3 mangle
這個一般用的不多特別對于初學者,此處不做贅述。
3. iptables軟件的使用
3.1 預設防火墻policy
當所有設定的規則沒匹配上時,會按照預設的防火墻policy來決定流量的處理。
如下是單機最常見的防火墻預設設定:
iptables -P INPUT DROP
iptables -P OUYPUT ACCEPT
iptables -P FROWARD ACCEPT
iptable -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
3.2 規則添加格式
iptables -A <chain_name> [optional params]
默認操作filter
表,如果要添加NAT規則,需要加上參數-t nat
optional params:
-s/-d <ipaddrs>: 源/目標地址IP
-p <protocol>: 協議,常見的取值有tcp、udp、icmp、all
--sport/--dport <port>: 源/目標port
-i/-o <net_device>: 源/目標網卡設備
-j <action>: 操作,常見的取值有ACCEPT、DROP、LOG等
在實際添加防火墻規則時,要注意添加的規則順序以防有些規則根本不會生效,因為當有流量接入時,iptables會自上而下對規則進行掃描,一旦規則匹配上則停止繼續掃描。
3.3 規則保存
直接通過iptables
命令添加的規則是臨時生效的,一旦機器重啟或者關機,該規則就會失效。因此建議把規則添加到iptables的規則配置文件(比如ubuntu 14.04下/etc/iptables/rules.v4),而后通過命令iptables-restore < /etc/iptables/rules.v4
來生效。