iptables 學習

http://tech.ccidnet.com/art/9513/20070601/1098119_1.html    實例
 http://www.jb51.net/os/RedHat/68744.html 開啓關閉設置
http://gehailong.blog.51cto.com/765312/263904 參數、原理 先看原理 再學設置 最後實例
http://tech.ccidnet.com/art/1099/20080429/1434761_1.html 如何用iptables來防止web服務器被CC攻擊
http://linux.ccidnet.com/art/3067/20060714/630395_1.html   一句一句解說 iptables的詳細中文手冊
http://linux.ccidnet.com/art/737/20060705/596613_1.html
iptables 入門
iptables限制同一IP鏈接數

經常使用到的iptables腳本


LVM
 
查當前iptables狀態/停用/啓用  service iptables status/stop/start

防火牆類型

49.IPTABLES參數表明什麼?

Command html

-A, –append linux

Example web

iptables -A INPUT …shell

Explanation centos

在所選擇的鏈末添加規則。當源地址或目的地址是以名字而不是ip地址的形式出現時,若這些名字能夠被解析爲多個地址,則這條規則會和全部可用的地址結合。安全

Command 服務器

-D, –delete 網絡

Example app

iptables -D INPUT –dport 80 -j DROP或iptables -D INPUT 1ssh

Explanation 

從所選鏈中刪除規則。有兩種方法指定要刪除的規則:一是把規則完完整整地寫出來,再就是指定規則在所選鏈中的序號(每條鏈的規則都各自從1被編號)。

Command 

-R, –replace 

Example 

iptables -R INPUT 1 -s 192.168.0.1 -j DROP 

Explanation 

在所選中的鏈裏指定的行上(每條鏈的規則都各自從1被編號)替換規則。它主要的用處是試驗不一樣的規則。當源地址或目的地址是以名字而不是ip地址的形式出現時,若這些名字能夠被解析爲多個地址,則這條command會失敗。

Command 

-I, –insert 

Example 

iptables -I INPUT 1 –dport 80 -j ACCEPT

Explanation 

根據給出的規則序號向所選鏈中插入規則。若是序號爲1,規則會被插入鏈的頭部,其實默認序號就是1。

Command 

-L, –list 

Example 

iptables -L INPUT 

Explanation 

顯示所選鏈的全部規則。若是沒有指定鏈,則顯示指定表中的全部鏈。若是什麼都沒有指定,就顯示默認表全部的鏈。精確輸出受其它參數影響,如-n 和-v等參數,下面會介紹。

Command 

-F, –flush 

Example 

iptables -F INPUT

Explanation 

清空所選的鏈。若是沒有指定鏈,則清空指定表中的全部鏈。若是什麼都沒有指定,就清空默認表全部的鏈。固然,也能夠一條一條地刪,但用這個command會快些。

Command 

-Z, –zero 

Example 

iptables -Z INPUT 

Explanation 

把指定鏈(如未指定,則認爲是全部鏈)的全部計數器歸零。

Command 

-N, –new-chain 

Example 

iptables -N allowed 

Explanation 

根據用戶指定的名字創建新的鏈。上面的例子創建了一個名爲allowed的鏈。注意,所用的名字不能和已有的鏈、target同名。

Command 

-X, –delete-chain 

Example 

iptables -X allowed 

Explanation 

刪除指定的用戶自定義鏈。這個鏈必須沒有被引用,若是被引用,在刪除以前你必須刪除或者替換與之有關的規則。若是沒有給出參數,這條命令將會刪除默認表全部非內建的鏈。

Command 

-P, –policy 

Example 

iptables -P INPUT DROP

Explanation 

爲鏈設置默認的target(可用的是DROP 和ACCEPT,若是還有其它的可用,請告訴我),這個target稱做策略。全部不符合規則的包都被強制使用這個策略。只有內建的鏈纔可使用規則。但內建的鏈和用戶自定義鏈都不能被做爲策略使用,也就是說不能象這樣使用:iptables -P INPUT allowed(或者是內建的鏈)。

Command 

-E, –rename-chain 

Example 

iptables -E allowed disallowed

Explanation 

