iptables進階

ptables簡介html

iptables是基於內核的防火牆,功能很是強大,iptables內置了filter,nat和mangle三張表。linux

filter負責過濾數據包,包括的規則鏈有,input,output和forward;web

nat則涉及到網絡地址轉換,包括的規則鏈有,prerouting,postrouting和output;數據庫

mangle表則主要應用在修改數據包內容上,用來作流量整形的,默認的規則鏈有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;ubuntu

input匹配目的IP是本機的數據包,forward匹配流經本機的數據包,prerouting用來修改目的地址用來作DNAT,postrouting用來修改源地址用來作SNAT。安全

iptables主要參數bash

-A 向規則鏈中添加一條規則,默認被添加到末尾服務器

-T指定要操做的表,默認是filter網絡

-D從規則鏈中刪除規則,能夠指定序號或者匹配的規則來刪除併發

-R進行規則替換

-I插入一條規則,默認被插入到首部

-F清空所選的鏈,重啓後恢復

-N新建用戶自定義的規則鏈

-X刪除用戶自定義的規則鏈

-p用來指定協議能夠是tcp,udp,icmp等也能夠是數字的協議號,

-s指定源地址

-d指定目的地址

-i進入接口

-o流出接口

-j採起的動做,accept,drop,snat,dnat,masquerade

--sport源端口

--dport目的端口,端口必須和協議一塊兒來配合使用

注意:全部鏈名必須大寫,代表必須小寫,動做必須大寫,匹配必須小寫

iptable配置實例

iptable基本操做

iptables -L  列出iptables規則
iptables -F  清除iptables內置規則
iptables -X  清除iptables自定義規則

設定默認規則

在iptables規則中沒有匹配到規則則使用默認規則進行處理

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

配置SSH規則

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  若是你把OUTPUT 設置成DROP,就須要加上這個規則,不然SSH仍是不能登陸,由於SSH服務職能進不能出。

只容許192.168.0.3的機器進行SSH鏈接

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.

容許loopback迴環通訊

IPTABLES -A INPUT -i lo -p all -j ACCEPT 
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

目的地址轉換,映射內部地址

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.1-192.168.0.10

源地址轉換,隱藏內部地址

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10

地址假裝,動態ip的NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

masquerade和snat的主要區別在於,snat是把源地址轉換爲固定的IP地址或者是地址池,而masquerade在adsl等方式撥號上網時候很是有用,由於是撥號上網因此網卡的外網IP常常變化,這樣在進行地址轉換的時候就要在每次都要修改轉換策略裏面的ip,使用masquerade就很好的解決了這個問題,他會本身去探測外網卡得到的ip地址而後自動進行地址轉換,這樣就算外網得到的ip常常變化也不用人工干預了。

開啓轉發功能

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT 只容許已建鏈接及相關連接對內轉發
ptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 容許對外轉發

過濾某個MAC

iptables -A FORWARD -m mac --mac -source MAC地址 -j DROP

報文通過路由後,數據包中原有的MAC信息會被替換,因此在路由後的iptables中使用mac匹配沒有意義。

數據包整流

iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP

多端口匹配

用以一次匹配多個端口

iptables -A INPUT -p tcp -m muliport --dport s 21,22,25,80,110 -j ACCEPT

丟棄非法鏈接

iptables -A INPUT   -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables-A FORWARD -m state --state INVALID -j DROP

存儲於恢復iptables規則

iptables-save > somefile
iptables-restore < somefile

轉載請註明:

本文轉自:http://www.liusuping.com/ubuntu-linux/iptables-firewall-setting.html

 

 

linux下IPTABLES配置詳解

