iptables防火墻(上)

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.防火墻執行過程

  1. 防火墻是層層過濾的,實際是按照配置規則的順序從上到下從前到后進行過濾的。
  2. 如果匹配上規則,即明確表示是阻止(DROP)還是通過(ACCEPT)數據包就不再向下匹配新的規則。
  3. 如果規則中沒有明確表明是阻止還是通過的,也就是沒有匹配規則,向下進行匹配,直到匹配默認規則得到明確的阻止還是通過。
  4. 防火墻的默認規則是所有規則執行完才執行的。
image

5.四表五鏈

5.1 四表及作用

功能
Filter 過濾,默認的表,防火墻功能
NAT 實現NAT轉化:1.共享上網 2.端口轉發
mangle 查詢幫助man iptables 了解即可
raw 查詢幫助man iptables 了解即可

5.2 四表中的5鏈

image
image
五鏈:
PREROUTING
FORWARD
INPUT
OUPUT
POSTROUTING

image
image

5.3 filter表和nat表

image

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

重新連接 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 ~]# 

配置防火墻規則注意事項:
  1. 去機房重啟系統或者登陸服務器刪除剛才的禁止規則。

  2. 讓機房人員重啟服務器或者讓機房人員拿用戶密碼登錄進去

  3. 通過服務器的遠程管理卡管理(推薦)

  4. 先寫一個定時任務,每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      

image

去另一臺服務器上測試一下是否成功:

[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

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服務器上
愛你哦
晚上好
你也好

iptables防火墻必會面試題:https://www.cnblogs.com/wajika/p/6382853.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容