1. 程式人生 > >關於iptables與firewalld的詳細總結和配置彙總

關於iptables與firewalld的詳細總結和配置彙總

iptables由四個表和五個鏈以及一些規則組成


四個表table:filter、nat、mangle、raw
filter表:過濾規則表,根據預定義的規則過濾符合條件的資料包
nat表:network address translation 地址轉換規則表
mangle:修改資料標記位規則表
Raw:關閉NAT表上啟用的連線跟蹤機制,加快封包穿越防火牆速度
優先順序由高到低的順序為:raw-->mangle-->nat-->filter


五個內建鏈chain
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING




檢視當前規則
iptables -vnL


檢視指定表支援的鏈
iptables -vnL -t filter|raw|mangle|nat


資料包過濾匹配流程


總入站資料流向
raw:PREROUTING
mangle:PREROUTING
nat:PREROUTING


進入的訪問(誰訪問的你)
mangle:INPUT
nat:INPUT
filter:INPUT


轉發資料流向
mangle:FORWARD
filter:FORWARD


出去的訪問(你訪問別人)
raw:OUTPUT
mangle:OUTPUT
nat:OUTPUT
filter:OUTPUT




總出站資料流向
mangle:POSTROUTING
nat:POSTROUTING




資料包傳送流程:


從外界進來的資料包如果是到達本機程式的,首先到達prerouting,prerouting過來後要先檢查路由表,路由表中
判斷該資料包是否給我的如果是則轉發到INPUT,如果不是那檢查是不是通過我穿過我經過可到達別的主機的資料包
那就是FORWARD了,如果是發給本機INPUT的收到了資料包請求後,那麼他要做出迴應就要通過output通過檢查路由表
來決定從哪個網絡卡發出去,發出去的瞬間還要做一個彙總那就是POSTROUTING




1、鏈管理:
-N:new, 自定義一條新的規則鏈
-X:delete,刪除自定義的空的規則鏈
-P:Policy,設定預設策略;對filter表中的鏈而言,其預設策略有:
ACCEPT:接受
DROP:丟棄
-E:重新命名自定義鏈;引用計數不為0的自定義鏈不能夠被重新命名,也不能被刪除


2、檢視:
-L:list, 列出指定鏈上的所有規則,本選項須置後
-n:numberic,以數字格式顯示地址和埠號
-v:verbose,詳細資訊
-vv 更詳細
-x:exactly,顯示計數器結果的精確值,而非單位轉換後的易讀值
--line-numbers:顯示規則的序號
常用組合:
--vnL
--vvnxL --line-numbers
-S selected,以iptables-save 命令格式顯示鏈上規則


3、規則管理:
-A:append,追加
-I:insert, 插入,要指明插入至的規則編號,預設為第一條
-D:delete,刪除
(1) 指明規則序號
(2) 指明規則本身
-R:replace,替換指定鏈上的指定規則編號
-F:flush,清空指定的規則鏈
-Z:zero,置零
iptables的每條規則都有兩個計數器
(1) 匹配到的報文的個數
(2) 匹配到的所有報文的大小之和
chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING


命令操作


拒絕訪問進來的單IP -s來自哪個IP
iptables -A INPUT -s 172.18.105.75 -j DROP|REJECT


取反除了172.18.105.75能通訊其餘全拒絕了
iptables -A INPUT ! -s 172.18.105.75 -j DROP|REJECT




精確顯示計數
iptables -vnxL


重置計數
iptables -Z INPUT 




顯示規則序號及刪除
iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 999 packets, 87675 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     1226   12M REJECT     all  --  *      *       172.18.105.74        0.0.0.0/0   


刪除指定條目規則      
iptables -D INPUT 1


全部清空條目
iptables -F




顯示當前鏈規則,可當作儲存指令碼使用
[
[email protected]
~]# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 172.18.105.74/32 -j REJECT --reject-with icmp-port-unreachable




插入條目到指定位置
iptables -I INPUT -s 172.18.105.100 -j REJECT
iptables -I 2 INPUT -s 172.18.105.100 -j REJECT
iptables -I 2 INPUT -s 172.18.105.100,172.18.105.101 -j REJECT
iptables -I 2 INPUT -s 172.18.105.100 -d 172.18.105.101 -j REJECT
iptables -I 2 INPUT -s 172.18.105.100 -p icmp -j ACCEPT  允許icmp
iptables -I INPUT 2 -s 172.18.105.74 -p tcp --dport 22  -j ACCEPT 




用新的條目替換現有的第2個條目
iptables -R INPUT 2 -S 172.18.105.101 -j REJECT




修改預設策略
iptables -P INPUT ACCEPT|DROP


只要是從ETH0,LO網絡卡進來的流量全部允許或者全部拒絕
iptables -I INPUT 3 -i eth0,lo -j ACCEPT|REJECT