對自定義的鏈進行重命名,原來的名字在前,新名字在後。如上,就是把allowed改成disallowed。這僅僅是改變鏈的名字,對整個表的結構、工做沒有任何影響



防火牆策略通常分爲兩種,一種叫「通」策略,一種叫「堵」策略,通策略,默認門是關着的,必需要定義誰能進堵策略則是,大門是洞開的,可是你必須有身份認證,不然不能進。因此咱們要定義,讓進來的進來,讓出去的出去,因此通,是要全通,而堵,則是要選擇。當咱們定義的策略的時候,要分別定義多條功能,其中:定義數據包中容許或者不容許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。爲了讓這些功能交替工做,咱們制定出了「表」這個定義,來定義、區分各類不一樣的工做功能和處理方式。
 
service iptables restart |start |stop |save #重啓 打開 中止. 保存(臨時生效的規則寫入配置文件變成永久生效)
iptables  -F      //清空全部規則
 
iptables  -X     //清空全部自定義規則
 
iptables  -Z     //清空計數器


  配置文件:/etc/sysconfig/iptables  

#將全部iptables以序號標記顯示
  iptables -L -n --line-numbers
#好比要刪除INPUT裏序號爲8的規則,執行:
  iptables -D INPUT 8
#iptables的開機啓動及規則保存        CentOS上可能會存在安裝好iptables後,iptables並不開機自啓動,能夠執行一下:
  chkconfig –level 345 iptables on


# 禁ping
  iptables -I INPUT -i eth0 -p icmp -s 0/0 -d 0/0 -j DROP       
  iptables -A OUTPUT -j DROP   # 禁止全部訪問   ssh也不能訪問 ping也不行
#容許訪問80端口   22端口也同樣
  iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#禁止其餘未容許的規則訪問
iptables -A INPUT -j REJECT (注意:若是22端口未加入容許規則,SSH連接會直接斷開。)
iptables -A FORWARD -j REJECT
iptables -P INPUT DROP #禁止全部input         給ssh開後門 iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
 
 
 
 
 
上面三個文章   有些 -  ‘    等可能出現符號爲中文

一.主要知識點:

1. Iptables錶鏈結構
2. 數據包過濾流程
3. Iptables書寫規則
4. Iptables條件匹配
5. Iptables數據包控制
6. Iptables七層過濾
7. Iptables腳本
二.具體的知識點介紹
1. Iptables 錶鏈結構
1)默認的4個規則表
*          raw表:肯定是否對該數據包進行狀態跟蹤
*          mangle表:爲數據包設置標記
*          nat表:修改數據包中的源、目標IP地址或端口
*          filter表:肯定是否放行該數據包(過濾)
2)默認的5種規則鏈
*          INPUT:處理入站數據包
*          OUTPUT:處理出站數據包
*          FORWARD:處理轉發數據包
*          POSTROUTING鏈:在進行路由選擇後處理數據包
*          PREROUTING鏈:在進行路由選擇前處理數據包
2.  數據包過濾流程
規則表間的優先順序
*          依次爲:raw à mangle à nat à filter
規則鏈間的匹配順序
*          入站數據:PREROUTING à INPUT
*          出站數據:OUTPUT à POSTROUTING
*          轉發數據:PREROUTING à FORWARD à POSTROUTING
如圖:
 

3. Iptables 書寫規則
iptables命令的語法格式
*          iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動做或跳轉]
幾個注意事項
*          不指定表名時,默認表示filter表
*          不指定鏈名時,默認表示該表內全部鏈
*          除非設置規則鏈的缺省策略,不然須要指定匹配條件
清除規則
*          -D:刪除指定位置或內容的規則
*          -F:清空規則鏈內的全部規則
*          -Z:清空計數器
自定義規則鏈
*          -N:建立一條新的規則鏈
*          -X:刪除自定義的規則鏈
其餘
*          -h:查看iptables命令的使用幫助
例如:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy DROP)
num target     prot opt source               destination
1    ACCEPT     udp -- anywhere             anywhere
2    ACCEPT     icmp -- anywhere             anywhere
3    ACCEPT     tcp -- anywhere             anywhere
 
