linux防火牆簡單應用整理


 



***某臺電腦有不少種途徑,其中經過端口進行***比較廣泛,並且一經成功危害比較大。特別是做爲服務器的計算機,把沒必要要的端口關閉,這是經常使用的作法。web


對端口的處理 經常使用的作法:瀏覽器


關閉全部端口,只打開要對外使用的端口。 安全

例如:做爲web服務器 咱們能夠關閉全部端口,只打開80端口。服務器



修改默認設置

# iptables -L -ndom


看到 INPUT ACCEPT, FORWARD ACCEPT , OUTPUT ACCEPTssh

咱們能夠這樣理解iptables 3個部分組成INPUT, FORWARD 和 OUTPUT咱們先看 INPUT 和 OUTPUT(policy ACCEPT) 表示是徹底接受 全部的數據,也就是說如今的iptables 防火牆 沒有起到任何做用。tcp


修改防火牆的默認設置:ide

# iptables -P INPUT DROP網站

iptables -P INPUT ACCEPTgoogle


只容許某個端口訪問


配置服務器時每每是隻打開某個端口,其餘的端口所有關閉來提升咱們服務器的安全性。


下面我就用端口22來舉個例子如何實現,只容許端口22的訪問 其餘端口所有都不能訪問的, 端口22就是咱們經過ssh來進行遠程訪問Linux默認端口。




關閉全部端口

看我如今服務器的狀況:

經過命令 netstat -tnl 能夠查看當前服務器打開了哪些端口


[root@localhost ~]# netstat -tnl


下面咱們關閉全部的端口


]# iptables -P INPUT DROP

]# iptables -P FORWARD DROP

]# iptables -P OUTPUT DROP


再查看一下 iptables -L -n

好成功關閉了全部端口。

打開22端口

下面我只打開22端口,就是下面2個語句

]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

]# service iptables save

打開53端口(原始文件沒有)

下面我只打開53端口,就是下面2個語句

針對本地服務的設置

]# iptables -A INPUT -p tcp --sport 53 -j ACCEPT

]# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

針對DNS服務器的設置

]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

]# iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT


]# service iptables save



再查看下 iptables -L -n 是否添加上去看到添加了

[root@localhost ~]# netstat -tnl



]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT


針對這2條命令進行一些講解吧

-A 參數就當作是添加一條 INPUT 的規則

-p 指定是什麼協議 咱們經常使用的tcp 協議,固然也有udp 例如53端口的DNS

到時咱們要配置DNS用到53端口 你們就會發現使用udp協議的


而 --dport 就是目標端口 當數據從外部進入服務器爲目標端口

反之 數據從服務器出去 則爲數據源端口 使用 --sport


-j 就是指定是 ACCEPT 接收 或者 DROP 不接收



禁止、容許 某個IP訪問



不少時候咱們出於安全的角度須要禁止某個ip訪問本服務器,或者只能接受某個ip訪問。


例如發現服務器受到某個ip***,就能夠拒絕該ip的訪問。

還有就是我這臺服務器裏面不少保密資料,不容許任何ip訪問,就只容許給某一個ip能夠訪問。




1. 首先第一種狀況  禁止某個ip訪問個人網站

要禁止 192.168.1.1 訪問


]# iptables -P INPUT DROP

]# iptables -P FORWARD DROP

]# iptables -P OUTPUT DROP


]# iptables -A INPUT -p tcp -s 192.168.1.-j DROP


2. 只容許某臺電腦訪問

只容許 ip爲 192.168.1.2 的電腦訪問, 只設置 INPUT 經過仍是不行還要設置 OUTPUT 才行


[root@localhost ~]# iptables -A INPUT -p tcp -s 192.168.1.2 -j ACCEPT

[root@localhost ~]# iptables -A OUTPUT -p tcp -d 192.168.1.2 -j ACCEPT


[root@localhost ~]# iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  192.168.1.2          0.0.0.0/0


Chain FORWARD (policy DROP)

target     prot opt source               destination


Chain OUTPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            192.168.1.2


3. 刪除規則




刪除一些規則


咱們常常會添加一些規則,可是當咱們再也不使用了其中一條規則,就要刪除。或者添加寫錯了一些數據,也須要刪除




咱們都知道 iptables -L -n 能夠查看iptables 的設置狀況

經過 iptables -L -n --line-number 能夠顯示規則和相對應的編號多了 num 這一列, 這樣就能夠規則對應的 編號進行刪除了


iptables -D INPUT 2

刪除INPUT鏈編號爲2的規則。


下面我把其他的 也刪除掉。 刪除完了。


]# netstat -nltp

]# iptables -L -n

]# iptables -L -n --line-number

]# iptables -D INPUT 2

]# iptables -D OUTPUT 2

]# iptables -D FORWARD 2


再 iptables -L -n 查看一下 已經被清除了。


過濾無效的數據包



