防火牆是日常應用中一個重要的維護内容,從防火牆開始我們才真正接觸生産環境,網絡安全越來越受重視,學好這部分内容是學好運維的重要一步。
一般情況下,桌面級環境中很少有人關注過防火牆,甚至防毒軟體都不裝,對防火牆的操作當然不熟悉。真實生産環境中不可能不開防火牆。
簡單來說他們都隻是操作netfilter的工具,CentOS6之前用iptables、CentOS7改為firewalld,同時firewalld可以識别部分iptables的配置,并将他作用到default zone上。

因為centos7預設的防火牆是firewalld,是以我們先要把firewalld停用,然後在換成centos6的iptables,前期準備工作:關閉selinux、關閉centos7帶的firewalld然後啟動iptables-service。
1、臨時關閉
setenforce 0 關閉指令 getenforce 檢視selinux狀态指令
隻要确認getenforce狀态是Permissive就可以了。隻是暫時關閉,系統重新開機後仍會開啟,需要通過修改配置檔案方式永久關閉。
2、永久關閉
永久關閉該功能需要修改selinux的配置檔案
vi /etc/selinux/config
将SELINUX=enforcing改為disabled
注意不能改成下面那個SELINUXTYPE=disabled,否則系統會啟動不了。
systemctl stop firewalld #關閉firewalld功能 systemctl disable firewalld #停止firewalld開機啟動
操作截圖
這一步不像上面那步有操作過程提示,隻要沒報錯就ok了。
yum install iptables-services #安裝netfilter功能,也就是常說的iptables,注意包名末尾是iptables和services複數形式,敲成iptables-service就沒這個包 systemctl enable iptables #設定開機啟動iptables服務 systemctl start iptables #開啟iptables程式 iptables -nvL #檢視iptables的預設規則
1是設定開機啟動,2是在目前bash下啟動iptables,3是檢視iptables的預設規則。
netfilter使用5個表與5個鍊條控制網口傳輸過來的包的,哪些需要丢棄,哪些允許進來等等。
5個表分别是:
filter:主要用于過濾資料包,是系統預設的表。内含3個鍊:INPUT、OUTPUT、FOWARD,就是說資料包隻要在這三個鍊中,你就可以用filter表中的規則來處理他。
nat:主要用于網絡位址轉換,内含3個鍊:PREROUTING、OUTPUT、POSTROUNTING。
mangle:主要用于給包做标記,然後根據标記處理包。内含全部五個鍊
raw:可以用來設定不被系統跟蹤的資料包,這個表可以指定某些端口進來的資料不被跟蹤。内含2個鍊:PREROUNTING和OUTPUT
security:在Centos6中沒有,用于強制通路控制的網絡規劃,暫時先不研究。
5個鍊分别是:
PREROUTING:資料包進入路由表之前
INPUT:通過路由表後目的地為本機
FORWARDING:通過路由表後,目的地不為本機。
OUTPUT:由本機産生,向外轉發。
POSTROUTING:發送到網卡接口前
netfilter啟動後,網絡資料包在系統中的流向圖:(轉載至wiki)
iptables用于操控netfilter防火牆,他能直接添加、修改或者删除PREROUTING、INPUT、FORWARDING、OUTPUT、POSTROUTING5個鍊中的規則,達到過濾資料包的目的
iptables指令寫法
iptables -t 表名 <-A/I/D/R> 鍊名 [規則号] <-i/o 網卡名> -p 協定名 <-s 源IP/源子網> --sport 源端口 <-d 目标IP/目标子網> --dport 目标端口 -j 動作
選項含義
-t<表>:指定要操縱的表;
-A:向鍊規則中添加條目;
-D:從鍊規則中删除條目;
-I:向鍊規則中插入條目;
-R:替換鍊規則中的條目;
-L:顯示鍊規則中已有的條目;
-F:清空防火牆規則;
-Z:清空鍊規則中包計數器與連接配接計數器;
-N:建立新的使用者自定義規則鍊;
-P:定義鍊規則中的預設處置方式,如;
-h:顯示幫助資訊;
-p:指定要比對的資料包協定類型,;
-s:指定要比對的資料包源ip位址;
-j+動作:如何處理過濾出來的包,常見的有ACCEPT,;
-i<網絡接口>:指定資料包進入本機的網絡接口;
-o<網絡接口>:指定資料包要離開本機所使用的網絡接口。
--dport
--sport
表名包括:
鍊名包括:
動作包括:
iptables -nvL #顯示現有規則,分表顯示的 iptables -F #清空所有規則 iptables -Z #置零計數器,用于網絡攻擊分析 service iptables save #将規則儲存到/etc/sysconfig/iptables檔案中 systemctl restart iptables.service #重新開機iptables服務使指定的規則生效
iptables的預設規則儲存在/etc/sysconfig/iptables檔案下
防火牆規則添加到鍊規則尾部
iptables -t nat -A POSTROUTING -s 192.168.81.0/24 -o ens33 -j MASQUERADE
防火牆規則添加到鍊規則頭部
iptables -t nat -I POSTROUTING -s 192.168.81.0/24 -o ens33 -j MASQUERADE #與上條差別就是選項變成-I
删除防火牆某一條規則
iptables -t nat -D POSTROUTING -s 192.168.81.0/24 -o ens33 -j MASQUERADE #如果你記住原添加指令就這麼寫 iptables --
修改防火牆預設鍊處理規則
iptables -P DROP
這是有一定難度的兩個實驗,我在兩台電腦上搗鼓了兩天才終于在一台電腦上搗鼓成功了示例中的功能,在沒有系統學習網絡排障經驗前如果要順利完整下列實驗,建議重新建立兩台虛拟機,不能克隆,必須建立兩台虛拟機并各自安裝一次作業系統。
一号機具有兩塊網卡分别是ens33和ens37,ens33連接配接外網;ens37連接配接内網,IP為192.168.100.1/24。
二号機隻有一塊網卡ens37,IP為192.168.100.100/24,現用交換機将一号機與二号機相連,通過配置一号機nat表實作二号機能夠正常通路外網。
配置步驟
重新準備二台虛拟機,一号機建立兩塊網卡,ens33為外網,NAT模式與主控端共享上網,ip設定為自動擷取即可,(此實驗中基本不需要xhell遠端登入一号機,直接在vmware界面中操作就行),ens37為區域網路網卡,設定ip為192.168.100.1/24。
二号機建立1塊網卡,ip為192.168.100.100/24 網關設定為192.168.100.1。
配置好後兩台機器的ifconfig界面分别是
一号機:
二号機:
确認一下配置效果
其中一号機能夠通路外網,能夠ping通二号機的ip 192.168.100.100
二号機不能上外網,但能ping通一号機區域網路ip 192.168.100.1
注意二号機在現在的情況下是不能ping通一号機的外網網卡ip(192.168.88.128)的,而且顯示的要是圖中所列的“netwaork unreachable”,其他顯示都不對,如果是其他顯示,等下你配置nat表二号機就不能通路外網。
然後按照程式關閉selinux》》關閉firewalld》》下載下傳并開啟iptables。
首先打開一号機的路由轉發功能,不然無論怎麼設定iptables都沒用。
echo "1" > /proc/sys/net/ipv4/ip_forward
圖是另外計算機上的圖
然後配置一号機的nat表,圖中的配置是我配置另外實驗電腦的圖,按下面的指令寫。
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE #設定192.168.100.0網段轉發到外網網卡上 iptables -t nat -nvL #檢視規則加上去沒有
檢查效果
二号機能ping到外網了
小結:這個試驗我做了兩天,終于達到了想要的效果,之前無論怎樣設定都解決不了二号機ping不到外網問題,多次嘗試後最終用兩台全新安裝的單獨的新虛拟電腦才達到目的。回想起來在一号機上看到了firewalld的規則,zone什麼的,應該是firewalld的沒關掉或者有什麼規則reject掉了一些包。如果重複上述實驗出現問題時建議先用iptables -nvL指令看看是不是有firewalld的規則在。
二号機隻有一塊網卡ens37,IP為192.168.100.100/24,現用交換機将一号機與二号機相連,通過配置一号機nat表二号機能夠正常通路外網。
三号機為一外網主機,能夠通路一号機外網網卡ip192.168.208.128,現需要在一号機上配置端口轉發,使三号機能夠通路到區域網路内的二号機。
首先我們把虛拟機所在的電腦當成三号機
繼續操作一号機的nat表
iptables -t nat -A PREROUTING -d 192.168.208.128/32 -p tcp -m tcp --dport 1122 -j DNAT --to-destination 192.168.100.100:22 iptables -t nat -A POSTROUTING -s 192.168.100.100/32 -j SNAT --to-source 192.168.208.128
測試效果
注意主機ip仍是一号機外網IP,但端口号要填1122,就是你映射端口号
連上了,注意看标紅處的ip,你連的是區域網路中的100.100,不是一号機。
就兩個基本操作。
1、儲存設定好的規則表使其在機器重新開機後也生效。
service iptables save
他會把防火牆規則儲存到/etc/sysconfig/iptables檔案内,這個檔案就是iptables的配置檔案。
2、把規則表儲存再特定位置,導入自定義的規則表
iptables-save > /tmp/ipt.txt #另存規則表指令,路徑可自定義 iptables-restroe < /tmp/ip.txt #導入自定義的規則表,路徑自定義 本文轉自 whytl 51CTO部落格,原文連結: http://blog.51cto.com/11934539/2065176