Linux的iptables相關知識和fail2ban的結合使用

目前市面上比較常見的有3、4層的防火墻,叫網絡層的防火墻,還有7層的防火墻,其實是代理層的網關。

三層的防火墻會在這層對源地址和目標地址進行檢測.

對于七層的防火墻,不管你源端口或者目標端口,源地址或者目標地址是什么,都將對你所有的東西進行檢查。

對于設計原理來講,七層防火墻更加安全,但是這卻帶來了效率更低。

iptables 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。

如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利于在 Linux 系統上更好地控制 IP 信息包過濾和防火墻配置。

防火墻在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信 息包過濾表中,而這些表集成在 Linux 內核中。

在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 信息包過濾系統是一款功能強大的工具,可用于添加、編輯和移除規則。

雖然 netfilter/iptables IP 信息包過濾系統被稱為單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。

netfilter(網絡過濾器) 組件也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。

在內核空間中選擇了5個位置,

1.內核空間中:從一個網絡接口進來,到另一個網絡接口去的

2.數據包從內核流入用戶空間的

3.數據包從用戶空間流出的

4.進入/離開本機的外網接口

5.進入/離開本機的內網接口

內核,是一個操作系統的核心。

提供操作系統的最基本的功能,是操作系統工作的基礎

負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。

這五個位置也被稱為五個鉤子函數(hook functions),也叫五個規則鏈。

1.PREROUTING (路由前)

2.INPUT (數據包流入口)

3.FORWARD (轉發管卡)

4.OUTPUT(數據包出口)

5.POSTROUTING(路由后)

這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。

防火墻策略一般分為兩種,一種叫“通”策略,一種叫“堵”策略。

現在用的比較多個功能有3個:

1.filter 定義允許或者不允許的

2.nat 定義地址轉換的

3.mangle功能:修改報文原數據

iptables傳輸數據包的過程

當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。

如果數據包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。數據包到了INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。

如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出。

iptables的規則表和鏈:

表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用于實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。

鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一 條或數條規則。

當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。

如果滿足,系統就會根據 該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。

Iptables采用“表”和“鏈”的分層結構。現在REHL5是四張表五個鏈。

規則表:

1.filter表——三個鏈:INPUT、FORWARD、OUTPUT

作用:過濾數據包? 內核模塊:iptables_filter.

2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT

作用:用于網絡地址轉換(IP、端口) 內核模塊:iptable_nat

3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

作用:修改數據包的服務類型、TTL、并且可以配置路由實現QOS 內核模塊:iptable_mangle(別看這個表這么麻煩,咱們設置策略時幾乎都不會用到它)

沒用4.Raw表——兩個鏈:OUTPUT、PREROUTING? (這個是REHL4沒有的,不過用的不多)

作用:決定數據包是否被狀態跟蹤機制處理? 內核模塊:iptable_raw

規則鏈:

1.INPUT——進來的數據包應用此規則鏈中的策略

2.OUTPUT——外出的數據包應用此規則鏈中的策略

3.FORWARD——轉發數據包時應用此規則鏈中的策略

4.PREROUTING——對數據包作路由選擇前應用此鏈中的規則(所有的數據包進來的時侯都先由這個鏈處理)

5.POSTROUTING——對數據包作路由選擇后應用此鏈中的規則(所有的數據包出來的時侯都先由這個鏈處理)

其實iptables只是Linux防火墻的管理工具而已,位于/sbin/iptables。真正實現防火墻功能的是 netfilter,它是Linux內核中實現包過濾的內部結構。

iptables的基本語法格式

iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]

表名、鏈名用于指定 iptables命令所操作的表和鏈

命令選項用于指定管理iptables規則的方式(比如:插入、增加、刪除、查看等);

條件匹配用于指定對符合什么樣 條件的數據包進行處理;

目標動作或跳轉用于指定數據包的處理方式(比如允許通過、拒絕、丟棄、跳轉(Jump)給其它鏈處理)。

iptables命令的管理控制選項

-A 在指定鏈的末尾添加(append)一條新的規則

-D 刪除(delete)指定鏈中的某一條規則,可以按規則序號和內容刪除

-I 在指定鏈中插入(insert)一條新的規則,默認在第一行添加

-R 修改、替換(replace)指定鏈中的某一條規則,可以按規則序號和內容替換

-L 列出(list)指定鏈中所有的規則進行查看

