0416平常運維(2、firewalld和netfilter、iptables)

4.16任務
10.12 firewalld和netfilter
10.13 netfilter5表5鏈介紹
10.14 iptables語法
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表應用html

擴展(selinux瞭解便可)
selinux教程  http://os.51cto.com/art/201209/355490.htm
selinux pdf電子書  http://pan.baidu.com/s/1jGGdExK
iptables應用在一個網段  http://www.aminglinux.com/bbs/thread-177-1-1.html
sant,dnat,masquerade   http://www.aminglinux.com/bbs/thread-7255-1-1.html
iptables限制syn速率  http://www.aminglinux.com/bbs/thread-985-1-1.html   http://jamyy.us.to/blog/2006/03/206.htmllinux

 

 

 

1 針對網段shell

iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROPwindows

192.168.1.0/24centos

iptables -I INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT安全

-m 後面跟模塊名字,iprange是一個模塊名字,用來支持一個網段bash

--src-range 指定來源的ip範圍服務器

--dst-range 指定目標ip範圍網絡

二、iptables中DNAT、SNAT和MASQUERADE的理解 http://ask.apelearn.com/question/7255app

三、在iptables上一共有四種狀態,分別被稱爲NEW、ESTABLISHED、INVALID、RELATED

NEW:NEW說明這個包是咱們看到的第一個包。意思就是,這是conntrack模塊看到的某個鏈接的第一個包,它即將被匹配了。好比,咱們看到一個SYN 包,是咱們所留意的鏈接的第一個包,就要匹配它。

ESTABLISHED: ESTABLISHED已經注意到兩個方向上的數據傳輸,並且會繼續匹配這個鏈接的包。處於ESTABLISHED狀態的鏈接是很是容易理解的。只要發送並接到應答,鏈接就是ESTABLISHED的了。一個鏈接要從NEW變爲ESTABLISHED,只須要接到應答包便可,無論這個包是發往防火牆的,仍是要由防火牆轉發的。ICMP的錯誤和重定向等信息包也被看做是ESTABLISHED,只要它們是咱們所發出的信息的應答。

RELATED: RELATED是個比較麻煩的狀態。當一個鏈接和某個已處於ESTABLISHED狀態的鏈接有關係時,就被認爲是RELATED的了。換句話說,一個鏈接要想是RELATED的,首先要有一個ESTABLISHED的鏈接。這個ESTABLISHED鏈接再產生一個主鏈接以外的鏈接,這個新的鏈接就是 RELATED的了,固然前提是conntrack模塊要能理解RELATED。ftp是個很好的例子,FTP-data 鏈接就是和FTP-control有關聯的,若是沒有在iptables的策略中配置RELATED狀態,FTP-data的鏈接是沒法正確創建的,還有其餘的例子,好比,經過IRC的DCC鏈接。有了這個狀態,ICMP應答、FTP傳輸、DCC等才能穿過防火牆正常工做。注意,大部分還有一些UDP協議都依賴這個機制。這些協議是很複雜的,它們把鏈接信息放在數據包裏,而且要求這些信息能被正確理解。

INVALID:INVALID說明數據包不能被識別屬於哪一個鏈接或沒有任何狀態。有幾個緣由能夠產生這種狀況,好比,內存溢出,收到不知屬於哪一個鏈接的ICMP錯誤信息。通常地,咱們DROP這個狀態的任何東西,由於防火牆認爲這是不安全的東西。

四、限速

iptables限制syn速度 http://ask.apelearn.com/question/985%20;

iptables -N syn-flood
iptables -A syn-flood -m limit --limit 5/s --limit-burst 500 -j RETURN
iptables -A syn-flood -j DROP
iptables -I INPUT -j syn-flood

 

 

iptables 的limit模塊  https://www.centos.bz/2018/10/iptables-%E7%9A%84limit%E6%A8%A1%E5%9D%97/

 

 

 

 一、SELINUX
安全加強型Linux (SecurityEnhanced Linux)簡稱SELinux,它是一個Linux內核模塊,也是Linux的一個安全子系 統。SELinux主要由美國國家安全局開發。2.6及以上版本的Linux內核都已經集成了 SELinux模塊。SELinux的結構及 配置很是複雜,並且大量概念性的東西,要學精難度較大。不少Linux系統管理員嫌麻煩都把SELinux關閉了。

