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鏈接數
LVM
查當前iptables狀態/停用/啓用 service iptables status/stop/start
防火牆類型
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 #重啓 打開 中止. 保存(臨時生效的規則寫入配置文件變成永久生效)
一.主要知識點:
本文出自 「龍哥」 博客,請務必保留此出處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的基礎知識及指令命令說明等我會盡快傳上,固然你能夠去網上搜索一下,仍是不少的。(責任編輯:凌雲通)