-E 重命名用戶定義的鏈,不改變鏈本身

-F 清空(flush)

-N 新建(new-chain)一條用戶自己定義的規則鏈

-X 刪除指定表中用戶自定義的規則鏈(delete-chain)

-P 設置指定鏈的默認策略(policy)

-Z 將所有表的所有鏈的字節和數據包計數器清零

-n 使用數字形式(numeric)顯示輸出結果

-v 查看規則表詳細信息(verbose)的信息

-V 查看版本(version)

-h 獲取幫助(help)

防火墻處理數據包的四種方式

ACCEPT 允許數據包通過

DROP 直接丟棄數據包,不給任何回應信息

REJECT 拒絕數據包通過,必要時會給數據發送端一個響應的信息。

LOG在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則

State(狀態)? ? Explanation(注釋)

NEW? ? ? ? NEW說明這個包是我們看到的第一個包。

意思就是,這是conntrack模塊看到的某個連接第一個包,它即將被匹配了。

比如,我們看到一個SYN 包,是我們所留意的連接的第一個包,就要匹配它。

第一個包也可能不是SYN包,但它仍會被認為是NEW狀態。

這樣做有時會導致一些問題,但對某些情況是有非常大的幫助的。

例如,在 我們想恢復某條從其他的防火墻丟失的連接時,或者某個連接已經超時,但實際上并未關閉時。

ESTABLISHED ESTABLISHED已經注意到兩個方向上的數據傳輸,而且會繼續匹配這個連接的包。

處于ESTABLISHED狀態的連接是非常容 易理解的。只要發送并接到應答,連接就是ESTABLISHED的了。

一個連接要從NEW變 為ESTABLISHED,只需要接到應答包即可,不管這個包是發往防火墻的,還是要由防火墻轉發的。

ICMP的錯誤和重定向等信息包也被看作是ESTABLISHED,只要它們是我 們所發出的信息的應答。

RELATED? ? RELATED是個比較麻煩的狀態。

當一 個連接和某個已處于ESTABLISHED狀態的連接有關系時,就被認為是RELATED的了。

換句話說,一個連接要想 是RELATED的,首先要有一個ESTABLISHED的連接。

這個ESTABLISHED連接再產生一個主連接之外的連接,這 個新的連接就是RELATED的了,當然前提是conntrack模塊要能理解RELATED。

ftp是個很好的例子,FTP-data 連接就是和FTP-control有RELATED的。

還有其他的例子,比如,通過IRC的DCC連接。

有了這個狀態,ICMP應 答、FTP傳輸、DCC等才能穿過防火墻正常工作。

注意,大部分還有一些UDP協議都依賴這個機制。這些協議 是很復雜的,它們把連接信息放在數據包里,并且要求這些信息能被正確理解。

INVALID? ? INVALID說明數據包不能被識別屬于哪個連接或沒有任何狀態。

有幾個原因可以產生這種情況,比如,內存溢出,收到不知屬于哪個連接的ICMP錯誤信息。

一般地,我們DROP這個狀態的任何東西。


禁ping和允許ping

[root@zeyu ~]# iptables -I INPUT -p icmp -j REJECT

[root@zeyu ~]# iptables -I INPUT -p icmp -j ACCEPT

使用“!”可以將條件取反

允許防火墻轉發除ICMP協議以外的所有數據包

iptables -A FORWARD -p ! icmp -j ACCEPT

使用iptables -L查看防火墻設置

centos7 關閉firewall安裝iptables

關閉firewall:

[root@zeyu ~]# systemctl stop firewalld.service #停止firewall

[root@zeyu ~]# systemctl disable firewalld.service #禁止firewall開機啟動

安裝iptables防火墻

[root@zeyu ~]# yum install -y iptables-services #安裝

加入防火墻規則

[root@zeyu ~]# iptables -A INPUT -i lo -j ACCEPT? ? #第一條規則是要把 lo 回環網卡打開

[root@zeyu ~]# iptables -P INPUT DROP

[root@zeyu ~]# iptables -P FORWARD DROP

[root@zeyu ~]# iptables -P OUTPUT DROP

打開22端口允許ssh