臨時關閉SELINUX    setenforce 0

查看狀態    getenforce

selinux永久關閉  設置配置文件 vi /etc/selinux/config

三個狀態:
1)enforcing 開啓
2)permissive 開啓狀態,可是不生效,只記錄日誌。臨時關閉,會調整到這個狀態。
3)disabled 關閉
更改完配置後,須要重啓系統,方可生效。

二、firewalld和netfilter

centos7默認使用的firewalld防火牆,netfilter是不開啓的

Linux防火牆-netfilter

開啓centos6上的防火牆netfilter,netfilter纔是防火牆的名字,iptables只是netfilter的工具

禁止firewalld開機啓動 systemctl disable firewalld
關掉firewalld服務  systemctl stop firewalld

開啓netfilter以前,須要安裝    yum install -y iptables-services

安裝完成後產生iptables服務  systemctl enable iptables

開啓iptables 服務    systemctl start iptables

 查看默認規則  iptables -nvL,服務啓動後,自帶的規則

三、netfilter5表5鏈介紹

netfilter的5個表

man iptables 能夠查看

iptables詳解  http://www.cnblogs.com/metoy/p/4320813.html

1)filter表
三個鏈:有 INPUT、 FORWARD、 OUTPUT
做用:過濾數據包 

2)nat表
三個鏈:    PREROUTING、 OUTPUT、 POSTROUTING
做用:用於網絡地址轉換(IP、端口)


3)mangle表
五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
做用:用於給數據包作標記,修改數據包的服務類型、TTL、而且能夠配置路由實現QOS,幾乎用不到

4)raw表
兩個鏈: OUTPUT、PREROUTING 
做用:能夠實現不追蹤某些數據包,決定數據包是否被狀態跟蹤機制處理,幾乎不用 

5)security表
三個鏈:INPUT、OUTPUT和FORWARD
做用:security表在centos6中並無,用於強制訪問控制(MAC)的網絡規則,幾乎不用 


數據包流向與netfilter的5個內置的鏈
 PREROUTING:數據包進入路由表以前
 INPUT:經過路由表後目的地爲本機
 FORWARD:經過路由表後,目的地不爲本機
 OUTPUT:由本機產生,向外發出
 POSTROUTING:發送到網卡接口以前
 

iptables 相關的命令應用及語法

 

iptables [-t table]命令[chain] [rules] [j target]
格式說明:
table:指定表名,iptables內置包括filter表、nat表、mangle、raw表和security表。
命令:對鏈的操做命令
chain:鏈名
rules:匹配規則
target:動做如何進行

操做命令選項說明:
-P或--policy <鏈名>:定義默認策略
-L或--list    <鏈名>  :查看iptables規則列表
-A或--append <鏈名>:在規則列表的最後增長1條規則
-I或--insert <鏈名>:在指定的位置插入1條規則
-D或--delete <鏈名>:從規則列表中刪除1條規則
-R或--replace <鏈名>:替換規則列表中的某條規則
-F或--flush <鏈名>:刪除表中全部規則(臨時刪除,重啓iptables後復原) 
-Z或--zero <鏈名>:將表中數據包計數器和流量計數器歸零

規則選項說明:
-i或--in-interface<網絡接口名>:指定數據包從哪一個網絡接口進入,如ppp0、eth0和ethl等 -o或--out-interface <網絡接口名>:指定數據包從哪塊網絡接口輸出,如ppp0、eth0和ethl等
-p或--proto協議類型 <協議類型>:指定數據包匹配的協議,如TCP、UDP和ICMP等 -s或--source<源地址或子網>:指定數據包匹配的源地址
--sport<源端口號>:指定數據包匹配的源端口號,可使用「起始端口號:結束端口號」的格式指定一個範圍的端口 
-d或--destination <目標地址或子網>:指定數據包匹配的目標地址
--dport<目標端口號>:指定數據包匹配的目標端口號,可使用「起始端口號:結束端口號」的格式指定一個範圍的端口

動做選項說明:
ACCEPT:接受數據包 
DROP:丟棄數據包
REDIRECT:與DROP基本同樣,區別在於它除了阻塞包以外,還向發送者返回錯誤信息。
SNAT:源地址轉換,即改變數據包的源地址 
DNAT:目標地址轉換,即改變數據包的目的地址
MASQUERADE:IP假裝,便是常說的NAT技術,MASQUERADE只能用於ADSL等撥號上網的IP假裝,也就是主機的IP是由ISP分配動態的;若是主機的IP地址是靜態固定的,就要使用SNAT

 

 

 

查看iptables規則    iptables -nvL    

規則保存位置cat /etc/sysconfig/iptables

選項說明:
n:數字輸出。IP地址和端口會以數字的形式打印
v:詳細輸出。這個選項讓list命令顯示接口地址、規則選項等信息
L -list:顯示所選鏈的全部規則。若是沒有選擇鏈,則會顯示全部鏈的全部規則


2)iptables -F     清空iptables規則,清空後/etc/sysconfig/iptables文件中仍是有的

這裏清空的只是當前iptables中設置的規則,不會清空以及保存的規則。重啓iptables服務後還會去加載/etc/sysconfig/iptables配置文件中的規則,便可恢復保存過的規則

service iptables restart      iptables服務重啓後,規則恢復

 

service iptables save 保存規則,重啓後依然生效,執行此命令會把當前iptables的全部規則保存到/etc/sysconfig/iptables文件中

 iptables -Z  能夠把計數器清零 

 iptables -t nat -nvL   查看nat表的規則, -t指定表,不加-t 默認filter表

 

增長一條規則 :    iptables -A INPUT -s 192.168.86.3 -p tcp --sport 1234 -d 192.168.86.31 --dport 80 -j DROP

 

-A前不加-t默認filter表,-A(add)增長一條規則,針對INPUT鏈,指定來源IP :-s,-p指定協議,--sport來源端口,-d目標ip,--dport 目標端口,-j DROP把數據扔掉/REJECT(拒絕),DROP和REJECT效果同樣,都是讓數據包過不來,封掉ip

iptables -I INPUT -p tcp --dport 80 -j DROP        能夠不寫目標ip只寫目標端口,-p tcp必定要寫,使用dport前面必定要指定協議

-I(把規則放在最前面,插入)和-A (把規則放在最後面,添加),誰在前面誰就會被先匹配和加載

iptables -D INPUT -p tcp --dport 80 -j DROP   刪除一條規則

iptables -D INPUT -s 192.168.86.3 -p tcp --sport 1234 -d 192.168.86.31 --dport 80 -j DROP  刪除一條規則

 

 

iptables -nvL --line-numbers   把規則中的序列號打印出來

iptables -D INPUT 5  根據編號來刪除規則

iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

添加默認規則
默認策略是ACCEPT


更改默認策略爲DROP   iptables -P OUTPUT DROP  此處執行後會讓遠程鏈接斷開再也連不上

須要再服務器上    iptables -P OUTPUT ACCEPT        默認容許全部OUTPUT鏈的數據包經過,放行
默認容許全部FORWARD鏈的數據包經過    iptables -P FORWARD ACCEPT
默認丟棄INPUT鏈的數據包    iptables -P INPUT DROP

 

iptables filter表小案例

案例1:放行端口
只放行80、2一、22三個端口的數據包,且22端口只有指定的IP段才能經過 這個案例能夠編寫一個shell腳原本實現。
vi /usr/local/sbin/iptables.sh    加入以下內容

案例1:放行端口
只放行80、2一、22三個端口的數據包,且22端口只有指定的IP段才能經過 這個案例能夠編寫一個shell腳原本實現。
vi /usr/local/sbin/iptables.sh    加入以下內容


#! /bin/bash                                    定義執行腳本的shell
ipt="/usr/sbin/iptables"                 定義一個變量,絕對路徑
$ipt -F                                            清空iptables規則
$ipt -P INPUT DROP                      默認規則,INPUT策略DROP,丟棄全部數據包
$ipt -P OUTPUT ACCEPT                默認規則,放行全部OUTPUT鏈的數據包
$ipt -P FORWARD ACCEPT            默認規則,放行全部FORWARD鏈的數據包
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT    這條規則容許RELATED和ESTABLISHED狀態的數據包給放行,這條規則必加,不然可能致使某些服務連不上  
$ipt -A INPUT -s 192.168.86.0/24 -p tcp --dport 22 -j ACCEPT                僅容許192.168.86.0/24網段連接22端口
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT                                               容許經過全部80端口的數據包
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT                                                容許經過全部21端口的數據包


禁ping
讓本機能夠ping通別的機器,可是別的機器ping不通本機
 icmp示例
 service iptables restart  先把規則恢復成默認狀態
 

此時在windows能夠ping通本機


 

丟棄icmp包類型爲8的數據包。icmp類型爲8的數據包是icmp請求,類型爲0的是應答包
 iptables -I INPUT -p icmp --icmp-type 8 -j DROP   添加完此規則後,windows沒法ping通本機,本機能夠ping外網,不影響鏈接使用,只禁聽

 

 

iptables nat表應用

需求1:可讓B機器鏈接外網

A機器兩塊網卡ens33(192.168.159.3)、ens37(192.168.100.1),ens33能夠上外網,ens37僅僅是內部網絡,

B機器只有ens37(192.168.100.100),和A機器ens37能夠通訊互聯

步驟1:在虛擬機。A機器添加一個內網網卡,B機器也添加內網網卡。網卡模式並設置爲LAN區段,自定義名字同樣。

按下圖:添加網絡適配器

選擇新添加的網卡,選擇LAN區段,至關於給網卡連到了一個內網的交換機上,讓兩臺電腦都鏈接這個交換機進行通訊

 

A機器設置完成

設置B機器的網卡

禁掉B機器的啓動時鏈接,一樣按以前設置,添加新的網卡,選擇相同LAN區段,目的是保證AB機器的處於同一網段

設置完成,啓動兩臺機器

查看A機器的網卡,能夠遠程鏈接,B機器由於沒有windows能夠鏈接的ip,沒法遠程鏈接

給ens37設置IP

ifconfig    ens37 192.168.100.1/24       24網段,此ip重啓後就沒有了,永久生效須要更改配置文件

查看B機器,end33雖然存在,可是已經給關掉了,保險起見可使用ifdown ens33  禁掉

給B機器的ens37設置IP : 192.168.100.100

可使用mii-tool ens37的網絡狀態。

此時兩臺機器能夠互聯

可是兩臺機器都沒法鏈接外網

設置方法

A機器上打開路由轉發     echo "1">/proc/sys/net/ipv4/ip_forward   修改內核參數爲1

ip_forward默認爲0,表示沒有開啓端口轉發(nat的應用),而後執行命令打開

增長規則:

A機器上執行     iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE   目的是讓100.0網段可以上網

B上設置網關爲192.168.100.1

route add default gw 192.168.100.1

設置完成後能夠ping通 A機器 192.168.159.3

給B機器設置DNS,公共的DNS119.29.29.29,vi /etc/resolv.conf

 

需求2:C機器和B機器鏈接

C機器只能和A通訊,讓C機器能夠直接連通B機器的22端口  

192.168.86.31的端口22映射到端口1122,鏈接B機器的192.168.100.100

B機器的192.168.100.100的端口22,映射爲1122的端口,用192.168.86.31鏈接1122端口,也就是鏈接192.168.100.100的22端口

一、A上打開路由轉發    echo "1">/proc/sys/net/ipv4/ip_forward  

二、A上添加規則

添加以前要把以前的規則刪掉:

iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

而後添加規則:    iptables -t nat -A PREROUTING -d 192.168.86.31 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22  , 端口轉發,轉發到100.100的22端口

A上執行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.86.31 

 B上設置網關爲192.168.100.1,設置網關才能聯網

此時使用客戶端連接便可

w查看負載,看到來源自192.168.86.1就是C機器

這說明機器C:192.168.86.1已經和機器B:192.168.100.100相連,機器C和機器A可以通訊,而經過機器A來鏈接機器B的映射端口1122,達到了C和B通訊,並且B機器也經過映射端口1122可以鏈接外網。

相關文章
相關標籤/搜索