Linux iptables 配置詳解

一、配置一個filter表的防火墻

1. 查看本機關于 iptables 的設置情況
# iptables -L -n

??? Chain INPUT (policy ACCEPT)
??? target prot opt source destination
??? Chain FORWARD (policy ACCEPT)
??? target prot opt source destination
??? Chain OUTPUT (policy ACCEPT)
??? target prot opt source destination
??? Chain RH-Firewall-1-INPUT (0 references)
??? target prot opt source destination
??? ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
??? ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
??? ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
??? ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
??? ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
??? ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
??? ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
??? ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
??? ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
??? ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
??? REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

可以看出我在安裝linux時,選擇了有防火墻,并且開放了22,80,25端口.
如果你在安裝linux時沒有選擇啟動防火墻,是這樣的

# iptables -L -n

??? Chain INPUT (policy ACCEPT)
??? target prot opt source destination
??? Chain FORWARD (policy ACCEPT)
??? target prot opt source destination
??? Chain OUTPUT (policy ACCEPT)
??? target prot opt source destination

什么規則都沒有.

2.清除原有規則.
不管你在安裝linux時是否啟動了防火墻,如果你想配置屬于自己的防火墻,那就清除現在filter的所有規則.
# iptables -F 清除預設表filter中的所有規則鏈的規則
# iptables -X 清除預設表filter中使用者自定鏈中的規則
我們在來看一下
# iptables -L -n

??? Chain INPUT (policy ACCEPT)
??? target prot opt source destination
??? Chain FORWARD (policy ACCEPT)
??? target prot opt source destination
??? Chain OUTPUT (policy ACCEPT)
??? target prot opt source destination

什么都沒有了吧,和我們在安裝linux時沒有啟動防火墻是一樣的.(提前說一句,這些配置就像用命令配置IP一樣,重起就會失去作用),怎么保存.
# /etc/rc.d/init.d/iptables save
這樣就可以寫到 /etc/sysconfig/iptables 文件里了.寫入后記得把防火墻重起一下,才能起作用.
# service iptables restart
現在IPTABLES配置表里什么配置都沒有了,那我們開始我們的配置吧

3.設定預設規則
# iptables -p INPUT DROP
# iptables -p OUTPUT ACCEPT
# iptables -p FORWARD DROP
上面的意思是,當超出了IPTABLES里filter表里的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則里的數據包怎么處理呢,那就是DROP(放棄).應該說這樣配置是很安全的.我們要控制流入數據包

而對于OUTPUT鏈,也就是流出的包我們不用做太多限制,而是采取ACCEPT,也就是說,不在著個規則里的包怎么辦呢,那就是通過.

可以看出INPUT,FORWARD兩個鏈采用的是允許什么包通過,而OUTPUT鏈采用的是不允許什么包通過.

這樣設置還是挺合理的,當然你也可以三個鏈都DROP,但這樣做我認為是沒有必要的,而且要寫的規則就會增加.但如果你只想要有限的幾個規則是,如只做WEB服務器.還是推薦三個鏈都是DROP.
注:如果你是遠程SSH登陸的話,當你輸入第一個命令回車的時候就應該掉了.因為你沒有設置任何規則.
怎么辦,去本機操作唄!

4.添加規則.
首先添加INPUT鏈,INPUT鏈的默認規則是DROP,所以我們就寫需要ACCETP(通過)的鏈

為了能采用遠程SSH登陸,我們要開啟22端口
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
注:這個規則,如果你把OUTPUT 設置成DROP的就要寫上這一部,好多人都是望了寫這一部規則導致,始終無法SSH.在遠程一下,是不是好了.

其他的端口也一樣,如果開啟了web服務器,OUTPUT設置成DROP的話,同樣也要添加一條鏈:
# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
其他同理.

如果做了WEB服務器,開啟80端口
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

如果做了郵件服務器,開啟25,110端口
# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

如果做了FTP服務器,開啟21端口
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

如果做了DNS服務器,開啟53端口
# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

如果你還做了其他的服務器,需要開啟哪個端口,照寫就行了.
上面主要寫的都是INPUT鏈,凡是不在上面的規則里的,都DROP

允許icmp包通過,也就是允許 ping
# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話)
# iptables -A INPUT -p icmp -j ACCEPT (INPUT設置成DROP的話)

允許loopback!(不然會導致DNS無法正常關閉等問題)
# iptables -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
# iptables -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

下面寫OUTPUT鏈,OUTPUT鏈默認規則是ACCEPT,所以我們就寫需要DROP(放棄)的鏈.

減少不安全的端口連接
# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通信,阻塞這些端口能夠有效地減少你的網絡上可能被感染的機器和它們的遠程主服務器進行獨立通信的機會
還有其他端口也一樣,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也應被禁止,我在這寫的也不全,有興趣的朋友應該去查一下相關資料.

當然出入更安全的考慮你也可以包OUTPUT鏈設置成DROP,那你添加的規則就多一些,就像上邊添加
允許SSH登陸一樣.照著寫就行了.

下面寫一下更加細致的規則,就是限制到某臺機器

如:我們只允許192.168.0.3的機器進行SSH連接
# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子網掩碼數.但要記得把 /etc/sysconfig/iptables 里的這一行刪了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因為它表示所有地址都可以登陸.
或采用命令方式:
# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再說一邊,反是采用命令的方式,只在當時生效,如果想要重起后也起作用,那就要保存.寫入到/etc/sysconfig/iptables文件里.
# /etc/rc.d/init.d/iptables save
這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的規則連接也一樣這么設置.

在下面就是FORWARD鏈,FORWARD鏈的默認規則是DROP,所以我們就寫需要ACCETP(通過)的鏈,對正在轉發鏈的監控.

開啟轉發功能,(在做NAT時,FORWARD默認規則是DROP時,必須做)
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT

丟棄壞的TCP包
#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

處理IP碎片數量,防止攻擊,允許每秒100個
#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

設置ICMP包過濾,允許每秒1個包,限制觸發條件是10個包
#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

我在前面只所以允許ICMP包通過,就是因為我在這里有限制.
二、配置一個NAT表放火墻

1. 查看本機關于NAT的設置情況
# iptables -t nat -L

??? Chain PREROUTING (policy ACCEPT)
??? target prot opt source destination
??? Chain POSTROUTING (policy ACCEPT)
??? target prot opt source destination
??? SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
??? Chain OUTPUT (policy ACCEPT)
??? target prot opt source destination

我的NAT已經配置好了的(只是提供最簡單的代理上網功能,還沒有添加防火墻規則).關于怎么配置NAT,參考我的另一篇文章
當然你如果還沒有配置NAT的話,你也不用清除規則,因為NAT在默認情況下是什么都沒有的

如果你想清除,命令是
# iptables -F -t nat
# iptables -X -t nat
# iptables -Z -t nat

2. 添加規則
添加基本的NAT地址轉換,(關于如何配置NAT可以看我的另一篇文章)
添加規則,我們只添加DROP鏈.因為默認鏈全是ACCEPT.

防止外網用內網IP欺騙
# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

如果我們想,比如阻止MSN,QQ,BT等的話,需要找到它們所用的端口或者IP,(個人認為沒有太大必要)
例:
禁止與211.101.46.253的所有連接
# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP

禁用FTP(21)端口
# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
這樣寫范圍太大了,我們可以更精確的定義.
# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
這樣只禁用211.101.46.253地址的FTP連接,其他連接還可以.如web(80端口)連接.

按照我寫的,你只要找到QQ,MSN等其他軟件的IP地址,和端口,以及基于什么協議,只要照著寫就行了.

最后:
drop非法連接
# iptables -A INPUT -m state --state INVALID -j DROP
# iptables -A OUTPUT -m state --state INVALID -j DROP
# iptables-A FORWARD -m state --state INVALID -j DROP

允許所有已經建立的和相關的連接
# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# /etc/rc.d/init.d/iptables save
這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火墻重起一下,才能起作用
# service iptables restart
別忘了保存,不行就寫一部保存一次.你可以一邊保存,一邊做實驗,看看是否達到你的要求


本文轉自 lover00751CTO博客,原文鏈接:http://blog.51cto.com/wangwei007/1095790,如需轉載請自行聯系原作者


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393328.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393328.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

06 Nginx

1.檢查linux上是否通過yum安裝了nginx rpm -qi nginx2.解決安裝nginx所依賴包 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel ope…

java編寫安卓程序代碼,安卓:從Android的Java源代碼code創建UML

i am looking for a program that can create automatically an Uml from my Java-Android source code.I have tested ArgoUml, but it does not support Android.Have any one a suggestion?Thanks!解決方案I can second what Tom Morris wrote in the comment above. Even …

leetcode1052. 愛生氣的書店老板(滑動窗口)

今天,書店老板有一家店打算試營業 customers.length 分鐘。每分鐘都有一些顧客(customers[i])會進入書店,所有這些顧客都會在那一分鐘結束后離開。 在某些時候,書店老板會生氣。 如果書店老板在第 i 分鐘生氣&#xf…

amazon alexa_在Amazon Alexa上推出freeCodeCamp編碼瑣事測驗

amazon alexaNow you can learn coding concepts hands-free using an Amazon Echo.現在,您可以使用Amazon Echo免提學習編碼概念。 freeCodeCamp.org contributor David Jolliffe created a quiz game with questions on JavaScript, CSS, networking, and comput…

第一類第二類丟失更新

第一類丟失更新 A事務撤銷時,把已經提交的B事務的更新數據覆蓋了。這種錯誤可能造成很嚴重的問題,通過下面的賬戶取款轉賬就可以看出來: 時間 取款事務A 轉賬事務B T1 開始事務 T2 開始事務 T3 查詢賬戶余額為1000元 …

oracle數據字典表與視圖

oracle數據字典表與視圖 數據字典是數據的數據,也就是元數據。描述了數據庫的物理與邏輯存儲與相應的信息。模式中對象的定義信息,安全信息,完整性約束信息,和部分的性能監控信息等。數據字典表 與視圖存儲在system表空間中的。有…

團隊作業——項目Alpha版本發布

---恢復內容開始--- https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3329 <作業要求的鏈接> Gorious Computer <寫上團隊名稱> 發布項目α版本&#xff0c;對項目…

java臟字過濾_臟字過濾

1.[文件]SensitiveWordFilter.java ~ 7KB下載(141)package com.forgov.sharpc.infrastruture.util;import static java.util.Collections.sort;import java.util.ArrayList;import java.util.Collection;import java.util.Comparator;import java.util.HashSet;import java.uti…

react中使用構建緩存_完整的React課程:如何使用React構建聊天室應用

react中使用構建緩存In this video course, youll learn React by building a chat room app.在本視頻課程中&#xff0c;您將通過構建聊天室應用程序來學習React。 By the end of the video, youll have a solid understanding of React.js and have your very own chat room…

leetcode1509. 三次操作后最大值與最小值的最小差

給你一個數組 nums &#xff0c;每次操作你可以選擇 nums 中的任意一個元素并將它改成任意值。 請你返回三次操作后&#xff0c; nums 中最大值與最小值的差的最小值。 示例 1&#xff1a; 輸入&#xff1a;nums [5,3,2,4] 輸出&#xff1a;0 解釋&#xff1a;將數組 [5,3,…

MySQL異步復制

準備&#xff1a;主備庫版本一致&#xff0c;正常安裝軟件。 1、主庫上設置一個復制使用的賬戶&#xff1a; mysql> grant replication slave on *.* to rep1192.168.100.136 identified by dbking; Query OK, 0 rows affected (0.18 sec) mysql> select user,host,passw…

開源一個爬取redmine數據的測試報告系統

背景 軟件測試的最后有一道比較繁瑣的工作&#xff0c;就是編寫測試報告。手寫測試報告在數據統計和分析上面要耗費比較大的事件和精力。之前工作室使用mantis管理bug缺陷。公司有內部有個系統&#xff0c;可以直接從mantis上面獲取數據并進行統計&#xff0c;生成一份測試報告…

java cxf 雙向通訊_CXF 在spring boot 2 發布多個服務

0. 問題來源之前配置cxf服務端都是在spring 3以下&#xff0c;后來使用spring mvc 還都是基于xml的配置文件模式&#xff0c;在springboot模式下&#xff0c;實現起來更為簡單了。此次記錄下spring boot 2下的實現方式。1. 準備工作項目中&#xff0c;直接拉入spring boot cxf相…

小程序 堅屏_如何構建堅如磐石的應用程序

小程序 堅屏不同的應用程序設計選項概述 (An overview of different app design options) When we design software, we constantly think about error cases. Errors have a huge impact on the way we design and architecture a solution. So much so, in fact, that there …

C# 分層

三層架構分為&#xff1a;表現層&#xff08;UI&#xff09;、業務邏輯層&#xff08;BLL&#xff09;、數據訪問層&#xff08;DAL&#xff09;再加上實體類庫&#xff08;Model&#xff09; 轉載請注明出自朱朱家園http://blog.csdn.net/zhgl7688 1、實體類庫&#xff08;Mod…

leetcode1177. 構建回文串檢測(前綴和)

給你一個字符串 s&#xff0c;請你對 s 的子串進行檢測。 每次檢測&#xff0c;待檢子串都可以表示為 queries[i] [left, right, k]。我們可以 重新排列 子串 s[left], …, s[right]&#xff0c;并從中選擇 最多 k 項替換成任何小寫英文字母。 如果在上述檢測過程中&#xf…

java界面化二叉排序樹_層次序創建二叉樹(圖形界面和控制臺輸入實現)

1 2018.11.72 XT34 /**5 * 功能&#xff1a;構造二叉樹6 * 說明&#xff1a;7 * 1.主函數輸入模式有兩種&#xff0c;BT參數 true 圖形界面&#xff0c;false 控制臺輸入8 * 2.構造樹是按層次遍歷結果輸入的 如&#xff1a;ABCDE*F**GH9 */1011 import javax.swing.*;12 import…

web開發環境_Web開發人員的開發環境

web開發環境With all the tools and programs available, it can be challenging to figure out the best way to set up your development environment on your computer.使用所有可用的工具和程序&#xff0c;尋找在計算機上設置開發環境的最佳方法可能是一項挑戰。 In this…

使用.net Stopwatch class 來分析你的代碼

當我們在調試&#xff0c;優化我們的代碼的時候&#xff0c;想知道某段代碼的真正的執行時間&#xff0c;或者我們懷疑某段代碼&#xff0c;或是某幾段代碼執行比較慢&#xff0c; 需要得到具體的某段代碼的具體執行時間的時候。有一個很好用的類Stopwatch。 Stopwatch 類在 Sy…

Docker 部署 postgresql 與 pgadmin4

Docker快速部署PostgreSQL服務 快速開始 請新建一個目錄postgresql&#xff0c;進入目錄postgresql&#xff0c;將以下文件保存為docker-compose.yml&#xff0c;然后執行docker-compose up version: 3 services:mydb:image: postgres:11volumes:- db-data:/var/lib/postgresql…