[root@zeyu ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@zeyu ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

[root@zeyu ~]# service iptables save #進行保存

iptables: Saving firewall rules to /etc/sysconfig/iptables:[? OK? ]

禁止來自于192.168.81.58的訪問(但是不會拒絕22端口的訪問)

[root@zeyu ~]# iptables -A INPUT -p tcp -s 192.168.81.58 -j DROP

通過 iptables -L -n --line-number 可以顯示規則和相對應的編號

[root@zeyu ~]# iptables -I INPUT 2 -p tcp -s 192.168.81.58 -j REJECT

將規則插入到INPUT鏈第二條

[root@zeyu ~]# iptables -D INPUT 3

刪除INPUT鏈的第3條規則

[root@zeyu ~]# iptables -I INPUT -p icmp -j ACCEPT

[root@zeyu ~]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

[root@zeyu ~]# iptables -A INPUT -p udp --sport 53 -j ACCEPT

[root@zeyu ~]# iptables -A INPUT -p udp --dport 53 -j ACCEPT

[root@zeyu ~]# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

開放DNS(53)端口

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

過濾無效的數據包

端口轉發

首先修改/etc/sysctl.conf

net.ipv4.ip_forward = 1#允許iptalbes FORWARD。

將本地接口IP 61.144.14.72 的3389端口 轉發到116.6.73.229的3389

iptables -t nat -A PREROUTING --dst 61.144.14.72 -p tcp--dport?3389 -j DNAT --to-destination 116.6.73.229:3389

iptables -t nat -A POSTROUTING --dst 116.6.73.229 -p tcp--dport?3389 -j SNAT --to-source 61.144.14.72

清空nat表:

iptables -F -t nat d

fail2ban+iptables 保護服務器的安全

[root@localhost ~]# yum install ed gamin-python ipset

python-inotify-0.9.1-1.el6.noarch.rpm

fail2ban-server-0.9.6-3.el7.noarch.rpm

fail2ban-sendmail-0.9.6-3.el7.noarch.rpm

fail2ban-0.9.6-3.el7.noarch.rpm

fail2ban-firewalld-0.9.6-3.el7.noarch.rpm

[root@localhost ~]#? service fail2ban start

查看fail2ban運行狀態(centOS7下的iptables依賴于firewalld,因此fail2ban也需要firewalld保持運行)

[root@localhost ~]# fail2ban-client status

Status

|- Number of jail: 0

`- Jail list:

[root@localhost ~]# vim /etc/fail2ban/jail.local

[sshd]? ? ? ? ? ? ? #設置jail名稱

enabled = true? ? ? ? #開啟jail

port? ? = ssh? ? ? ? ? ? ? #設置ssh端口

logpath = %(sshd_log)s? #指定sshd的log文件路徑,

bantime = 300? ? ? ? ? ? ? ? ? ? #禁用時長(秒)

maxretry = 5? ? ? ? ? ? ? ? ? ? ? #登陸失敗次數

[http]

enabled = true

port = http,https

filter = apache-banddos

logpath = /var/log/httpd/access_log

bantime = 60

maxretry = 50

findtime = 30

[root@localhost ~]# service fail2ban reload

Redirecting to /bin/systemctl reload? fail2ban.service

[root@localhost ~]# fail2ban-client status

Status

|- Number of jail: 1

`- Jail list: sshd

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent

success

firewall的使用

查看版本:$ firewall-cmd --version

查看幫助:$ firewall-cmd --help

查看設置:

顯示狀態:$ firewall-cmd --state

查看區域信息: $ firewall-cmd --get-active-zones

查看指定接口所屬區域:$ firewall-cmd --get-zone-of-interface=eth0

拒絕所有包:# firewall-cmd --panic-on

取消拒絕狀態:# firewall-cmd --panic-off

查看是否拒絕:$ firewall-cmd --query-panic

更新防火墻規則:# firewall-cmd --reload

# firewall-cmd --complete-reload

兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務

將接口添加到區域,默認接口都在public

# firewall-cmd --zone=public --add-interface=eth0

永久生效再加上 --permanent 然后reload防火墻

設置默認接口區域

# firewall-cmd --set-default-zone=public

立即生效無需重啟

打開端口(貌似這個才最常用)

查看所有打開的端口:

# firewall-cmd --zone=dmz --list-ports

加入一個端口到區域:

# firewall-cmd --zone=dmz --add-port=8080/tcp

若要永久生效方法同上

打開一個服務,類似于將端口可視化,服務需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,這個不詳細說了,詳情參考文檔

# firewall-cmd --zone=work --add-service=smtp

移除服務

# firewall-cmd --zone=work --remove-service=smtp

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容