iptables -I OUTPUT 3 -o eth1,lo -j ACCEPT|REJECT




常用規則姿勢


允許或拒絕某地址訪問本機
iptables -A INPUT -s 172.18.138.12 -j ACCEPT|REJECT   


允許或拒絕所有人訪問本機
iptables -A INPUT  -j ACCEPT|REJECT      


允許或拒絕某主機訪問本機tcp協議22埠
iptables -I INPUT 2 -s 172.18.105.74 -p tcp --dport 22  -j ACCEPT|REJECT
普通的只支援加連續埠,擴充套件的則支援連續埠和單埠混合
iptables -I INPUT 2 -s 172.18.105.74 -p tcp --dport 21:22  -j ACCEPT|REJECT




允許或拒絕本機訪問172.18.105.74的icmp ping時響應迴應包
iptables -A OUTPUT -p icmp --icmp-type 0 -d 172.18.105.74 -j ACCEPT|REJECT    


檢查四個標記位中的syn為1 就拒絕 ,其中SYN為1,ACK,FIN,RST 為0  相當於第一次握手
iptables -I INPUT 3 -s 172.18.105.74 -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j REJECT
檢查四個標記位中的SYN,ACK位都為1  就拒絕 ,同上  相當於第二次握手
iptables -I INPUT 3 -s 172.18.105.74 -p tcp --tcp-flags SYN,ACK,FIN,RST SYN,ACK -j REJECT
iptables -I INPUT 3 -s 172.18.105.74 -p tcp --syn -j REJECT


針對一些黑客構造的偽裝包過濾,正常情況下不可能全為0或1 ,對這些無效包拒絕
--tcp-flags ALL ALL   檢查所有標記全為1的
--tcp-flags ALL NONE  檢查所有標記全為0的




-------------------------------------------------------------------------------
-N:new, 自定義一條新的規則鏈
-X:delete,刪除自定義的空的規則鏈
-P:Policy,設定預設策略;對filter表中的鏈而言,其預設策略有:
  ACCEPT:接受
  DROP:丟棄
-E:重新命名自定義鏈;引用計數不為0的自定義鏈不能夠被重新命名,也不能被刪除


建立自定義鏈
iptables -N invalid_packet
iptables -E invalid_packet INVALID_PACKET  重新命名
iptables -vnL
Chain invalid_packet (0 references)


對自定義鏈新增規則
iptables -A invalid_packet -p tcp --tcp-flags ALL ALL -j REJECT
iptables -A invalid_packet -p tcp --tcp-flags ALL NONE -j REJECT


將自定義鏈關聯到現有的內建鏈
iptables -A OUTPUT -s 172.18.105.73(本機地址) -j invalid_packet


刪除引用的自定義鏈
iptables -D 1 INPUT
iptables -D 1 OUTPUT


清空自定義鏈內容
iptables -F invalid_packet


刪除自定義鏈
iptables -X invalid_packet








處理動作:
-j targetname [per-target-options]
簡單: ACCEPT,DROP  允許/拒絕
擴充套件: REJECT:--reject-with:icmp-port-unreachable預設
RETURN:返回呼叫鏈,好比主鏈呼叫到自定義鏈進來後如果看到return則不執行,將返回到主鏈繼續執行
REDIRECT:埠重定向
LOG:記錄日誌,dmesg
MARK:做防火牆標記
DNAT:目標地址轉換
SNAT:源地址轉換
MASQUERADE:地址偽裝










multiport擴充套件
以離散方式定義多埠匹配,最多指定15個埠
[!] --source-ports,--sports port[,port|,port:port]...
指定多個源埠
[!] --destination-ports,--dports port[,port|,port:port]...
指定多個目標埠
[!] --ports port[,port|,port:port]...多個源或目標埠
示例:
來自源172.16.0.0/16訪問本機的172.16.100.10的TCP協議的本機的埠20-22,80允許 ,使用了multiport模組
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT








iprange擴充套件
指明連續的(但一般不是整個網路)ip地址範圍
[!] --src-range from[-to] 源IP地址範圍
[!] --dst-range from[-to] 目標IP地址範圍
示例:
來自172.16.1.5-172.16.1.10的地址,訪問本機的172.16.1.100 且是tcp協議的本機80埠拒絕訪問
iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP






mac擴充套件
指明源MAC地址
適用於:PREROUTING, FORWARD,INPUT chains
[!] --mac-source XX:XX:XX:XX:XX:XX
示例:
來自172.16.0.100且mac地址是00:50:56:12:34:56的主機允許訪問
iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT






string擴充套件
對報文中的應用層資料做字串模式匹配檢測
--algo {bm|kmp}:字串匹配檢測演算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
--from offset 開始偏移
--to offset 結束偏移
[!] --string pattern:要檢測的字串模式
[!] --hex-string pattern:要檢測字串模式,16進位制格式
示例:
本機172.16.100.10的80訪問所有人, 對響應回包中包含google的關鍵字進行拒絕
iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT








time擴充套件
根據將報文到達的時間與指定的時間範圍進行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 時間
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] 每個月的幾號
[!] --weekdays day[,day...] 星期幾
--kerneltz:核心時區,不建議使用,CentOS7系統預設為UTC
注意: centos6 不支援kerneltz ,--localtz指定本地時區(預設)
示例:
來自172.16.0.0/16訪問我本機172.16.100.10的tcp協議的80,呼叫了模組time ,週六日的下午早9點-晚6點半,拒絕上網   注:注意時區問題,不建議使用--kerneltz選項,最好用現有時間-8
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 1:30 --timestop 10:30 --weekdays Sat,Sun --kerneltz -j DROP
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 1:30 --timestop 10:30 --weekdays 1,2,3,4,5 --kerneltz -j DROP








connlimit擴充套件
根據每客戶端IP做併發連線數數量匹配
可防止CC(Challenge Collapsar挑戰黑洞)攻擊 --connlimit-upto n:連線的數量小於等於n時匹配
--connlimit-above n:連線的數量大於n時匹配
通常分別與預設的拒絕或允許策略配合使用
示例:
所有來源訪問本機的172.16.100.10協議tcp的22埠,如果連線大於2 則拒絕
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT








limit擴充套件
基於收發報文的速率做匹配
令牌桶過濾器
--limit rate[/second|/minute|/hour|/day]
--limit-burst number
示例:
前10個包先放行,超過10個後開始每分鐘20個包限制
iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 10 -j ACCEPT
iptables -I INPUT 2 -p icmp -j REJECT






state擴充套件
根據”連線追蹤機制“去檢查連線的狀態,較耗資源
conntrack機制:追蹤本機上的請求和響應之間的關係
狀態有如下幾種:
NEW:新發出請求;連線追蹤資訊庫中不存在此連線的相關資訊條目,因此,將其識別為第一次發出的請求
ESTABLISHED:NEW狀態之後,連線追蹤資訊庫中為其建立的條目失效之前期間內所進行的通訊狀態
RELATED:新發起的但與已有連線相關聯的連線,如:ftp協議中的資料連線與命令連線之間的關係
INVALID:無效的連線,如flag標記不正確
UNTRACKED:未進行追蹤的連線,如raw表中關閉追蹤


--state state狀態
示例:
來自所有人訪問本機的172.16.1.10的22,80埠且tcp的 ,狀態是新建連線及已連線上的, 允許訪問
iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
已經追蹤到的並記錄下來的連線資訊庫
/proc/net/nf_conntrack
調整連線追蹤功能所能夠容納的最大連線數量
/proc/sys/net/nf_conntrack_max
不同的協議的連線追蹤時長
/proc/sys/net/netfilter/
注意:CentOS7 需要載入模組: modprobe nf_conntrack   ,iptables 用-m state 就相當於載入了該模組
iptables的連結跟蹤表最大容量為/proc/sys/net/nf_conntrack_max,各種狀態的超時連結會從表中刪除;當模板滿載時,後續連線可能會超時
解決方法兩個:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout時間
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n






開放被動模式的ftp服務示例
  yum install vsftpd
systemctl start vsftpd
modprobe nf_conntrack_ftp
iptables -F
  對已建立連結和相關聯的通通允許
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  對訪問本機21埠且新建立連結的允許
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
  針對本機對客戶端響應的,已連線的放行
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -vnL






Target:
ACCEPT, DROP, REJECT, RETURN
LOG, SNAT, DNAT, REDIRECT, MASQUERADE,..
LOG: 非中斷target,本身不拒絕和允許,放在拒絕和允許規則前
並將日誌記錄在/var/log/messages系統日誌中
--log-level level 級別: emerg, alert, crit, error, warning, notice, info or debug
--log-prefix prefix 日誌字首,用於區別不同的日誌,最多29個字元
示例:
對來自10.0.1.0/24網段的使用者訪問我本機的80,21,22,23埠針對新連線的使用者,將記錄日誌,日誌的自定義的字首是new connections
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "








總結


任何不允許的訪問,應該在請求到達時給予拒絕
規則在連結上的次序即為其檢查時的生效次序
基於上述,規則優化
1 安全放行所有入站和出站的狀態為ESTABLISHED狀態連線
2 謹慎放行入站的新請求
3 有特殊目的限制訪問功能,要在放行規則之前加以拒絕
4 同類規則(訪問同一應用),匹配範圍小的放在前面,用於特殊處理
5 不同類的規則(訪問不同應用),匹配範圍大的放在前面
6 應該將那些可由一條規則能夠描述的多個規則合併為一條
7 設定預設策略,建議白名單(只放行特定連線)
   1) iptables -P,不建議
   2) 建議在規則的最後定義規則做為預設策略