以前咱們配置過iptables只開放某些端口,可是想安全點的話,還須要過濾一些無效的數據包,怎樣纔算無效? 不是正常請求迴應的數據包。





爲何這樣說呢? 例如,如今有臺Linux服務器,只開放2280端口,也就是 INPUTOUTPUT都是開放的,這個2個端口。

Chain INPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80


Chain FORWARD (policy DROP)

target     prot opt source               destination


Chain OUTPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:80


狀況就像如今這樣。爲何說不夠安全呢 ??






假設有人進入了服務器,或者有病毒***程序,它能夠經過2280端口服務器外傳送數據。它的這種方式就和咱們正常訪問2280端口區別。它發向外發的數據不是咱們經過訪問網頁請求而回應的數據包。


下面咱們要禁止這些沒有經過請求迴應的數據包,通通把它們堵住掉。iptables 提供了一個參數 是檢查狀態的,下面咱們來配置下 22 和 80 端口,防止無效的數據包。


]# iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT


能夠看到和咱們之前使用的:

]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

多了一個狀態判斷。


一樣80端口也同樣, 如今刪掉原來的2條規則,iptables -L -n --line-number這個是查看規則並且帶上編號。咱們看到編號就能夠刪除對應的規則了。


這樣就能夠防止別人利用2280端口,隨意發出沒有通過請求的數據包了。



DNS端口53


上幾回視頻咱們作了端口方面的設置, 若是你發現不能解析一些域名,說明DNS不可用,而DNS不能用了,有幾種可能性,其中一種就是防火牆把DNS端口給關閉了。




如何設置iptables來打開DNS端口,DNS端口對應的是53


ping 一下域名也是不通iptables限制了域名解析請求

[root@localhost ~]# ping www.google.com

ping: unknown host www.google.com


下面演示下如何使用 iptables 來設置DNS 53這個端口,若是你不知道 域名服務端口號,你


能夠用命令 : grep domain /etc/services

[root@localhost ~]# grep domain /etc/services

domain          53/tcp                          # name-domain server

domain          53/udp

domaintime      9909/tcp                        # domaintime

domaintime      9909/udp                        # domaintime


同時還要設置

]# iptables -A INPUT -p udp --dport 53 -j ACCEPT

]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT


ping 方面可能還要設置些東西。


用 nslookup 看看吧

[root@localhost ~]# nslookup

> www.google.com

Server:         192.168.1.1

Address:        192.168.1.1#53


Non-authoritative answer:

www.google.com  canonical name = www.l.google.com.

www.l.google.com        canonical name = www-china.l.google.com.

Name:   www-china.l.google.com

Address: 64.233.189.147

Name:   www-china.l.google.com

Address: 64.233.189.99

Name:   www-china.l.google.com

Address: 64.233.189.104


說明本機DNS正常, iptables 容許53這個端口的訪問。


FTP服務設置

我以前也作過iptables容許某個端口訪問的視頻,爲何還要作ftp端口這個演示?由於ftp端口真的比較特殊,並不像8022這些端口。


FTP服務使用了兩個端口20,21

[root@localhost root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@localhost root]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

[root@localhost root]# iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT

[root@localhost root]# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT


這樣就添加完了,咱們用瀏覽器訪問一下ftp,出現超時。因此我剛纔說 ftp 是比較特殊的端口,它還有一些端口是數據傳輸端口,例如目錄列表, 上傳 ,下載 文件都要用到這些端口。而這些端口是任意端口。這個任意真的比較特殊。


若是不指定什麼一個端口範圍, iptables 很難對任意端口開放的,若是iptables容許任意端口訪問, 那和不設置防火牆沒什麼區別,因此不現實的。那麼咱們的解決辦法就是指定這個數據傳輸端口的一個範圍。


下面咱們修改一下ftp配置文件。

我這裏使用vsftpd來修改演示。


[root@localhost root]# vi /etc/vsftpd.conf


在配置文件的最下面 加入

pasv_min_port=30001

pasv_max_port=31000

而後保存退出。


這兩句話的意思告訴vsftpd, 要傳輸數據的端口範圍就在3000131000 這個範圍內傳送。這樣咱們使用 iptables 就好辦多了,咱們就打開 3000131000 這些端口。


[root@localhost root]# iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT

[root@localhost root]# iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT


[root@localhost root]# service iptables save

最後進行保存, 而後咱們再用瀏覽器範圍下 ftp。能夠正常訪問


上傳和下載都正常。。 再查看下 iptables 的設置


[root@localhost root]# iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:21

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:20

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpts:30001:31000


Chain FORWARD (policy DROP)

target     prot opt source               destination


Chain OUTPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:21

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:20

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spts:30001:31000


能夠添加一些對數據包的驗證例如 -m state --state ESTABLISHED,RELATED  等等要求更加高的驗證



wKioL1Xib7GjmuMIAABngpxKQnk972.jpg

相關文章
相關標籤/搜索