iptables學習筆記

1、概念

iptables有2個表:filter和nat。前者用於過濾,後者是nat用的。

iptables還有4個鏈:INPUT、FORWARD、PREROUTING、POSTROUTING。

前兩者對應於filter表,INPUT匹配目的IP是本機的數據包,FILTER匹配穿過本機的數據包。

PREROUTING位於NAT表,用於修改目的地址(DNAT);POSTROUTING用於修改源地址(SNAT)。

2、基本命令

命令的格式是:

iptables  -t  [表名]  [操作命令]  [操作的鏈名]  [規則號碼(可選)]  [匹配條件(可選)]  -j  [匹配後的動作]

(1)操作命令

操作命令有:-A -I -D -R -P -F。

-A:追加到最後一條規則,如:iptables -t filter -A INPUT -j DROP。匹配所有本機數據包,丟棄。

-I:插入一條規則,如:iptables -t filter -A INPUT 3 -j DROP。在filter表中插入爲第3條記錄,作用同上。

-D:刪除一條規則,如:iptables -D INPUT 3。在filter表中刪除第3條規則。

-R:替換規則,用的不多,不學習了。

-P:設置某個鏈的默認動作,如:iptables -P INPUT DROP。如果沒有匹配規則,則按此處理,丟棄所有包。

-F:清空規則,但仍保留默認規則!設置過-P後,一定小心使用-F!

-L:查詢。

(2)匹配條件

-i <網絡接口(入)>,如:-i eth0,匹配從eth0進來的所有數據。

-o <網絡接口(出)>,如:-o eth0,匹配從eth0出去的所有數據。

-s <來源地址(主要爲IP)>,如:-s 192.168.0.1,匹配來自192.168.0.1的數據包。

-d <目的地址(主要爲IP)>,如:-d 192.168.0.2,匹配發往192.168.0.2的數據包。

-p <協議(tcp/udp/icmp)>,如:-p tcp;-p udp;-p icmp 8。最後一個8表示icmp類型即ping。

–sport <源端口>,如:–sport  1000,匹配源端口是1000的。

–dport <目的端口>,如:–dport  1000:3000,匹配目的端口是1000到3000的。

上述匹配條件可以組合使用,但是port必須配合p使用!

(3)處理動作

-j ACCEPT,允許數據包通過本鏈路(不再繼續匹配)。

-j DROP,阻止通過本鏈(不再繼續匹配)。

-j SNAT –to IP(IP池),源地址NAT轉換,對應POSTROUTING鏈。如將內網192.168.0.0地址修改成1.1.1.1(地址 池):iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT 1.1.1.1(1.1.1.1-1.1.1.10地址池)

-j DNAT –to IP(IP池),目的地址NAT轉換,對應PREROUTING鏈。類似SNAT,不再舉例。

(4)附加模塊

-m state,匹配狀態,NEW(區別於TCP)、ESTABLISTHED(已連接)、RELEASED、INVALID(無法識別)。

-m mac –macsource MACADDRESS,匹配MAC地址。iptables -A FORWARD -m –mac-source xx:xx:xx:xx:xx:xx -j DROP。

-m limmit,用一定速率匹配,-m limit –limit 50/s,只是匹配,非限制。

-m multiport,匹配多個端口

3、簡單的服務器防護

#四號程序員, http://www.coder4.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
#clean
/sbin/iptables -F
#allow lo
/sbin/iptables -A INPUT -i lo -j ACCEPT
#allow already connected
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#allow all output
/sbin/iptables -A OUTPUT -j ACCEPT
#white list ip
/sbin/iptables -A INPUT -s xx.xx.xx.xx -j ACCEPT
#ping/http/https/ssh
/sbin/iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#default drop
/sbin/iptables -A INPUT -j REJECT
/sbin/iptables -A FORWARD -j REJECT

繼續參考:http://www.vpser.net/security/linux-iptables.html

屏蔽IP

#四號程序員, http://www.coder4.com
1
2
3
4
5
6
7
8
9
10
11
12
#如果只是想屏蔽IP的話“3、開放指定的端口”可以直接跳過。
#屏蔽單個IP的命令是
/sbin/iptables -I INPUT -s 123.45.6.7 -j DROP
#封整個段即從123.0.0.1到123.255.255.254的命令
/sbin/iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即從123.45.0.1到123.45.255.254的命令
/sbin/iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即從123.45.6.1到123.45.6.254的命令是
/sbin/iptables -I INPUT -s 123.45.6.0/24 -j DROP

查看、刪除已經添加的規則

#四號程序員, http://www.coder4.com
1
2
3
4
5
6
#查看
/sbin/iptables -L -n
#刪除
#格式 iptables -L -n --line-numbers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章