儲存規則:
儲存規則至指定的檔案
CentOS 6
service iptables save
將規則覆蓋儲存至/etc/sysconfig/iptables檔案中


CentOS 7 可用下面方法儲存規則
iptables -S > /etc/sysconfig/iptables   不建議使用配合匯入時會報錯
iptables-save > /etc/sysconfig/iptables   推薦使用


CentOS 6:
service iptables restart
會自動從/etc/sysconfig/iptables 重新載入規則


CentOS 7 重新載入預存規則檔案中規則:
iptables-restore < /etc/sysconfig/iptables
-n, --noflush:不清除原有規則
-t, --test:僅分析生成規則集,但不提交


開機自動過載規則檔案中的規則:
(1) 用指令碼儲存各iptables命令;讓此指令碼開機後自動執行
/etc/rc.d/rc.local檔案中新增指令碼路徑
/PATH/TO/SOME_SCRIPT_FILE
(2) 用規則檔案儲存各規則,開機時自動載入此規則檔案中的規則
/etc/rc.d/rc.local檔案新增
iptables-restore < /etc/sysconfig/iptables
(3)自定義Unit File,進行iptables-restore






iptables/netfilter網路防火牆:
(1) 充當閘道器
(2) 使用filter表的FORWARD鏈
注意的問題:
(1) 請求-響應報文均會經由FORWARD鏈,要注意規則的方向性
(2) 如果要啟用conntrack機制,建議將雙方向的狀態為ESTABLISHED的報文直接放行


示例1:
A:wanserver:172.18.0.2
B:router:172.18.0.3
C:lanserver:172.18.0.4


A訪問C拒絕
C訪問A允許


A ------ B -------C


1.B伺服器配置,將ip_forward修改成1,路由器的轉發功能必須開啟,否則A到C傳不過去
vi /etc/sysctl.conf
net.ipv4.ip_forward=1 
sysctl -p


2.限制只能lanserver訪問wanserver ,但wanserver不能訪問lanserver,B路由器需要配置
只要是去往訪問C伺服器且狀態是new新發起連線的通通拒絕,所有訪問的協議全拒了
iptables -A FORWARD -d 172.18.0.4 -m state --state NEW -j REJECT 
下面這條是隻限制icmp,其它協議照常使用
iptables -A FORWARD -d 172.18.0.4 -p icmp --icmp-type 8 -j REJECT




示例2:
針對ftp和www服務的


1.安裝ftp和www服務
yum -y install vsftpd httpd


2.ftp服務比較特殊需要載入模組
modprobe nf_conntrack_ftp
lsmod | grep ftp


3.限制規則
存在已連線的和資料關聯的全部允許
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
對於去往C內部伺服器的且是新連線的使用者只允許訪問內部的80,21埠
iptables -A FORWARD -d 172.18.0.4 -p tcp -m multiport --dports 80,21 -m state --state NEW -j ACCEPT
對於來自內部的使用者發起的新連線給予允許 ,目的也就是讓內部能訪問外部網路,要不只能自己玩了
ESTABLISHED,RELATED 在第一條中已經明確了放行,所有不用單獨寫了
iptables -A FORWARD 3 -s 172.18.0.4 -m state --state NEW -j ACCEPT
其餘通通拒絕
iptables -A FORWARD -j REJECT




NAT


NAT: network address translation
PREROUTING,INPUT,OUTPUT,POSTROUTING
請求報文:修改源/目標IP,由定義如何修改
響應報文:修改源/目標IP,根據跟蹤機制自動實現








SNAT:source NAT POSTROUTING, INPUT
讓本地網路中的主機通過某一特定地址訪問外部網路,實現地址偽裝
請求報文:修改源IP


SNAT:固定IP
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
示例:
來自源-s內部網段10.0.1.0/24,去訪問外部的所有資源,但排除了目標! -d 本地的IP段的轉換(目的是內部之間互相訪問是不用做NAT轉換的出去的),用172.18.1.6-172.18.1.9轉換出去上網
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.1.6-172.18.1.9


MASQUERADE:動態IP,如撥號網路
--to-ports port[-port]
--random
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE
示例:
來自源內部10.0.1.0/24網段,訪問目的的所有資源,且排除目的10.0.1.0/24段的轉換,從伺服器的網絡卡上,自動獲取當前ip地址來做NAT,自動化的實現snat的轉換
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE




A-------B-------C


A:外部 172.18.1.2/30  執行著HTTPD服務
B:路由器 172.18.1.1/30  /  192.168.11.1/24
C:內部  192.168.11.2/24


1.互聯互通


2.路由器源SNAT轉換
開啟路由器轉發
vi /etc/sysctl.conf
net.ipv4.ip_forward=1 
sysctl -p
配置SNAT策略
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 ! –d 192.168.11.0/24 -j SNAT --to-source 172.18.1.1
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 ! –d 192.168.11.0/24 -o eth0 -j MASQUERADE


