1. 程式人生 > >linux下IPTABLES配置詳解(轉)

linux下IPTABLES配置詳解(轉)

如果你的IPTABLES基礎知識還不瞭解,建議先去看看. 開始配置 我們來配置一個filter表的防火牆. (1)檢視本機關於IPTABLES的設定情況 [[email protected] ~]# 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時沒有選擇啟動防火牆,是這樣的 [
[email protected]
~]# 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的所有規則. [[email protected] ~]# iptables -F        清除預設表filter中的所有規則鏈的規則
[[email protected] ~]# iptables -X        清除預設表filter中使用者自定鏈中的規則 我們在來看一下 [[email protected] ~]# 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一樣,重起就會失去作用),怎麼儲存. [
[email protected]
~]# 
/etc/rc.d/init.d/iptables save
這樣就可以寫到/etc/sysconfig/iptables檔案裡了.寫入後記得把防火牆重起一下,才能起作用. [[email protected] ~]# service iptables restart 現在IPTABLES配置表裡什麼配置都沒有了,那我們開始我們的配置吧 (3)設定預設規則 [[email protected] ~]# iptables -p INPUT DROP [[email protected] ~]# iptables -p OUTPUT ACCEPT [[email protected] ~]# 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埠. [[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [[email protected] ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:這個規則,如果你把OUTPUT 設定成DROP的就要寫上這一部,好多人都是望了寫這一部規則導致,始終無法SSH.在遠端一下,是不是好了. 其他的埠也一樣,如果開啟了web伺服器,OUTPUT設定成DROP的話,同樣也要新增一條鏈: [[email protected] ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.) 如果做了WEB伺服器,開啟80埠. [[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了郵件伺服器,開啟25,110埠. [[email protected] ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[[email protected] ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