4. Iptables 條件匹配
1)通用條件匹配
協議匹配
*          使用「-p 協議名」的形式
*          協議名可以使用在「/etc/protocols」文件中定義的名稱
*          經常使用的協議包括tcp、udp、icmp等
地址匹配
*          使用「-s 源地址」、 「-d 目標地址」的形式
*          地址能夠是單個IP地址、網絡地址(帶掩碼長度)
接口匹配
*          使用「-i 網絡接口名」、 「-o 網絡接口名」的形式,分別對應接收、發送數據包的網絡接口
例如:
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@localhost ~]# iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP
2)Iptables隱含條件匹配
端口匹配
*          使用「--sport 源端口」、「--dport 目標端口」的形式
*          採用「端口1:端口2」的形式能夠指定一個範圍的端口
TCP標記匹配
*          使用「--tcp-flags 檢查範圍  被設置的標記」的形式
*          如「--tcp-flags SYN,RST,ACK SYN」表示檢查SYN、RST、ACK這3個標記,只有SYN爲1時知足條件
ICMP類型匹配
*          使用「--icmp-type ICMP類型」的形式
*          ICMP類型可使用類型字符串或者對應的數值,例如Echo-Request、Echo-Reply
例如:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
3)Iptables擴展條件匹配
MAC地址匹配
*          使用「-m mac」結合「--mac-source MAC地址」的形式
多端口匹配
*          使用「-m multiport」結合「--sports 源端口列表」或者「--dports 目標端口列表」的形式
*          多個端口之間使用逗號「,」分隔,連續的端口也可使用冒號「:」分隔
IP地址範圍匹配
*          使用「-m iprange」結合「--src-range 源IP範圍」或者「--dst-range 目標IP範圍」 的形式
*          以「-」符號鏈接起始IP地址、結束IP地址
例如:
[root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
5.  Iptables 數據包控制
常見的數據包處理方式
*          ACCEPT:放行數據包
*          DROP:丟棄數據包
*          REJECT:拒絕數據包
*          LOG:記錄日誌信息,並傳遞給下一條規則處理
*          用戶自定義鏈名:傳遞給自定義鏈內的規則進行處理
*          SNAT:修改數據包的源地址信息
*          DNAT:修改數據包的目標地址信息
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m limit --limit   3/minute --limit-burst 8 -j LOG
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT   --to-source 218.29.30.31
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
[root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6(:80)
6. Iptables 七層過濾
1). 總體實現過程
*          添加內核補丁,從新編譯內核,並以新內核引導系統
*          添加iptables補丁,從新編譯安裝iptables
*          安裝l7-protocols協議定義包
*          使用iptables命令設置應用層過濾規則
2). 使用的軟件包列表
*          Linux內核源碼包:linux-2.6.28.8.tar.bz2
*          iptables源碼包:iptables-1.4.2.tar.bz2
*          layer7補丁源碼包:netfilter-layer7-v2.21.tar.gz
*          協議定義包:l7-protocols-2009-05-10.tar.gz
3). layer7應用層協議匹配
*          匹配格式:-m layer7 --l7proto 協議名
*          支持如下常見應用層協議的過濾
*           qq:騰訊公司QQ程序的通信協議
*           msnmessenger:微軟公司MSN程序的通信協議
*           msn-filetransfer:MSN程序的文件傳輸協議
*           bittorrent:BT下載類軟件使用的通信協議
*           xunlei:迅雷下載工具使用的通信協議
*           edonkey:電驢下載工具使用的通信協議
*          其餘各類應用層協議:ftp、http、dns、imap、pop3……
4). 規則示例:過濾使用qq協議的轉發數據包
*           iptables -A FORWARD -m layer7 --l7proto qq -j DROP
 
