Linux—系統網絡防火牆(三)---iptables


一、安裝iptables服務

1、查看系統是否安裝了iptables防火牆

[root@localhost ~]# iptables -V

2、安裝 iptables 防火牆

3、查看防火牆規則列表

[root@localhost ~]# iptables --list
[root@localhost ~]# iptables --list-rules

二、開啟、關閉、重啟 iptables 服務

1、通過 service 操作防火牆

[root@localhost ~]# service iptables stop         # 關閉防火牆(清空規則)
[root@localhost ~]# service iptables start        # 啟動防火牆(讀取配置文件里的規則)
[root@localhost ~]# service iptables restart      # 重啟防火牆(清空規則讀取配置文件里規則)
[root@localhost ~]# service iptables save         # 保存防火牆(規則保存到配置文件中)
[root@localhost ~]# service iptables status       # 查看防火牆啟動狀態(查看當前使用的規則)
[root@localhost ~]# service iptables reload       # 重新加載相關配置,效果和restart一樣,很多新的系統中一般不用了。

三、規則設定

1、開放端口(這種情況下所有ip均能訪問3120端口,即對外暴露3120端口了)

[root@localhost ~] iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 開啟防火牆 3120 端口,方式一
[root@localhost ~] iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 開啟防火牆 3120 端口,方式二

2、關閉端口

[root@localhost ~] iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 刪除防火牆 3120 端口。方式一
[root@localhost ~] iptables -nv --line-number

3、屏蔽指定IP:拒絕指定IP,所有端口都不能訪問

