day55-iptables防火墻.png
架構展望
https://www.processon.com/view/link/5d19b17be4b0beaf6b9feff8
iptables防火墻必會面試題:https://www.cnblogs.com/wajika/p/6382853.html
非常詳細的iptable原理
http://www.zsythink.net/archives/1199/
1.常見防火墻選用
硬件防火墻
開源軟件:iptables(默認規則改為INPUT DROP)
云服務器:安全組(阿里云 白名單,默認是拒絕的)
2.iptables使用 執行過程
3.iptables 4表5鏈
4.準備iptables環境
5.iptables功能之一防火墻
封IP 封端口
準許某個ip訪問 網段訪問
6.iptables功能之內網服務器上外網(共享上網)
7.iptables功能之 端口轉發
2.常見防火墻選用
- 公司網站入口使用的硬件 防火墻 、三次路由帶有防火墻功能
- itpables訪問量小 C5 C6自帶,CentOS 7為Firewalld
SELinux
3.相關名詞與單詞
名詞 | 含義 | 對比 |
---|---|---|
容器 | 存放內容/存放東西 | |
Netfilter/iptables | 是表的容器 | 國家 |
表(table) | 表是用來存放鏈的容器 | 省 |
鏈(chain) | 鏈 存放規則的容器 | 市 |
規則(policy) | 準許/拒絕訪問 | 區/縣 |
4.防火墻執行過程
- 防火墻是層層過濾的,實際是按照配置規則的順序從上到下,從前到后進行過濾的。
- 如果匹配上規則,即明確表示是阻止(DROP)還是通過(ACCEPT)數據包就不再向下匹配新的規則。
- 如果規則中沒有明確表明是阻止還是通過的,也就是沒有匹配規則,向下進行匹配,直到匹配默認規則得到明確的阻止還是通過。
- 防火墻的默認規則是所有規則執行完才執行的。
5.四表五鏈
5.1 四表及作用
表 | 功能 |
---|---|
Filter | 過濾,默認的表,防火墻功能 |
NAT | 實現NAT轉化:1.共享上網 2.端口轉發 |
mangle | 查詢幫助man iptables 了解即可 |
raw | 查詢幫助man iptables 了解即可 |
5.2 四表中的5鏈
五鏈:
PREROUTING
FORWARD
INPUT
OUPUT
POSTROUTING
5.3 filter表和nat表
image.png
5.3.1 filter表
filter表 | 企業工作場景:主機防火墻 |
---|---|
INPUT | 就是過濾進入主機的數據包 |
FORWARD | 負責轉發流經主機的數據包 |
OUTPUT | 就是處理從主機發出去的數據包 |
5.3.2 nat表
nat表 | |
---|---|
PREROUTING | 處理用戶請求中的目的地址 目的端口 端口轉發 ip映射 |
POSTROUTING | 處理離開服務器的請求 源端口 源ip :共享上網 |
OUTPUT | 和主機放出去的數據包有關,改變主機發出數據包的目的地址 |
補充:
filter表:
??INPUT 作用:用于發送到本地套接字的數據包。
?FORWARD 作用:對于正在通過該框路由的數據包
?OUTPUT 作用:用于本地生成的數據包。
nat表:
?PREROUTING 作用:因為他們一進來就改變了包
?OUTPUT 作用:用于在路由之前更改本地劃分的數據包。
?POSTROUTING 作用:改變包,因為它們即將離開
6.防火墻之filter表
6.1環境準備
m01 iptables iptables-services
db01 iptables iptables-services
[root@m01 ~]# rpm -qa iptables-services
iptables-1.4.21-28.el7.x86_64
[root@m01 ~]# rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables #iptables 配置文件
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service #iptables服務管理配置
啟動防火墻
[root@m01 ~]# systemctl stop firewalld #CentOS7關閉firewalld [root@m01 ~]# systemctl restart iptables [root@m01 ~]# systemctl enable iptables
手動加載內核模塊
[root@m01 ~]# modprobe ip_tables
[root@m01 ~]# modprobe iptable_filter
[root@m01 ~]# modprobe iptable_nat
[root@m01 ~]# modprobe ip_conntrack
[root@m01 ~]# modprobe ip_conntrack_ftp
[root@m01 ~]# modprobe ip_nat_ftp
[root@m01 ~]# modprobe ipt_state
檢查防火墻內核模塊是否加載成功:
[root@m01 ~]# lsmod |egrep 'nat|ipt|filter' nf_nat_ftp 12770 0 nf_conntrack_ftp 18638 1 nf_nat_ftp ipt_REJECT 12541 2 nf_reject_ipv4 13373 1 ipt_REJECT ipt_MASQUERADE 12678 1 nf_nat_masquerade_ipv4 13412 1 ipt_MASQUERADE iptable_filter 12810 1 xt_nat 12681 2 iptable_nat 12875 1 nf_nat_ipv4 14115 1 iptable_nat nf_nat 26787 4 nf_nat_ftp,nf_nat_ipv4,xt_nat,nf_nat_masquerade_ipv4 nf_conntrack 133095 8 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4 ip_tables 27126 2 iptable_filter,iptable_nat libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
6.2 配置規則-禁止訪問22端口
[root@m01 ~]# iptables -F #清除規則 [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z [root@m01 ~]# iptables -nL #查看規則 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 [root@m01 ~]# #添加一條規則,禁止22端口訪問 [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP [root@m01 ~]# Type `help' to learn how to use Xshell prompt. [d:\~]$ #斷開了~跑下機房
刪除規則,重新連接m01
[root@m01 ~]# iptables -nL --line-number #查看防火墻規則 [root@m01 ~]# iptables -t filter -D INPUT 1 #刪除第1條規則 [root@m01 ~]# iptables -nL --line-number #再次查看
image.png
重新連接 22端口就可以用了
Type `help' to learn how to use Xshell prompt.
[d:\~]$
Connecting to 10.0.0.61:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Tue Jul 2 17:04:55 2019
[root@m01 ~]#
配置防火墻規則注意事項:
去機房重啟系統或者登陸服務器刪除剛才的禁止規則。
讓機房人員重啟服務器或者讓機房人員拿用戶密碼登錄進去
通過服務器的遠程管理卡管理(推薦)
先寫一個定時任務,每5分鐘就停止防火墻**5. 測試環境測試好,寫成腳本,批量執行
6.3 filter表其他規則配置
6.3.1 只讓10.0.0.0/24網段進行訪問連接
只要是10.0.0.0/24 局域網的用戶 訪問m01 都ACCEPT
此例子主要限制:網段或ip地址
[root@m01 ~]# iptables -A INPUT -p tcp ! -s 10.0.0.0/24 -j DROP #"!" 嘆號表示取反
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
去另一臺服務器上測試一下是否成功:
[root@db01 ~]# ssh 10.0.0.61 #連接10.0.0.61,可以連接 root@10.0.0.61's password: Last login: Tue Jul 2 17:41:01 2019 from 10.0.0.51 [root@m01 ~]# logout #退出 Connection to 10.0.0.61 closed. [root@db01 ~]# ssh 172.16.1.61 #連接172.16.1.61,不可以連接 ....等到死
image.png
6.3.2準許或禁止端口
多個端口:表示范圍 1-1024范圍
[root@m01 ~]# iptables -I INPUT -p tcp ! --dport 1:1024 -j DROP
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:!1:1024
2 DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
多個端口 不連續 80,443,52113,22
[root@m01 ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443,22 -j DROP
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports !80,443,22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
6.4 iptables命令及參數
iptables | |
---|---|
-t | 指定表 filter(默認) nat |
-A | append 把規則追加到末尾 |
-I (大寫字母i ) | insert 把規則插入到規則的第1條 (添加拒絕類規則的時候) |
-p | protocal 指定協議:tcp /udp/icmp |
--dport | destination port 目標端口 |
--sport | source port 源端口 |
-d | dest ip address 目標ip地址 |
-s | source ip address 源ip地址 |
-j | jump 方法 DROP (拒絕)、 ACCEPT(準許) 、REJECT(拒絕) |
iptables查看 刪除 | ||
---|---|---|
-F | 清除鏈中所有規則 | |
-X | 清空自定義鏈的規則 | |
-Z | 清空計數器 | |
-n | 不要把端口解析服務名字 | |
-L | 顯示表中的規則 | |
--line-number | 給每個鏈中的規則加上行號 | |
-D | 刪除規則 根據規則的號碼進行刪除 |
7. nc命令
nc用法:
nc -l 指定監聽端口
nc/telnet 連接
[root@m01 ~]# nc -l 888 #m01服務器上
愛你哦
晚上好
你也好
[root@db01 ~]# nc 10.0.0.61 888 #db01服務器上
愛你哦
晚上好
你也好