7. Iptables 腳本
防火牆腳本的通常結構
1).設置網段、網卡、IP地址等變量
2).加載包過濾相關的內核模塊
*           FTP相關:ip_nat_ftp、ip_conntrack_ftp
3).確認開啓路由轉發功能
*           方法1:/sbin/sysctl -w net.ipv4.ip_forward=1
*           方法2:echo 1 > /proc/sys/net/ipv4/ip_forward
*           方法3:修改/etc/sysctl.conf,設置 net.ipv4.ip_forward = 1
4).用於添加的具體防火牆規則內容
*           清空原有規則,創建新的規則
例如:
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
iptables -F
iptables -X
iptables -Z
#------------------------default rule ------------------------------
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#------------------------limit packet per second------------------------------
/sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m limit --limit 12/min --limit-burst 2 -j DROP
#------------------------ssh rule -------------------------------------------
iptables -t filter -A   INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
#------------------------www-ftp-mail-dns rule --------------------------------
iptables -t filter -A   INPUT -i   eth0 -p tcp --dport 80     -j ACCEPT
iptables -t filter -A   OUTPUT -o eth0 -p tcp --sport 80     -j ACCEPT
#-------------------------ICMP rule ------------------------------------------
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

本文出自 「龍哥」 博客,請務必保留此出處http://gehailong.blog.51cto.com/765312/611157

 

 

一、安裝iptables防火牆
怎麼知道系統是否安裝了iptables?執行iptables -V,若是顯示如:
iptables v1.3.5
說明已經安裝了iptables。
若是沒有安裝iptables須要先安裝,執行:
yum install iptables

在Linux中設置防火牆,以CentOS爲例,打開iptables的配置文件:

vi /etc/sysconfig/iptables
經過/etc/init.d/iptables status命令查詢是否有打開80端口,若是沒有可經過兩種方式處理:
1.修改vi /etc/sysconfig/iptables命令添加使防火牆開放80端口

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

2.關閉/開啓/重啓防火牆

/etc/init.d/iptables stop #start 開啓 #restart 重啓

3.永久性關閉防火牆

chkconfig --level 35 iptables off /etc/init.d/iptables stop iptables -P INPUT DROP

4.打開主動模式21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

5.打開被動模式49152~65534之間的端口

iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

所有修改完以後重啓iptables:
service iptables restart
你能夠驗證一下是否規則都已經生效:
iptables -L
經過文章的介紹,咱們清楚的知道了CentOS下配置iptables防火牆的過程,但願你們都能掌握它!

二、清除已有iptables規則
iptables -F 清除預設表filter中的全部規則鏈的規則
iptables -X 清除預設表filter中使用者自定鏈中的規則
iptables -Z
三、開放指定的端口
#容許本地迴環接口(即運行本機訪問本機)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 容許已創建的或相關連的通行
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#容許全部本機向外的訪問
iptables -A OUTPUT -j ACCEPT
# 容許訪問22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#容許訪問80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#容許FTP服務的21和20端口
iptables -A INPUT -p tcp –dport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#若是有其餘端口的話,規則也相似,稍微修改上述語句就行
#禁止其餘未容許的規則訪問
iptables -A INPUT -j REJECT (注意:若是22端口未加入容許規則,SSH連接會直接斷開。)
iptables -A FORWARD -j REJECT
執行完後,這些配置就像用命令配置IP同樣,重起就會失去做用。必須執行如下命令進行保存。
/etc/rc.d/init.d/iptables save
四、屏蔽IP
#若是隻是想屏蔽IP的話「三、開放指定的端口」能夠直接跳過。
#屏蔽單個IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整個段即從123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即從123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即從123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
五、查看已添加的iptables規則
iptables -L -n
v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數
x:在 v 的基礎上,禁止自動單位換算(K、M)
n:只顯示IP地址和端口號,不將ip解析爲域名
六、刪除已添加的iptables規則
將全部iptables以序號標記顯示,執行:
iptables -L -n --line-numbers
好比要刪除INPUT裏序號爲8的規則,執行:
iptables -D INPUT 8
七、iptables的開機啓動及規則保存
CentOS上可能會存在安裝好iptables後,iptables並不開機自啓動,能夠執行一下:
chkconfig –level 345 iptables on
將其加入開機啓動。
CentOS上能夠執行:service iptables save保存規則。

注意:
必定要給本身留好後路,留VNC一個管理端口和SSh的管理端口
須要注意的是,你必須根據本身服務器的狀況來修改這個文件。

 

 

 

 

 

一、查看本機關於IPTABLES的設置狀況