[root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j DROP      # 添加屏蔽IP,方式一
[root@localhost ~]# iptables -A INPUT -s 1.1.1.1 -j DROP      # 添加屏蔽IP,方式二
[root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j DROP      # 刪除屏蔽IP

4、放行指定IP:允許指定IP,所有端口都可以訪問

[root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j ACCEPT      # 添加放行IP,方式一
[root@localhost ~]# iptables -A INPUT -s 1.1.1.1 -j ACCEPT      # 添加放行IP,方式二
[root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j ACCEPT      # 刪除放行IP

5、允許指定 IP 訪問指定端口

iptables -I INPUT -s 1.1.1.1 -p tcp --dport 3120 -j ACCEPT
iptables -D INPUT -s 1.1.1.1 -p tcp --dport 3120 -j ACCEPT

6、拒絕指定 IP 訪問指定端口

iptables -I INPUT -s 1.1.1.1 -p tcp --dport 3120 -j DROP
iptables -D INPUT -s 1.1.1.1 -p tcp --dport 3120 -j DROP

7、重啟后生效

[root@localhost ~]# chkconfig iptables off   # 永久關閉防火牆
[root@localhost ~]# chkconfig iptables on    # 永久關閉后重啟

8、ping設置

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT    # 允許PING設置 
[root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP          # 禁止PING設置

四、端口轉發

1、開啟系統的轉發功能,開啟內核 ip_forward 轉發。sysctl配置ipv4轉發

[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1          # 方式一:臨時生效

[root@localhost ~]# vim /etc/sysctl.conf                     # 方式二:永久生效,更改net.ipv4.ip_forward的值為1:net.ipv4.ip_forward = 1。默認值為0
[root@localhost ~]# sysctl -p                                # 使用命令讓配置馬上生效
[root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p /etc/sysctl.conf

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward   # 方式三

2、將本機的端口轉發到本機端口,這種情況不需要第一步

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 88 -j REDIRECT --to-port 3120      # 添加端口轉發
[root@localhost ~]# iptables -t nat -D PREROUTING -p tcp --dport 88 -j REDIRECT --to-port 3120      # 刪除端口轉發

3、將本機的端口轉發到其他機器,這種情況就需要第一步

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport This_Server_Port -j DNAT --to-destination Remote_Server_IP:Remote_Server_Port
[root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -d Remote_Server_IP --dport Remote_Server_Port -j SNAT --to-source This_Server_IP

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 8006 -j DNAT --to-destination 32.23.56.69:3120           # 第一步:訪問8006端口的數據包轉發到32.23.56.69上的3120端口
[root@localhost ~]# iptables -t nat -A POSTROUTING -j MASQUERADE                                                           # 第二步:任選其一,一般選這個就行
[root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -d 32.23.56.69 --dport 3120 -j SNAT --to-source 172.16.16.10    # 第二步:任選其一

4、如果上面操作完還不行的話,就放行轉發命令。這一步一般不需要。

[root@localhost ~]# iptables -I FORWARD -i eth0 -j ACCEPT                     # 放行Forward的數據包,其中eth0改為實際使用網卡(一般是eth0)
[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE      # 開啟網卡混雜模式(允許任意流向的數據包)

[root@localhost ~]# iptables -D FORWARD -i eth0 -j ACCEPT                     # 刪除第一條
[root@localhost ~]# iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE      # 刪除第二條

5、抓包測試

# 方式一
[root@localhost ~]# tcpdump -S -s0 -nn -i any port 8006               # 本地端抓包,可以不用管這條命令
[root@localhost ~]# tcpdump -S -nn -i any port 8006 or port 3120      # 在中間服務器上執行這條命令
[root@localhost ~]# tcpdump -S -nn -i any port 3120                   # 在目的服務器上執行這條命令

# 方式二:-i 選項指定網卡,-w 選項保存結果到文件當中。
[root@localhost ~]# tcpdump -i eth0 port 3120 or 8006 -w result.cap 

6、名詞解釋

  • DNAT是destination networkaddress translation的縮寫,即目標網絡地址轉換。
  • SNAT是source networkaddress translation的縮寫,即源地址目標轉換。
  • MASQUERADE,地址偽裝,算是snat中的一種特例,可以實現自動化的snat。

五、配置文件:/etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# 開啟防火牆端口80、443、3306
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT

# 允許PING設置  
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

六、鏈的基本操作

# 清除預設表filter中所有規則鏈中的規則。
[root@localhost ~]# iptables -F
# 清除預設表filter中使用者自定鏈中的規則。
[root@localhost ~]# iptables -X
[root@localhost ~]# iptables -Z
 
# 設置鏈的默認策略。一般有兩種方法。
# 首先允許所有的包,然后再禁止有危險的包通過放火牆。
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -P OUTPUT ACCEPT
[root@localhost ~]# iptables -P FORWARD ACCEPT
# 首先禁止所有的包,然后根據需要的服務允許特定的包通過防火牆。
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -P OUTPUT DROP
[root@localhost ~]# iptables -P FORWARD DROP
 
# 列出表/鏈中的所有規則。默認只列出filter表。
[root@localhost ~]# iptables -L
https://www.cnblogs.com/blogforly/p/5997287.html
https://www.cnblogs.com/kevingrace/p/6265113.html

七、通過 ipset 來封禁IP

[root@localhost ~]# ipset list
[root@localhost ~]# ipset create allset hash:net 

[root@localhost ~]# ipset add allset 145.201.56.109
[root@localhost ~]# ipset del allset 145.201.56.109

[root@localhost ~]# iptables -I INPUT -m set --match-set allset src -p tcp -j DROP
[root@localhost ~]# iptables -D INPUT -m set --match-set allset src -p tcp -j DROP

https://www.cnblogs.com/zhink/articles/9171834.html:跟ufw使用ipset差不多

https://www.moerats.com/archives/684/

https://blog.csdn.net/wangshui898/article/details/90513792

 

https://www.centos.bz/2017/07/iptables-port-redirect/

https://blog.csdn.net/e_wsq/article/details/79933232

https://www.cnblogs.com/carry00/p/10237723.html

https://www.cnblogs.com/wujizhang/p/11721043.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM