防火牆是平常應用中一個重要的維護內容,從防火牆開始咱們才真正接觸生產環境,網絡安全愈來愈受重視,學好這部份內容是學好運維的重要一步。html
通常狀況下,桌面級環境中不多有人關注過防火牆,甚至殺毒軟件都不裝,對防火牆的操做固然不熟悉。真實生產環境中不可能不開防火牆。linux
linux的防火牆技術的核心是netfilter,firewalld和iptables都是用來操做netfilter的工具,他們的區別參加這篇文章。centos
簡單來講他們都只是操做netfilter的工具,CentOS6以前用iptables、CentOS7改成firewalld,同時firewalld能夠識別部分iptables的配置,並將他做用到default zone上。安全
由於centos7默認的防火牆是firewalld,因此咱們先要把firewalld停用,而後在換成centos6的iptables,前期準備工做:關閉selinux、關閉centos7帶的firewalld而後啓動iptables-service。bash
一、臨時關閉網絡
setenforce 0 關閉命令
getenforce 查看selinux狀態命令運維
只要確認getenforce狀態是Permissive就能夠了。只是暫時關閉,系統重啓後仍會開啓,須要經過修改配置文件方式永久關閉。tcp
二、永久關閉
永久關閉該功能須要修改selinux的配置文件ide
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
表名包括:
raw:高級功能,如:網址過濾。 mangle:數據包修改(QOS),用於實現服務質量。 nat:地址轉換,用於網關路由器。 filter:包過濾,用於防火牆規則。
鏈名包括:
INPUT鏈:處理輸入數據包。 OUTPUT鏈:處理輸出數據包。 PORWARD鏈:處理轉發數據包。 PREROUTING鏈:用於目標地址轉換(DNAT)。 POSTOUTING鏈:用於源地址轉換(SNAT)。
動做包括:
ACCEPT:接收數據包。 DROP:丟棄數據包。 REDIRECT:重定向、映射、透明代理。 SNAT:源地址轉換。 DNAT:目標地址轉換。 MASQUERADE:IP假裝(NAT) LOG:日誌記錄
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的規則在。
一號機具備兩塊網卡分別是ens33和ens37,ens33鏈接外網;ens37鏈接內網,IP爲192.168.100.1/24。
二號機只有一塊網卡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,不是一號機。
就兩個基本操做。
一、保存設置好的規則表使其在機器重啓後也生效。
service iptables save
他會把防火牆規則保存到/etc/sysconfig/iptables文件內,這個文件就是iptables的配置文件。
二、把規則表保存再特定位置,導入自定義的規則表
iptables-save > /tmp/ipt.txt #另存規則表命令,路徑可自定義iptables-restroe < /tmp/ip.txt #導入自定義的規則表,路徑自定義