***某臺電腦有不少種途徑,其中經過端口進行***比較廣泛,並且一經成功危害比較大。特別是做爲服務器的計算機,把沒必要要的端口關閉,這是經常使用的作法。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端口,就是下面2個語句
]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
]# service iptables save
下面我只打開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能夠訪問。 |
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.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服務器,只開放22和80端口,也就是 INPUT和OUTPUT都是開放的,這個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
狀況就像如今這樣。爲何說不夠安全呢 ??
假設有人進入了服務器,或者有病毒***程序,它能夠經過22,80端口向服務器外傳送數據。它的這種方式就和咱們正常訪問22,80端口有區別。它發向外發的數據不是咱們經過訪問網頁請求而回應的數據包。
下面咱們要禁止這些沒有經過請求迴應的數據包,通通把它們堵住掉。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這個是查看規則並且帶上編號。咱們看到編號就能夠刪除對應的規則了。
這樣就能夠防止別人利用22和80端口,隨意發出沒有通過請求的數據包了。
上幾回視頻咱們作了端口方面的設置, 若是你發現不能解析一些域名,說明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這個端口的訪問。
我以前也作過iptables容許某個端口訪問的視頻,爲何還要作ftp端口這個演示?由於ftp端口真的比較特殊,並不像80,22這些端口。
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, 要傳輸數據的端口範圍就在30001到31000 這個範圍內傳送。這樣咱們使用 iptables 就好辦多了,咱們就打開 30001到31000 這些端口。
[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 等等要求更加高的驗證