若是你的IPTABLES基礎知識還不瞭解,建議先去看看.
開始配置
咱們來配置一個filter表的防火牆.
(1)查看本機關於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  
什麼規則都沒有.
(2)清除原有規則.
無論你在安裝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配置表裏什麼配置都沒有了,那咱們開始咱們的配置吧
(3)設定預設規則
[root@tp ~]# iptables -p INPUT DROP
[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登錄的話,當你輸入第一個命令回車的時候就應該掉了.由於你沒有設置任何規則.
怎麼辦,去本機操做唄!
(4)添加規則.
首先添加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表放火牆
1,查看本機關於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
 
2,添加規則
添加基本的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的基礎知識及指令命令說明等我會盡快傳上,固然你能夠去網上搜索一下,仍是不少的.

 轉自:http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html

 
 

下面以本身的Web服務器舉例說明之,系統的默認策略是INPUT爲DROP,OUTPUT、FORWARD鏈爲ACCEPT,DROP設置得比較寬鬆,由於咱們知道出去的數據包比較安全;爲了驗證腳本的通用性,我特的查看了服務器的內核及iptables版本,命令以下所示:

1
2
3
4
5
6
7
8
9
10
uname  -a
Linux ud50041 2.6.9-34.ELsmp  #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Linux
iptables -V
iptables v1.2.11
lsb_release -a
LSB Version:    :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID:    RedHatEnterpriseAS
Description:    Red Hat Enterprise Linux AS release 4 (Nahant Update 3)
Release:    4
Codename:    NahantUpdate3

你們能夠發現,此係統爲RHEL4_i386系統,系統內核版本爲2.6.9-34,iptables版本爲1.2.11;另外我在別的Centos5.5 x86_64機器上也成功部署了此腳本;因爲後續的recent安全模塊對系統內核有要求(這個做爲主機防禦腳本也常常用到),若是你們要採用iptables做爲主機防火牆時,建議用Centos5.6 x86_64或更高級版本,否則系統會有以下提示錯誤信息:

1
2
3
4
5
iptables: Unknown error 18446744073709551615
iptables:Invalid argument
tail  -f  /var/log/messages 時能發下面的的出錯提示
ip_tables: connlimit match: invalid size 32 != 16
ip_tables: connlimit match: invalid size 32 != 24

另外,在生產環境下調試iptables腳本前,強烈建議編寫crontab任務,每5分鐘關閉一次iptalbes腳本,防止將SSH客戶端鎖在外面,命令以下所示:

1
* /5  * * * * root  /etc/init .d /iptables  stop

腳本代碼以下所示:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#load connection-tracking modules
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A INPUT -f -m limit --limit 100 /sec  --limit-burst 100 -j ACCEPT
iptables -A INPUT -p icmp --icmp- type  echo -request -m limit --limit 1 /s  --limit-burst 10 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20 /sec  --limit-burst 200 -j ACCEPT
iptables -A INPUT -s 122.70.x.x -j ACCEPT
iptables -A INPUT -s 122.70.x.x -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 80,22 -j ACCEPT

這裏有一種特殊狀況,因爲此Web服務器是置於負載均衡器後面,因此與負載均衡器的鏈接仍是很頻繁的;因此咱們要容許數據源地址爲負載均衡器的數據包經過;另外,個人許多基於LNMP的小網站上面也部署了此腳本,即Web服務和MySQL數據庫同時安裝在一臺機器上,也沒有開放3306端口,這個靠Web調用PHP程序實現訪問。

成功運行此腳本後系統應該是不會報錯的,命令以下:

1
iptables -nv –L

此命令顯示結果以下(此爲另外一臺LNMP機器的腳本顯示結果):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Chain INPUT (policy DROP 610 packets, 50967 bytes)
  pkts bytes target     prot opt  in      out      source                destination      
     0     0 ACCEPT     all  -f  *      *       0.0.0.0 /0             0.0.0.0 /0            limit: avg 100 /sec  burst 100
  6100  314K ACCEPT     tcp  --  *      *       0.0.0.0 /0             0.0.0.0 /0            tcp flags:0x16 /0x02  limit: avg 20 /sec  burst 200
  1052 67637 ACCEPT     all  --  *      *       122.70.x.x        0.0.0.0 /0        
   986 58112 ACCEPT     all  --  *      *       122.70.x.x        0.0.0.0 /0        
   918  131K ACCEPT     all  --  lo     *       0.0.0.0 /0             0.0.0.0 /0        
97056   12M ACCEPT     all  --  *      *       0.0.0.0 /0             0.0.0.0 /0            state RELATED,ESTABLISHED
  4325  218K ACCEPT     tcp  --  *      *       0.0.0.0 /0             0.0.0.0 /0           multiport dports 80,22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt  in      out      source                destination      
     0     0 ACCEPT     icmp --  *      *       0.0.0.0 /0             0.0.0.0 /0            icmp type  8 limit: avg 1 /sec  burst 10
Chain OUTPUT (policy ACCEPT 144K packets, 155M bytes)
  pkts bytes target     prot opt  in      out      source                destination      
   956  134K ACCEPT     all  --  *      lo      0.0.0.0 /0             0.0.0.0 /0

下面我稍爲詳細的解釋下此腳本:
在主機的防禦上咱們配置了一些安全措施,以防止外部的ping和SYN洪水攻擊,而且考慮到外部的瘋狂端口掃描軟件可能會影響服務器的入口帶寬,因此在這裏也作了限制。命令以下所示:

1
iptables -A INPUT -p tcp --syn -m limit --limit 100 /s  --limit-burst 100 -j  ACCEPT

上面的命令每秒鐘最多容許100個新鏈接,請注意這裏的新鏈接指的是state爲New的數據包,在後面咱們也配置了容許狀態爲ESTABLISHED和RELATED的數據經過;另外,100這個閥值則要根據服務器的實際狀況來調整,若是是併發量不大的服務器這個數值就要調小,若是是訪問量很是大且併發數不小的服務器,這個值則還須要調大。再看如下命令: 

1
2
3
iptables -A INPUT -p icmp --icmp- type  echo -request -m limit --limit 1 /s  –limit-burst 10 -j ACCEPT
這是爲了防止 ping 洪水攻擊,限制每秒的 ping 包不超過10個。
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20 /sec  --limit-burst 200 -j ACCEPT

上面的命令防止各類端口掃描,將SYN及ACK SYN限制爲每秒鐘不超過200個,省得把數務器帶寬耗盡了。
iptables防火牆運行後,咱們能夠運行nmap工具進行掃描,命令以下:

1
nmap -P0 -sS 211.143.6.x

此命令的執行結果以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Starting Nmap 4.11 ( http: //www .insecure.org /nmap/  ) at 2009-03-29 16:21 CST
Interesting ports on 211.143.6.X:
Not shown: 1668 closed ports
PORT     STATE SERVICE
22 /tcp  open    ssh
25 /tcp  open    smtp
80 /tcp  open    http
110 /tcp    open    pop3
111 /tcp    open    rpcbind
143 /tcp    open    imap
443 /tcp    open    https
465 /tcp    open    smtps
587 /tcp    open    submission
993 /tcp    open    imaps
995 /tcp    open    pop3s
1014 /tcp  open    unknown

在這裏,咱們發現一個1014端被某個進程打開了,用lsof -i:1014查看發現又是rpc.statd打開的,這服務每次用的端口都不同啊!原本想置之不理的,可是若是rpc.statd不能正確處理SIGPID信號,遠程攻擊者可利用這個漏洞關閉進程,進行拒絕服務攻擊,因此仍是得想辦法解決掉,咱們發現rpc.statd是由服務nfslock開啓的,進一步查詢得知它是一個可選的進程,它容許NFS客戶端在服務器上對文件加鎖。這個進程對應於nfslock服務,因而咱們關掉了此服務,命令以下所示:

1
2
service nfslock stop
chkconfig nfslock off

若是沒有硬件防火牆保護的話,置於IDC機房而且有公網的Web服務器仍是頗有用iptables保護的必要,若是發現有人用工具惡意頻繁鏈接咱們的Web服務器,咱們能夠調用recent模塊來阻止它們,咱們的作法是:儘可能在每一臺有公網IP的機器上部署iptables防火牆。

本文出自 「撫琴煮酒」 博客,請務必保留此出處http://andrewyu.blog.51cto.com/1604432/716016

 

兩篇更詳細的教程:一個是翻譯的

https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html

https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html

相關文章
相關標籤/搜索