3.測試
C訪問A時,在路由器上把內網地址段通過外網地址172.18.1.1都做了SNAT轉換,這樣內網地址段就可以上網了




DNAT:destination NAT PREROUTING , OUTPUT
把本地網路中的主機上的某服務開放給外部網路訪問(釋出服務和埠對映),但隱藏真實IP
請求報文:修改目標IP








DNAT
--to-destination [ipaddr[-ipaddr]][:port[-port]]
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
示例:
來自所有來源地址去訪問我伺服器的目標外網172.18.100.6的地址的特定22埠,將使用DNAT對映到10.0.1.22的地址上,此時
外部使用者訪問172.18.100.6的22埠實際是訪問的10.0.1.22的22埠
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22


來自所有來源地址去訪問我伺服器的目標外網172.18.100.6的地址的特定80埠,將使用DNAT對映到10.0.1.22的8080埠上
,此時外部使用者訪問172.18.100.6的80埠實際是訪問的10.0.1.22的8080埠
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8080


A-------B-------C


A:外部 172.18.1.2/30  
B:路由器 172.18.1.1/30  /  192.168.11.1/24
C:內部  192.168.11.2/24  執行著HTTPD服務


1.互聯互通


2.路由器源SNAT轉換
開啟路由器轉發
vi /etc/sysctl.conf
net.ipv4.ip_forward=1 
sysctl -p
配置DNAT策略
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.2:80


3.測試
A訪問B的172.18.1.1的80埠時,實際是在訪問192.168.11.2的80埠






PNAT: port nat,埠和IP都進行修改  ,常用方式


源地址在通過路由器的外網介面做NAT轉換的時候,為了避免同一時間,內部訪問經過nat轉換的時候使用了同一埠,產生了埠衝突
為了解決該問題,所以NAT轉換的時候如果發現埠有衝突則自動的更換埠,解決了衝突的問題。








轉發
REDIRECT:
NAT表
可用於:PREROUTING OUTPUT 自定義鏈
通過改變目標IP和埠,將接受的包轉發至不同埠
--to-ports port[-port]
示例:
當來源的所有使用者去訪問我本機的172.16.100.10的80埠時,則轉發到我本機的8080埠上,相當於訪問80其實是訪問的8080
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080








練習:判斷下述規則的意義
iptables -N clean_in
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean_in -d 172.16.100.7 -j RETURN
iptables -A INPUT -d 172.16.100.7 -j clean_in
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT








firewalld服務


firewalld支援劃分區域zone,每個zone可以設定獨立的防火牆規則
歸入zone順序:
先根據資料包中源地址,將其納為某個zone
納為網路介面所屬zone
納入預設zone,預設為public zone,管理員可以改為其它zone
網絡卡預設屬於public zone,lo網路介面屬於trusted zone


firewalld zone分類
zone名稱      預設配置
trusted  允許所有流量
home  拒絕除和傳出流量相關的,以及ssh,mdsn,ipp-client,samba-client,dhcpv6-client預定義服務之外其它所有傳入流量
internal 和home相同
work  拒絕除和傳出流量相關的,以及ssh,ipp-client,dhcpv6-client預定義服務之外的其它所有傳入流量
public  拒絕除和傳出流量相關的,以及ssh,dhcpv6-client預定義服務之外的其它所有傳入流量,新加的網絡卡預設屬於public zone
external 拒絕除和傳出流量相關的,以及ssh預定義服務之外的其它所有傳入流量,屬於external zone的傳出ipv4流量的源地址將被偽裝為傳出網絡卡的地址。
dmz 拒絕除和傳出流量相關的,以及ssh預定義服務之外的其它所有傳入流量
block 拒絕除和傳出流量相關的所有傳入流量
drop 拒絕除和傳出流量相關的所有傳入流量(甚至不以ICMP錯誤進行迴應)




預定義服務 ,以下是過濾中是不受影響的
ssh
Local SSH server. Traffic to 22/tcp


dhcpv6-client
Local DHCPv6 client. Traffic to 546/udp on the fe80::/64 IPv6 network


ipp-client
Local IPP printing. Traffic to 631/udp.


samba-client
Local Windows file and print sharing client. Traffic to 137/udp and 138/udp.


mdns
Multicast DNS (mDNS) local-link name resolution. Traffic to 5353/udp to the 224.0.0.251 (IPv4) or ff02::fb (IPv6) multicast addresses.




firewalld配置