如果做了FTP伺服器,開啟21埠 [[email protected] ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT [[email protected] ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT 如果做了DNS伺服器,開啟53埠 [[email protected] ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT 如果你還做了其他的伺服器,需要開啟哪個埠,照寫就行了. 上面主要寫的都是INPUT鏈,凡是不在上面的規則裡的,都DROP 允許icmp包通過,也就是允許ping, [[email protected] ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設定成DROP的話) [[email protected] ~]# 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(放棄)的鏈. 減少不安全的埠連線 [[email protected] ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP [[email protected] ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP 有些些特洛伊木馬會掃描埠31337到31340(即黑客語言中的 elite 埠)上的服務。既然合法服務都不使用這些非標準埠來通訊,阻塞這些埠能夠有效地減少你的網路上可能被感染的機器和它們的遠端主伺服器進行獨立通訊的機會 還有其他埠也一樣,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)埠也應被禁止,我在這寫的也不全,有興趣的朋友應該去查一下相關資料. 當然出入更安全的考慮你也可以包OUTPUT鏈設定成DROP,那你新增的規則就多一些,就像上邊新增 允許SSH登陸一樣.照著寫就行了. 下面寫一下更加細緻的規則,就是限制到某臺機器 如:我們只允許192.168.0.3的機器進行SSH連線 [[email protected] ~]# 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 因為它表示所有地址都可以登陸. 或採用命令方式: [[email protected] ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT 然後儲存,我再說一邊,反是採用命令的方式,只在當時生效,如果想要重起後也起作用,那就要儲存.寫入到/etc/sysconfig/iptables檔案裡. [[email protected] ~]# /etc/rc.d/init.d/iptables save 這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址 其他的規則連線也一樣這麼設定. 在下面就是FORWARD鏈,FORWARD鏈的預設規則是DROP,所以我們就寫需要ACCETP(通過)的鏈,對正在轉發鏈的監控. 開啟轉發功能,(在做NAT時,FORWARD預設規則是DROP時,必須做) [[email protected] ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT [[email protected] ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 丟棄壞的TCP包 [[email protected] ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP 處理IP碎片數量,防止攻擊,允許每秒100個 [[email protected] ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT 設定ICMP包過濾,允許每秒1個包,限制觸發條件是10個包. [[email protected] ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT 我在前面只所以允許ICMP包通過,就是因為我在這裡有限制. 二,配置一個NAT表放火牆 1,檢視本機關於NAT的設定情況 [[email protected] 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在預設情況下是什麼都沒有的 如果你想清除,命令是 [[email protected] ~]# iptables -F -t nat [[email protected] ~]# iptables -X -t nat [[email protected] ~]# iptables -Z -t nat 2,新增規則 新增基本的NAT地址轉換,(關於如何配置NAT可以看我的另一篇文章), 新增規則,我們只新增DROP鏈.因為預設鏈全是ACCEPT. 防止外網用內網IP欺騙 [[email protected] sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[[email protected] sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[[email protected] sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

如果我們想,比如阻止MSN,QQ,BT等的話,需要找到它們所用的埠或者IP,(個人認為沒有太大必要) 例: 禁止與211.101.46.253的所有連線 [[email protected] ~]# iptables -t nat -A PREROUTING    -d 211.101.46.253 -j DROP 禁用FTP(21)埠 [[email protected] ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP 這樣寫範圍太大了,我們可以更精確的定義. [[email protected] ~]# 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非法連線
[[email protected] ~]# iptables -A INPUT     -m state --state INVALID -j DROP
[[email protected] ~]# iptables -A OUTPUT    -m state --state INVALID -j DROP
[[email protected] ~]# iptables-A FORWARD -m state --state INVALID -j DROP

允許所有已經建立的和相關的連線
[[email protected] ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[[email protected] ~]# /etc/rc.d/init.d/iptables save

這樣就可以寫到/etc/sysconfig/iptables檔案裡了.寫入後記得把防火牆重起一下,才能起作用.

[[email protected] ~]# service iptables restart


別忘了儲存,不行就寫一部儲存一次.你可以一邊儲存,一邊做實驗,看看是否達到你的要求,

上面的所有規則我都試過,沒有問題. 寫這篇文章,用了我將近1個月的時間.查詢資料,自己做實驗,希望對大家有所幫助.如有不全及不完善的地方還請提出. 因為本篇文章以配置為主.關於IPTABLES的基礎知識及指令命令說明等我會盡快傳上,當然你可以去網上搜索一下,還是很多的.

相關推薦

linuxIPTABLES配置()

如果你的IPTABLES基礎知識還不瞭解,建議先去看看. 開始配置 我們來配置一個filter表的防火牆. (1)檢視本機關於IPTABLES的設定情況 [[email protected] ~]# iptables -L -nChain INPUT (policy ACCEPT)targe

linuxIPTABLES配置 linuxIPTABLES配置

linux下IPTABLES配置詳解 如果你的IPTABLES基礎知識還不瞭解,建議先去看看. 開始配置 我們來配置一個filter表的防火牆. (1)檢視本機關於IPTABLES的設定情況 [[email protected]

linuxiptables配置

如果你的IPTABLES基礎知識還不瞭解,建議先去看看. 開始配置 我們來配置一個filter表的防火牆. (1)檢視本機關於IPTABLES的設定情況 [[email protec

Linux iptables 配置

1:檢視本機關於iptables的設定情況 [[email protected] ~]# service iptables status Table: filter Chain INPUT (policy ACCEPT) num target prot opt source

linux網路防火牆-iptables配置

Chain RH-Firewall-1-INPUT (0 references) target       prot opt source                 destination          ACCEPT       all    --    0.0.0.0/0             

linuxcat命令

forever ron localhost root sta testing 幫助 查看 一點 1、cat 顯示文件連接文件內容的工具; cat 是一個文本文件查看和連接工具。查看一個文件的內容,用cat比較簡單,就是cat 後面直接接文件名。 比如: de>[[

linuxvim命令

但是 左移 功能 命令 file lips 查找替換 括號匹配 所想 高級一些的編輯器,都會包含宏功能,vim當然不能缺少了,在vim中使用宏是非常方便的::qx 開始記錄宏,並將結果存入寄存器xq 退出記錄模式@x 播放記錄在x寄存器中的宏命令稍微

【轉載】Linuxchkconfig命令

name scrip 再次 http 缺省 重新 禁止 level pool chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的運行級信息。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。 使用語法:chkconfig [--

Linuxgrub.cnf

編輯 操作系統 通過 系統文件 項目 images 背景 all itl   grub.conf跟系統啟動項有關,對於重置密碼。來說小case。。。 1、介紹 在Red Hat Linux7.2之後,默認的引導加載程序從LTLO變為GRUB.這個引導加載程序使用戶

Linux route命令

linux route路由詳解為了讓設備能訪問另一個子網,需要在設備裏增加路由到子網絡,下面是一些資料。基本操作如下: 一般來說,都是為了能訪問別的子網才設置路由的,比如說,你的主機處於192.168.10.0/24,而你想訪問192.168.20.0/24網的主機,當然你知道一個網關IP,例如192.168

linux基礎3-磁碟和檔案系統相關 LINUX支援哪些檔案系統 linux磁碟分割槽 圖文(fdisk;mkfs)

一 dumpe2fs :    在Linux使用過程中,我們如果要了解檔案系統的配置情況,可以使用dumpe2fs檢視ext2/ext3/ext4格式的檔案系統資訊。 命令格式: dumpe2fs [選項] 裝置 常用選項: -h  僅列出超級塊中的資訊

linux yum命令

本文轉自http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html yum(全稱為 Yellow dog Updater, Modified) 是一個在Fedora和RedHat以及SUSE中的Shell前端軟體包管理器。基於R

linux安裝solr

什麼是Solr 大多數搜尋引擎應用都必須具有某種搜尋功能,問題是搜尋功能往往是巨大的資源消耗並且它們由於沉重的資料庫載入而拖垮你的應用的效能。 這就是為什麼轉移負載到一個外部的搜尋伺服器是一個不錯的主意,Apache Solr是一個流行的開源搜尋伺服器,它通過使用類似REST的HTTP AP

linuxiptables應用

iptables應用主要包括主機防火牆和網路防火牆 主機防火牆詳解(服務範圍當前主機):         iptables其規則主要作用在“匹配條件”上,具體為各種模組 icmp模組 --icmp-type     

linuxiptables 基礎

一、簡介        iptables是Linux系統上的防火牆,是一個包過濾型的防火牆,能夠根據事先定義好的檢查規則對進出本機或者本地網路的報文進行匹配檢查,並對於能夠被規則匹配的報文作出相應的處理動作。iptables有五個內建規則鏈(名稱需大寫),

Linux的訊號及捕捉訊號

訊號的基本概念 每個訊號都有一個編號和一個巨集定義名稱 ,這些巨集定義可以在 signal.h 中找到。 使用kill -l命令檢視系統中定義的訊號列表: 1-31是普通訊號 regular signal(非可靠訊號); 34-64是實時訊號 real time sign

linuxsystem函式

一、system函式的簡單介紹 標頭檔案 #include <stdlib.h> 函式定義 int system(const char * string); 函式說明 system()會呼叫fork()產生子程序,由子程序來呼叫/bin/sh-

linux iptables配置防火牆

netfilter的工作原理 我們以系統預設的表為“filter”為例進行講解。該表中包含了INPUT、 FORWARD和OUTPUT 3個鏈。每一條鏈中可以有一條或數條規則,每一條規則都是這樣定義的“如果資料包頭符合這樣的條件,就這樣處理這個資料包”。當一個數據包到達一個鏈時,系統就會

Linuxexec函式

exec核心函式呼叫 exec函式說明 exec函式的作用是執行一個檔案,他有很多同類型函式,對execl而言,所需要傳入的引數,第一個是檔案的絕對路徑,後面就是給要執行檔案傳入的引數,下面的程式,絕對路徑path="/mnt/nfs/hell",傳入的引數有4個

Linux ln 命令

這是linux中一個非常重要命令,請大家一定要熟悉。它的功能是為某一個檔案或目錄在另外一個位置建立一個同步的連結,類似Windows下的超級連結。 連結檔案分為軟連結和硬連結。  軟連結:軟連結不佔用磁碟空間,原始檔刪除則軟連結失效。 硬連結:硬連結只能連結普通檔案