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區段,目的是保證A、B機器的處於同一網段
設置完成,啓動兩臺機器
查看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可以鏈接外網。