iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 20
0
自我挑戰組

網管實務系列 第 20

DAY20-linux netfilter

  • 分享至 

  • xImage
  •  

DAY20
今天要來介紹linux 系統當中的netfilter,
它在CentOS 7 之前都是預設的防火牆套件,在CentOS7之後就改由Firewalld 進行防護。
當然CentoS7 當中仍可將iptables裝回來,我們先不談及Firewalld的部分,
因為netfilter的功能非常多,功用不僅限於防火牆而已,
它甚至可以做NAT功能,甚至更多許多網路的服務(例如設備上接雙WAN的設定它都可以做到),
在CentOS6上除了netfilter之外,還有一個防禦機制,它叫做SElinux (安全強化的linux)
http://ithelp.ithome.com.tw/upload/images/20161206/20103362XL1Q5byWLQ.png
它是由美國國安局開放出來放置於其中,它專門針對程序、權限設定做限制,
所以我們在系統上運作的服務,大多要取用系統資源時都得通過這一個關卡,
它的設定方式是透過布林去進行的。
平常在測試機上面運作服務時,我捫會將SElinux關閉在進行,
因為很多時候會因為SElinux的運作造成我捫操作上的不便,
當然到了正式環境時會建議將其打開,
設定的地方在
#vim /etc/sysconfig/selinux //將其中enable 修改成disabled 後再重新開機就不會在啟用了。

若是希望現在就關閉它,可以使用指令
#setenforce 0
要啟用則是將0改成 1
然後再透過指令去確認它現在的運作狀況
#getenforce

關於SElinux操作大概先論述到這裡,
來進入今天的主題netfilter
http://ithelp.ithome.com.tw/upload/images/20161206/20103362SbuSxjZYAl.png
有在運用linux系統的人對它一定不陌生,我捫許多的存取限制,NAT功能大多都是由它達成的。

在CentoOS6 當中要啟用netfilter很簡單,可以將其當作一個服務來操作就好
#service iptables start
#chkconfig iptables on
在CentOS7版,因為服務都被包進systemctl當中,所以都是透過它進行調整。
#systemctl start iptables
#systemctl enable iptables

netfilter的操作指令是iptables,它可以在我捫的CLI介面直接直行,程序會馬上被套用。
但我捫大多時候是使用shellscript的方式去進行它,
看你是要寫在iptables的設定當中,或者另外寫一個shell出來讓它開機時載入都可以。
我們這邊拿個簡單的範例來說明iptables的防火牆功能。
第一件事要要記住,防火牆規則這種東西,是first match,
也就是說當它比對到相對應的規則後就會直接使用這個規則,不會在管後面到底有沒有甚麼限制。

不管裡面有沒有東西,都先把這邊清空掉。 (關於三個表內容可以詳見鳥哥的操作)
#iptables -F -t filter
#iptables -t filter -X
#iptables -F -t mangle
#iptables -t mangle -X
#iptables -F -t nat
#iptables -t nat -X

lo 通常視本機localhost,所以就直接開放,如此在進行自我的時候比較不會有問題
#iptables -t filter -A INPUT -i lo -j ACCEPT
#iptables -t filter -A OUTPUT -o lo -j ACCEPT

在來這邊就可以稍微解說一下,
-i eth0 表示指定對eth0這張網卡進行篩選,也可以不指定範指全部介面。
-s 表示限制來源端,只限制172.16.100.143
-d 就表示目的地,若netfilter運作在一台伺服器身上,通常指的是自己伺服器本機。
但有時候netfilter會被當成中介的存在,這時候-d是誰就要看怎麼運用了。
-p 表示的是協定,有TCP、UDP、ICMP可以使用,若運用在DNS上就會使用udp
-dport 這邊的dport表示是目標端的port,我們可以將它當成要連接到本機端的port號
-j是說對於以上限制要做甚麼樣的事情,到底是ACCEPT(允許)或者DROP(拋棄)
這邊也有第三個選項REJECT(它也是拋棄的一種,但會跟你說你被我拋棄囉)
這個通常只有在認證考試時用到,沒有人阻擋了別人還跟他說你被我阻擋了吧。
所以下面這個範例就很明白了TCP -22表示的是SSH服務,
只允許192.168.100.250這個IP可以透過SSH服務連結到192.168.100.1的設備。
#iptables -t filter -A INPUT -i eth0 -s 172.16.100.143 -d 172.16.100.144 -p tcp --dport 22 -j ACCEPT

#已連線的封包可以連入
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#新連線禁止連入
iptables -t filter -A INPUT -m state --state NEW,INVALID -j DROP

這邊就要另外介紹一下 (比較詳細的內容也可以參考鳥哥)
前面這兩個我們會放行的原因,表示說前面我們有放行的的協定,這些是可信任的。
ESTABLISHED:已經連線成功的連線狀態,例如TCP三項交握完成,要開始進行相互資料傳送的封包的階段
RELATED :這個表示連現已經建立,可以開始進行資料的正在進行,但又要創立新的連線資訊。
(這個拿FTP作為例子比較恰當,像是我捫一開始進行FTP連現的時候是用TCP-21,這邊經過連線驗證通過後,可以開始進行指令的傳送,剛好我們要下載資料了,透過TCP-21下達下載的指令,這時候就會開啟新的連線資訊的創建,因為FTP的資料傳送是走TCP-20)

這兩者我們會阻擋的原因是擔心有人惡意進行攻擊,送大量破損的封包來阻礙,或者其他的情形。
INVALID :破損的封包,也就是可能為惡意封包的類型。
NEW :初次要建立連線的封包,例如:TCP三項交握,剛開始SYN的封包類型
(也可能是TIMEOUT要重新連線)

然後最後我們要記得做一件事情,就是如果沒有符合上面規則的,我們通常都是直接DROP掉。
這樣才比較安全。
#iptables -t filter -A INPUT -j DROP

這樣就完成了一個簡單的連線限制了,但是這樣是非常陽春的,它還有很多功能可以去用。
例如限制封包進出量,以其他限制等等。

要查看netfilter目前的運作狀況可以下指令
#service iptables status
#iptables -L -

當然這些設定檔執行的狀況都都可以存log下來。

netfilter的功能真的很多,光這個套件的運用就可以獨立寫成一本書籍了,

有興趣的人可以深入去看看它的操作。


上一篇
DAY19-CISCO STP補充
下一篇
DAY21-linux netfilter II
系列文
網管實務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言