[root@tp ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Chain RH-Firewall-1-INPUT (0 references)

target prot opt source destination

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255

ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0

ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0

ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353

ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

能夠看出我在安裝linux時,選擇了有防火牆,而且開放了22,80,25端口.

若是你在安裝linux時沒有選擇啓動防火牆,是這樣的

[root@tp ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

什麼規則都沒有.

二、清除原有規則.

無論你在安裝linux時是否啓動了防火牆,若是你想配置屬於本身的防火牆,那就清除如今filter的全部規則.

[root@tp ~]# iptables -F 清除預設表filter中的全部規則鏈的規則

[root@tp ~]# iptables -X 清除預設表filter中使用者自定鏈中的規則

咱們在來看一下

[root@tp ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

什麼都沒有了吧,和咱們在安裝linux時沒有啓動防火牆是同樣的.(提早說一句,這些配置就像用命令配置IP同樣,重起就會失去做用),怎麼保存.

[root@tp ~]# /etc/rc.d/init.d/iptables save

 

這樣就能夠寫到/etc/sysconfig/iptables文件裏了.寫入後記得把防火牆重起一下,才能起做用.

[root@tp ~]# service iptables restart

 

如今IPTABLES配置表裏什麼配置都沒有了,那咱們開始咱們的配置吧。

 

三、設定預設規則

[root@tp ~]# iptables -P INPUT DROP                 #  pP

[root@tp ~]# iptables -P OUTPUT ACCEPT

[root@tp ~]# iptables -P FORWARD DROP

上面的意思是,當超出了IPTABLES裏filter表裏的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則裏的數據包怎麼處理呢,那就是DROP(放棄).應該說這樣配置是很安全的.咱們要控制流入數據包

而對於OUTPUT鏈,也就是流出的包咱們不用作太多限制,而是採起ACCEPT,也就是說,不在着個規則裏的包怎麼辦呢,那就是經過.

能夠看出INPUT,FORWARD兩個鏈採用的是容許什麼包經過,而OUTPUT鏈採用的是不容許什麼包經過.

這樣設置仍是挺合理的,固然你也能夠三個鏈都DROP,但這樣作我認爲是沒有必要的,並且要寫的規則就會增長.但若是你只想要有限的幾個規則是,如只作WEB服務器.仍是推薦三個鏈都是DROP.

注:若是你是遠程SSH登錄的話,當你輸入第一個命令回車的時候就應該掉了.由於你沒有設置任何規則.

怎麼辦,去本機操做唄!

四、添加規則.

首先添加INPUT鏈,INPUT鏈的默認規則是DROP,因此咱們就寫須要ACCETP(經過)的鏈

爲了能採用遠程SSH登錄,咱們要開啓22端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:這個規則,若是你把OUTPUT 設置成DROP的就要寫上這一部,好多人都是望了寫這一部規則致使,始終沒法SSH.在遠程一下,是否是好了.

其餘的端口也同樣,若是開啓了web服務器,OUTPUT設置成DROP的話,一樣也要添加一條鏈:

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其餘同理.)

若是作了WEB服務器,開啓80端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

若是作了郵件服務器,開啓25,110端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT

[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

若是作了FTP服務器,開啓21端口

[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

若是作了DNS服務器,開啓53端口

[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

若是你還作了其餘的服務器,須要開啓哪一個端口,照寫就好了.

上面主要寫的都是INPUT鏈,凡是不在上面的規則裏的,都DROP

容許icmp包經過,也就是容許ping,

[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話)

[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT設置成DROP的話)

 

容許loopback!(否則會致使DNS沒法正常關閉等問題)

IPTABLES -A INPUT -i lo -p all -j ACCEPT (若是是INPUT DROP)

IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(若是是OUTPUT DROP)

 

下面寫OUTPUT鏈,OUTPUT鏈默認規則是ACCEPT,因此咱們就寫須要DROP(放棄)的鏈.

減小不安全的端口鏈接

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP

[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP

有些些特洛伊木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通訊,阻塞這些端口可以有效地減小你的網絡上可能被感染的機器和它們的遠程主服務器進行獨立通訊的機會

還有其餘端口也同樣,像:3133五、2744四、2766五、20034 NetBus、970四、137-139(smb),2049(NFS)端口也應被禁止,我在這寫的也不全,有興趣的朋友應該去查一下相關資料.

 

固然出入更安全的考慮你也能夠包OUTPUT鏈設置成DROP,那你添加的規則就多一些,就像上邊添加

容許SSH登錄同樣.照着寫就好了.

 

下面寫一下更加細緻的規則,就是限制到某臺機器

如:咱們只容許192.168.0.3的機器進行SSH鏈接

[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

若是要容許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的全部IP.

24表示子網掩碼數.但要記得把 /etc/sysconfig/iptables 裏的這一行刪了.

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 由於它表示全部地址均可以登錄.

或採用命令方式:

[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT

而後保存,我再說一邊,反是採用命令的方式,只在當時生效,若是想要重起後也起做用,那就要保存.寫入到/etc/sysconfig/iptables文件裏.

[root@tp ~]# /etc/rc.d/init.d/iptables save

這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址

其餘的規則鏈接也同樣這麼設置.

 

在下面就是FORWARD鏈,FORWARD鏈的默認規則是DROP,因此咱們就寫須要ACCETP(經過)的鏈,對正在轉發鏈的監控.

開啓轉發功能,(在作NAT時,FORWARD默認規則是DROP時,必須作)

[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT

丟棄壞的TCP包

[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

處理IP碎片數量,防止攻擊,容許每秒100個

[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

設置ICMP包過濾,容許每秒1個包,限制觸發條件是10個包.

[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

我在前面只因此容許ICMP包經過,就是由於我在這裏有限制。

 

配置一個NAT表放火牆

一、查看本機關於NAT的設置狀況

[root@tp rc.d]# iptables -t nat -L

Chain PREROUTING (policy ACCEPT)

target prot opt source destination

Chain POSTROUTING (policy ACCEPT)

target prot opt source destination

SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

個人NAT已經配置好了的(只是提供最簡單的代理上網功能,尚未添加防火牆規則).關於怎麼配置NAT,參考個人另外一篇文章

固然你若是尚未配置NAT的話,你也不用清除規則,由於NAT在默認狀況下是什麼都沒有的

若是你想清除,命令是

[root@tp ~]# iptables -F -t nat

[root@tp ~]# iptables -X -t nat

[root@tp ~]# iptables -Z -t nat

 

二、添加規則

 

添加基本的NAT地址轉換,(關於如何配置NAT能夠看個人另外一篇文章),

添加規則,咱們只添加DROP鏈.由於默認鏈全是ACCEPT.

防止外網用內網IP欺騙

[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP

[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP

[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

 

若是咱們想,好比阻止MSN,QQ,BT等的話,須要找到它們所用的端口或者IP,(我的認爲沒有太大必要)

例:

禁止與211.101.46.253的全部鏈接

[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP

禁用FTP(21)端口

[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

這樣寫範圍太大了,咱們能夠更精確的定義.

[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP

這樣只禁用211.101.46.253地址的FTP鏈接,其餘鏈接還能夠.如web(80端口)鏈接.

按照我寫的,你只要找到QQ,MSN等其餘軟件的IP地址,和端口,以及基於什麼協議,只要照着寫就好了.

 

最後:

drop非法鏈接

[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP

[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP

[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP

容許全部已經創建的和相關的鏈接

[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

[root@tp ~]# /etc/rc.d/init.d/iptables save

 

這樣就能夠寫到/etc/sysconfig/iptables文件裏了.寫入後記得把防火牆重起一下,才能起做用.

 

[root@tp ~]# service iptables restart

 

別忘了保存,不行就寫一部保存一次。你能夠一邊保存,一邊作實驗,看看是否達到你的要求,

上面的全部規則我都試過,沒有問題。

寫這篇文章,用了我將近1個月的時間.查找資料,本身作實驗,但願對你們有所幫助.若有不全及不完善的地方還請提出。

由於本篇文章以配置爲主.關於IPTABLES的基礎知識及指令命令說明等我會盡快傳上,固然你能夠去網上搜索一下,仍是不少的。(責任編輯:凌雲通)

相關文章
相關標籤/搜索