檢視預定義服務列表
firewall-cmd --get-services 
/usr/lib/firewalld/services/*.xml預定義服務的配置


三種配置方法
firewall-config (firewall-config包)圖形工具
firewall-cmd (firewalld包)命令列工具
/etc/firewalld 配置檔案,一般不建議

列出所有可用區域
[
[email protected]
~]# firewall-cmd --get-zones        
block dmz drop external home internal public trusted work


查詢預設區域
[[email protected] ~]# firewall-cmd --get-default-zone
public


修改預設的區域 ,原public
[[email protected] ~]# firewall-cmd --set-default-zone=block


列出當前正使用的區域及網絡卡
[[email protected]
~]# firewall-cmd --get-active-zones
public
  interfaces: ens33
  


  
允許服務的流量通過,如果無--zone= 選項,使用預設區域
[[email protected] ~]# firewall-cmd --add-service=http
[[email protected] ~]# firewall-cmd --add-service=http --zone=drop
刪除則
[[email protected] ~]# firewall-cmd --remove-service=http
[[email protected] ~]# firewall-cmd --remove-service=http --zone=drop


允許指定埠和協議的流量,如果無--zone= 選項,使用預設區域
[[email protected] ~]# firewall-cmd --add-port=8080/tcp
[[email protected] ~]# firewall-cmd --add-port=8080/tcp --zone=drop
刪除則
[[email protected] ~]# firewall-cmd --remove-port=8080/tcp
[[email protected] ~]# firewall-cmd --remove-port=8080/tcp --zone=drop


新增源地址的流量到指定區域,如果無--zone= 選項,使用預設區域
[[email protected] ~]# firewall-cmd --add-source=172.88.88.0/24

[[email protected] ~]# firewall-cmd --add-source=172.88.88.0/24 --zone=block
刪除則
[[email protected] ~]# firewall-cmd --remove-source=172.88.88.0/24
[[email protected] ~]# firewall-cmd --remove-source=172.88.88.0/24 --zone=block


新增來自於指定介面的流量到特定區域,如果無--zone= 選項,使用預設區域
[[email protected] ~]# firewall-cmd --add-interface=ens33
[[email protected] ~]# firewall-cmd --add-interface=ens33 --zone=block
改變指定介面至新的區域,如果無--zone= 選項,使用預設區域
[[email protected] ~]# firewall-cmd --change-interface=ens33 --zone=drop
刪除則
[[email protected] ~]# firewall-cmd --remove-interface=ens33
[[email protected] ~]# firewall-cmd --remove-interface=ens33 --zone=block
[[email protected] ~]# firewall-cmd --remove-interface=ens33 --zone=drop


檢視開放的服務
[[email protected] ~]# firewall-cmd --list-services
ssh dhcpv6-client http


檢視開放的埠
[[email protected] ~]# firewall-cmd --list-ports
8080/tcp


列出指定區域的所有配置資訊,包括介面,源地址,埠,服務等,如果無--zone= 選項,使用預設區域
[[email protected] ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client http
  ports: 8080/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


[[email protected] ~]# firewall-cmd --list-all --zone=block
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  
[[email protected] ~]# firewall-cmd --list-all-zones  顯示所有區域


  
firewall-cmd 常用命令示例及永久生效


禁止自動或手動啟動iptables,相當於把該服務指向了null
systemctl mask iptables
systemctl mask ip6tables
恢復則用:
systemctl unmask name.service


檢視服務狀態
systemctl status firewalld
開機自啟
systemctl enable firewalld
啟動服務
systemctl start firewalld


檢視預設zone
firewall-cmd --get-default-zone


預設zone設為dmz或預設的public
firewall-cmd --set-default-zone=dmz

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




在internal zone中增加源地址192.168.0.0/24的永久規則
firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24


在internal zone中增加協議mysql的永久規則
firewall-cmd --permanent –zone=internal --add-service=mysql


在internal zone中增加埠的永久規則
firewall-cmd --permanent –zone=internal --add-port=8080/tcp


載入新規則以生效
firewall-cmd --reload




-----------------------------------------------------------
其它規則
當基本firewalld語法規則不能滿足要求時,可以使用以下更復雜的規則
rich-rules 富規則,功能強,表達性語言


rich規則比基本的firewalld語法實現更強的功能,不僅實現允許/拒絕,還可以實現日誌syslog和auditd,也可以實現埠轉發,偽裝和限制速率


rich語法:
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
man 5 firewalld.richlanguage


規則實施順序:
該區域的埠轉發,偽裝規則
該區域的日誌規則
該區域的允許規則
該區域的拒絕規則
每個匹配的規則生效,所有規則都不匹配,該區域預設規則生效




rich規則選項


將<RULE>新增到指定區域,或者如果未指定--zone=區域,則使用預設區域。
--add-rich-rule='<RULE>'


刪除RULE 如果沒有指定區域,請將<RULE>移至指定區域或預設區域。
--remove-rich-rule='<RULE>'


查詢是否已將<RULE>新增到指定區域,或者如果未指定區域,則查詢預設區域。 如果規則存在,則返回0,否則返回1。
--query-rich-rule='<RULE>'


輸出指定區域的所有豐富規則,如果沒有指定區域,則輸出預設區域。
--list-rich-rules


拒絕從192.168.0.11的所有流量,當address 選項使用source 或 destination時,必須用family= ipv4 |ipv6.
firewall-cmd --permanent --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'


限制每分鐘只有兩個連線到ftp服務
firewall-cmd --permanent --add-rich-rule='rule service name=ftp limit value=2/m accept'
刪除則
firewall-cmd --permanent --remove-rich-rule='rule service name=ftp limit value=2/m accept'


拋棄esp( IPsec 體系中的一種主要協議)協議的所有資料包
firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'


接受所有192.168.1.0/24子網埠範置5900-5905的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'


rich日誌規則


log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]
<LOGLEVEL> 可以是emerg,alert, crit, error, warning, notice, info, debug.
<DURATION> s:秒, m:分鐘, h:小時, d:天
audit [limit value="<RATE/DURATION>"]


work這個zone裡新增一個規則,接受ssh服務的新連線,記錄日誌到syslog的notice級別,且日誌檢視時附有ssh字首的,每分鐘最多三條資訊
firewall-cmd --permanent --zone=work --add-rich-rule='rule service name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept'


從2001:db8::/64子網的DNS連線在5分鐘內被拒絕,並記錄到日誌到audit,每小時最大記錄一條資訊
firewall-cmd  --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300


來自172.25.1.10訪問本機的http時允許,並記錄日誌,級別為notice且記錄日誌的格式前加NEW HTTP字首 ,每秒鐘記錄三條資訊
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.1.10/32 service name="http" log level=notice prefix="NEW HTTP " limit value="3/s" accept'










偽裝和埠轉發


偽裝
firewall-cmd --permanent --zone=<ZONE> --add-masquerade   預設的zone都是public
firewall-cmd --query-masquerade 檢查是否允許偽裝
firewall-cmd --add-masquerade 允許防火牆偽裝IP ,針對的是0.0.0.0/0所有IP段的偽裝
firewall-cmd --remove-masquerade 禁止防火牆偽裝IP
示例:
允許內網的192.168.0.0/24 通過出口偽裝上網
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'




埠轉發


埠轉發:將發往本機的特定埠的流量轉發到本機或不同機器的另一個埠。通常要配合地址偽裝才能實現
firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>]
說明:toport= 和toaddr= 至少要指定一個


示例:
轉發傳入的連線8888/TCP,到防火牆的80/TCP到public zone 的192.168.11.254的http服務
firewall-cmd --add-masquerade 先啟用偽裝功能
firewall-cmd --permanent --zone=public --add-forward-port=port=8888:proto=tcp:toport=80:toaddr=192.168.11.254
firewall-cmd --reload


示例:
轉發從192.168.0.0/24來的,發往80/TCP的流量到防火牆的埠8080/TCP
firewall-cmd --add-masquerade 先啟用偽裝功能
firewall-cmd --permanent --zone=work --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 forward-port port=80 protocol=tcp to-port=8080'
firewall-cmd --reload




示例:
轉發從172.25.1.10來的訪問我本機的443埠的流量到防火牆後轉發成本地的22埠
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.25.1.10/32 forward-port port=443 protocol=tcp to-port=22'
firewall-cmd --reload
ssh -p 443 serverX.example.com

相關推薦

關於iptablesfirewalld詳細總結配置彙總

iptables由四個表和五個鏈以及一些規則組成四個表table:filter、nat、mangle、rawfilter表:過濾規則表,根據預定義的規則過濾符合條件的資料包nat表:network address translation 地址轉換規則表mangle:修改資料標

iptables firewalld 防火墻

轉發 兩個 ice 規則 以及 正常 自身 正在 基本 保障數據的安全性是繼保障數據的可用性之後最為重要的一項工作。防火墻作為公網與內網之間的保護屏障,在保障數據的安全性方面起著至關重要的作用。 1.防火墻管理工具 相較於企業內網,外部的公網環境更加惡劣,罪惡叢生。在

紅帽7 IptablesFirewalld防火墻

結束 框架 acc left 圖片 定義 網絡連接 0ms input 1、防火墻管理工具 防火墻作為公網與內網之間的保護屏障,在保障數據的安全性方面起著至關重要的作用。相較於企業內網,外部的公網環境更加惡劣,罪惡叢生。在公網與企業內網之間充當保護屏障的防火墻雖然有軟件或硬

linux系統中的防火牆(iptablesfirewalld)——iptables

iptables 關閉firewalld開啟iptables 相關概念 IPTABLES 是與最新的 3.5 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Lin

linux系統中的防火牆(iptablesfirewalld)——firewalld

防火牆 防火牆是整個資料包進入主機前的第一道關卡。防火牆主要通過Netfilter與TCPwrappers兩個機制來管理的。 1)Netfilter:資料包過濾機制 2)TCP Wrappers:程式管理機制 關於資料包過濾機制有兩個軟體:firewalld與iptables cento

9.IptablesFirewalld防火牆

  第8章 Iptables與Firewalld防火牆 章節簡述: 保障資料的安全性是繼保障資料的可用性之後最為重要的一項工作。防火牆作為公網與內網之間

關於C++中overrideoverload的總結疑問

 C++是一門magic的語言,很多機制複雜得讓人頭疼,但是這種迷宮競走的狀態讓人精力十足,我發誓了,不搞明白不罷休,同時也希望得到高手們的指點和幫助~ override   函式名和引數型別以及返回型別必須相同,即簽名都是一致的——或者叫相貌和衣服都是一樣的,一般用在繼承

Linux(Ubuntu)安裝完美解除安裝Apache詳細教程配置多域名、埠對映

Linux(Ubuntu)安裝,解除安裝Apache詳細教程 第一種方法–軟體包安裝(簡單便捷) sudo apt-get update sudo apt-get install apache2 這樣安裝的話: apache2的檔案: /e

iptablesfirewalld兩種方式防火牆切換

用iptables開啟防火牆報錯: Failed to start  IPv4 firewall with iptables.     錯誤原因:因為centos7.0預設不是使用iptables方式管理,而是firewalld方式。CentOS6.0防火牆用ipt

CloudStack+XenServer詳細部署方案 CloudStack管理節點的安裝配置

cloudstack+xenserver詳細部署方案 cloudstack管理節點的安裝和配置CloudStack+XenServer詳細部署方案 CloudStack管理節點的安裝和配置本文將根據設計文檔, 安裝和配置CloudStack管理節點。本文只對配置流程和結果進行舉例說明, 具體 細節和配置操作請

【Java】日誌知識總結經常使用組合配置(commons-logging,log4j,slf4j,logback)

ng- binder mono leading black auto erb param 1.2 Log4j Apache的一個開放源碼項目,通過使用Log4j,我們能夠控制日誌信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務 器

Linux添加防火墻、iptables的安裝配置(親測)

accept verbose conf inpu wall ron -h 數據流 ack iptables基礎 規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息

2017年總結2018年目標計劃

有意 英語學習 努力 銀行 簡潔 面試 相關 可能 方向   前段時間看到版內經常會有2017年的總結,但我總覺得年還沒過,2017就不算真正的過完,上周五公司開了部門年會,這周五公司要開公司年會,年會完了再過一周多就準備回家了,一年才算快到頭了。今年對於我而言是一個多變的

security 02: 加密解密 、 掃描抓包 、 總結答疑 、 SELinux安全防護

一段 數字簽名 def 接口 數據流 5.1 調用 message systemctl day01一、selinux安全防護二、數據 加密 解密三、抓包與掃描++++++++++++++++++++++++++++++一、selinux安全防護1.1 selinux 介紹1

security 01: Linux基本防護 、 用戶切換提權 、 SSH訪問控制 、 總結答疑

add orm ati sgi star 數字簽名 安全 roo 輸入 LINUX安全與監控 6天LINUX安全 3天LINUX監控 3天+++++++++++++++++++++++++什麽安全? 保護維護的服務器不受到攻擊和破壞 攻擊和破壞手段? 技術性非技術

關於postget的詳細總結

而是 然而 傳遞 長度 史記 是我 com post 真的   近日,對爬蟲的使用增多,總結在日常使用中的一些問題,其中get與post的問題是最需要重點總結的。   首先,在以往的使用經驗中,get與post是最常用的兩種請求方式,最直觀的區別就是get會將參數放在url

安裝hadoop配置hadoop,啟動namenode設置免密登錄的詳細解析!

啟動namenode和hadoop的配置首先安裝hadoop要安裝好java的開發環境,配置好jdk其實創建一個hadoop的用戶cd到這個用戶的目錄下創建一個apps的目錄。以後所有的東西都解壓進入apps解壓後的目錄中的文件如下這裏lib是本地的庫!bin是自己的操作命令,sbin是啟動命令!etc是配置

Nginx原理配置總結

some serve delay 找到 部署 正則表達式 emp cnblogs process 一:前言   Nginx是一款優秀的HTTP服務器和反向代理服務器,除卻網上說的效率高之類的優點,個人的切身體會是Nginx配置確實簡單而且還好理解,和redis差不多,比r

MyISAMInnoDB兩者之間區別選擇,詳細總結,性能對比

執行過程 val 性能問題 全部 marked rain row 演示 也會 1、MyISAM:默認表類型,它是基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法

軟件包管理、配置網絡、文本/文件查找、總結答疑

成功 配置ip地址 code ifconfig etc lease cli 取反 mariadb #################################################################軟件包管理 1.關閉虛擬機,圖形添加光驅設備