2013-02-27 18:01 by bangerlee,
32403 閱讀, 7 評論,
收藏,
編輯iptables指令可用于配置Linux的包過濾規則,常用于實作防火牆、NAT。咋一看iptables的配置很複雜,掌握規律後,其實用iptables完成指定任務并不難,下面我們通過具體執行個體,學習iptables的詳細用法。
1.删除已有規則
在新設定iptables規則時,我們一般先確定舊規則被清除,用以下指令清除舊規則:
iptables -F
(or iptables --flush)
2.設定chain政策
對于filter table,預設的chain政策為ACCEPT,我們可以通過以下指令修改chain的政策:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
以上指令配置将接收、轉發和發出包均丢棄,施行比較嚴格的包管理。由于接收和發包均被設定為丢棄,當進一步配置其他規則的時候,需要注意針對INPUT和OUTPUT分别配置。當然,如果信任本機器往外發包,以上第三條規則可不必配置。
3.屏蔽指定ip
有時候我們發現某個ip不停的往伺服器發包,這時我們可以使用以下指令,将指定ip發來的包丢棄:
BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
以上指令設定将由x.x.x.x ip發往eth0網口的tcp包丢棄。
4.配置服務項
利用iptables,我們可以對日常用到的服務項進行安全管理,比如設定隻能通過指定網段、由指定網口通過SSH連接配接本機:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
若要支援由本機通過SSH連接配接其他機器,由于在本機端口建立連接配接,因而還需要設定以下規則:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
類似的,對于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp連接配接的服務,也可以參照上述指令配置。
對于基于udp的dns服務,使用以下指令開啟端口服務:
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
5.網口轉發配置
對于用作防火牆或網關的伺服器,一個網口連接配接到公網,其他網口的包轉發到該網口實作内網向公網通信,假設eth0連接配接内網,eth1連接配接公網,配置規則如下:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
6.端口轉發配置
對于端口,我們也可以運用iptables完成轉發配置:
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
以上指令将422端口的包轉發到22端口,因而通過422端口也可進行SSH連接配接,當然對于422端口,我們也需要像以上“4.配置服務項”一節一樣,配置其支援連接配接建立的規則。
7.DoS攻擊防範
利用擴充子產品limit,我們還可以配置iptables規則,實作DoS攻擊防範:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
--litmit 25/minute 訓示每分鐘限制最大連接配接數為25
--litmit-burst 100 訓示當總連接配接數超過100時,啟動 litmit/minute 限制
8.配置web流量均衡
我們可以将一台伺服器作為前端伺服器,利用iptables進行流量分發,配置方法如下:
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80
以上配置規則用到nth擴充子產品,将80端口的流量均衡到三台伺服器。
9.将丢棄包情況記入日志
使用LOG目标和syslog服務,我們可以記錄某協定某端口下的收發包情況。拿記錄丢包情況舉例,可以通過以下方式實作。
首先自定義一個chain:
iptables -N LOGGING
其次将所有接收包導入LOGGING chain中:
iptables -A INPUT -j LOGGING
然後設定日志字首、日志級别:
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
最後将包倒向DROP,将包丢棄:
iptables -A LOGGING -j DROP
另可以配置syslog.conf檔案,指定iptables的日志輸出。