【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
云防火墙,500元 1000GB
简介: 【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)

9、防火墙规则的保存与恢复

iptables-save 保存,默认输出到屏幕

iptables-restore 恢复,加上文件

写入/etc/sysconfig/iptables

1. [root@Ansible ~]# iptables-save   >/etc/sysconfig/iptables
2. [root@Ansible ~]#  cat /etc/sysconfig/iptables
3. # Generated by iptables-save v1.4.21 on Sun May  7 16:11:34 2023
4. *nat
5. :PREROUTING ACCEPT [306:36403]
6. :INPUT ACCEPT [182:29467]
7. :OUTPUT ACCEPT [145:11135]
8. :POSTROUTING ACCEPT [145:11135]
9. COMMIT
10. # Completed on Sun May  7 16:11:34 2023
11. # Generated by iptables-save v1.4.21 on Sun May  7 16:11:34 2023
12. *filter
13. :INPUT DROP [17:1428]
14. :FORWARD ACCEPT [0:0]
15. :OUTPUT ACCEPT [49:5580]
16. -A INPUT -p icmp -m limit --limit 10/min -j ACCEPT
17. -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
18. COMMIT
19. # Completed on Sun May  7 16:11:34 2023
20. [root@Ansible ~]# iptables -nL
21. Chain INPUT (policy DROP)
22. target     prot opt source               destination
23. ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5
24. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
25. 
26. Chain FORWARD (policy ACCEPT)
27. target     prot opt source               destination
28. 
29. Chain OUTPUT (policy ACCEPT)
30. target     prot opt source               destination
31. [root@Ansible ~]# iptables -D INPUT 1
32. [root@Ansible ~]# iptables -nL
33. Chain INPUT (policy DROP)
34. target     prot opt source               destination
35. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
36. 
37. Chain FORWARD (policy ACCEPT)
38. target     prot opt source               destination
39. 
40. Chain OUTPUT (policy ACCEPT)
41. target     prot opt source               destination
42. [root@Ansible ~]# iptables-restore < /etc/sysconfig/iptables
43. [root@Ansible ~]# iptables -nL
44. Chain INPUT (policy DROP)
45. target     prot opt source               destination
46. ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5
47. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
48. 
49. Chain FORWARD (policy ACCEPT)
50. target     prot opt source               destination
51. 
52. Chain OUTPUT (policy ACCEPT)
53. target     prot opt source               destination
54. 
55. 此外,systemctl restart iptables 会读取/etc/sysconfig/iptables内容

10、filter表简单总结

1、封ip,端口,网段

2、禁止ping

3、限制速度和并发

4、iptables filter表功能可以在云服务器使用

企业中用法

iptables配置方式:1、逛公园模式,默认规则是ACCEPT;2、看电影模式,默认规则是DROP

默认是拒绝

1、ssh可以连接

1. [root@Ansible ~]# iptables -F
2. [root@Ansible ~]# iptables -X
3. [root@Ansible ~]# iptables -Z
4. [root@Ansible ~]# iptables -nL
5. Chain INPUT (policy ACCEPT)
6. target     prot opt source               destination
7. 
8. Chain FORWARD (policy ACCEPT)
9. target     prot opt source               destination
10. 
11. Chain OUTPUT (policy ACCEPT)
12. target     prot opt source               destination
13. [root@Ansible ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
14. [root@Ansible ~]# iptables -nL
15. Chain INPUT (policy ACCEPT)
16. target     prot opt source               destination
17. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
18. 
19. Chain FORWARD (policy ACCEPT)
20. target     prot opt source               destination
21. 
22. Chain OUTPUT (policy ACCEPT)
23. target     prot opt source               destination
24. 
25. 
26. 
27. [root@Web01 ~]# ssh 10.0.0.61 hostname
28. root@10.0.0.61's password: 
29. Ansible
30.

2、设置允许本机lo通讯规则

允许本机回环lo(本地操作)接口数据流量流出和流入

1. [root@Ansible ~]# iptables -A INPUT -i lo -j ACCEPT
2. [root@Ansible ~]# iptables -A OUTPUT -o lo -j ACCEPT

3、配置默认规则及放行80,443端口

1. [root@Ansible ~]# iptables -P INPUT DROP 
2. [root@Ansible ~]# iptables -P FORWARD DROP 
3. [root@Ansible ~]# iptables -P OUTPUT ACCEPT
4. [root@Ansible ~]# 
5. [root@Ansible ~]# iptables -A INPUT  -m multiport -p tcp  --dport 443,80   -j ACCEPT
6. [root@Ansible ~]# iptables -nL 
7. Chain INPUT (policy DROP)
8. target     prot opt source               destination
9. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
10. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
11. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
12. 
13. Chain FORWARD (policy DROP)
14. target     prot opt source               destination
15. 
16. Chain OUTPUT (policy ACCEPT)
17. target     prot opt source               destination
18. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
19. [root@Ansible ~]# iptables -A INPUT  -s 10.0.0.0/24  -j ACCEPT
20. [root@Ansible ~]# iptables -A INPUT  -s 172.16.1.0/24  -j ACCEPT
21. #此处还可以添加 vpn网段 比如说 10.7.1.0/24
22. 
23. [root@Ansible ~]# iptables -nL
24. Chain INPUT (policy DROP)
25. target     prot opt source               destination
26. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
27. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
28. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
29. ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0
30. ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0
31. 
32. Chain FORWARD (policy DROP)
33. target     prot opt source               destination
34. 
35. Chain OUTPUT (policy ACCEPT)
36. target     prot opt source               destination
37. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
38. [root@Ansible ~]# iptables-save 
39. # Generated by iptables-save v1.4.21 on Sun May  7 16:24:29 2023
40. *nat
41. :PREROUTING ACCEPT [9:711]
42. :INPUT ACCEPT [2:112]
43. :OUTPUT ACCEPT [3:312]
44. :POSTROUTING ACCEPT [3:312]
45. COMMIT
46. # Completed on Sun May  7 16:24:29 2023
47. # Generated by iptables-save v1.4.21 on Sun May  7 16:24:29 2023
48. *filter
49. :INPUT DROP [0:0]
50. :FORWARD DROP [0:0]
51. :OUTPUT ACCEPT [7:1480]
52. -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
53. -A INPUT -i lo -j ACCEPT
54. -A INPUT -p tcp -m multiport --dports 443,80 -j ACCEPT
55. -A INPUT -s 10.0.0.0/24 -j ACCEPT
56. -A INPUT -s 172.16.1.0/24 -j ACCEPT
57. -A OUTPUT -o lo -j ACCEPT
58. COMMIT
59. # Completed on Sun May  7 16:24:29 2023

NAT表

恢复链

1. [root@Ansible ~]# iptables -P INPUT ACCEPT
2. [root@Ansible ~]# iptables -P FORWARD ACCEPT
3. [root@Ansible ~]# iptables -nL
4. Chain INPUT (policy ACCEPT)
5. target     prot opt source               destination
6. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
7. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
8. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
9. ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0
10. ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0
11. 
12. Chain FORWARD (policy ACCEPT)
13. target     prot opt source               destination
14. 
15. Chain OUTPUT (policy ACCEPT)
16. target     prot opt source               destination
17. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
18. [root@Ansible ~]# iptables -F
19. [root@Ansible ~]# iptables -nL
20. Chain INPUT (policy ACCEPT)
21. target     prot opt source               destination
22. 
23. Chain FORWARD (policy ACCEPT)
24. target     prot opt source               destination
25. 
26. Chain OUTPUT (policy ACCEPT)
27. target     prot opt source               destination

1、实现共享上网

1、防火墙配置

1. [root@Ansible ~]#  iptables -t nat -A POSTROUTING  -s 172.16.1.0/24   -j SNAT  --to-source 10.0.0.61
2. [root@Ansible ~]# echo 'net.ipv4.ip_forward = 1'  >> /etc/sysctl.conf 
3. [root@Ansible ~]# sysctl -p
4. net.ipv4.icmp_echo_ignore_all = 0
5. net.ipv4.ip_forward = 1
6. 
7. 注意:公网IP不固定
8. iptables -t nat -A POSTROUTING  -s 172.16.1.0/24   -j  MASQUERADE

2、web配置

1. [root@Web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
2. TYPE=Ethernet
3. BOOTPROTO=none
4. NAME=eth0
5. DEVICE=eth0
6. ONBOOT=no            #修改网卡,禁止开机自启动
7. IPADDR=10.0.0.7
8. PREFIX=24
9. GATEWAY=10.0.0.2
10. DNS1=223.5.5.5
11. [root@Web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
12. TYPE=Ethernet
13. BOOTPROTO=none
14. NAME=eth0
15. DEVICE=eth0
16. ONBOOT=yes
17. IPADDR=10.0.0.7
18. PREFIX=24
19. GATEWAY=172.16.1.61
20. DNS1=1.2.4.8
21. [root@Web01 ~]# systemctl restart network
22. [root@Ansible ~]# ssh 172.16.1.7
23. Last login: Sun May  7 21:16:43 2023 from 10.0.0.1
24. [root@Web01 ~]# ip a
25. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
26.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
27.     inet 127.0.0.1/8 scope host lo
28. valid_lft forever preferred_lft forever
29.     inet6 ::1/128 scope host 
30. valid_lft forever preferred_lft forever
31. 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
32.     link/ether 00:0c:29:91:01:20 brd ff:ff:ff:ff:ff:ff
33. 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
34.     link/ether 00:0c:29:91:01:2a brd ff:ff:ff:ff:ff:ff
35.     inet 172.16.1.7/24 brd 172.16.1.255 scope global eth1
36. valid_lft forever preferred_lft forever
37.     inet6 fe80::20c:29ff:fe91:12a/64 scope link 
38. valid_lft forever preferred_lft forever

3、在web01测试结果

1. [root@Web01 ~]# ip r
2. default via 172.16.1.61 dev eth1
3. 169.254.0.0/16 dev eth1 scope link metric 1003
4. 172.16.1.0/24 dev eth1 proto kernel scope link src 172.16.1.7
5. [root@Web01 ~]# route -n
6. Kernel IP routing table
7. Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
8. 0.0.0.0         172.16.1.61     0.0.0.0         UG    0      0        0 eth1
9. 169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
10. 172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
11. [root@Web01 ~]# ping baidu.com
12. PING baidu.com (39.156.66.10) 56(84) bytes of data.
13. 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=127 time=10.3 ms
14. 64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=127 time=12.3 ms
15. ^C
16. --- baidu.com ping statistics ---
17. 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
18. rtt min/avg/max/mdev = 10.306/11.346/12.386/1.040 ms
19. [root@Web01 ~]# ping 1.2.4.8
20. PING 1.2.4.8 (1.2.4.8) 56(84) bytes of data.
21. 64 bytes from 1.2.4.8: icmp_seq=1 ttl=127 time=12.5 ms
22. 64 bytes from 1.2.4.8: icmp_seq=2 ttl=127 time=11.3 ms
23. ^C
24. --- 1.2.4.8 ping statistics ---
25. 2 packets transmitted, 2 received, 0% packet loss, time 1002ms
26. rtt min/avg/max/mdev = 11.337/11.945/12.554/0.618 ms

2、端口转发(端口映射)

1. [root@Ansible ~]# iptables -t nat -A PREROUTING    -d 10.0.0.61 -p tcp --dport 9000  -j DNAT --to-destination 172.16.1.7:22
2. [root@Ansible ~]# iptables -nL -t nat
3. Chain PREROUTING (policy ACCEPT)
4. target     prot opt source               destination
5. DNAT       tcp  --  0.0.0.0/0            10.0.0.61            tcp dpt:9000 to:172.16.1.7:22
6. 
7. Chain INPUT (policy ACCEPT)
8. target     prot opt source               destination
9. 
10. Chain OUTPUT (policy ACCEPT)
11. target     prot opt source               destination
12. 
13. Chain POSTROUTING (policy ACCEPT)
14. target     prot opt source               destination
15. SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.61

本地shell测试

1. c:\~]$ ssh root@10.0.0.61 9000
2. 
3. 
4. Connecting to 10.0.0.61:9000...
5. Connection established.
6. To escape to local shell, press Ctrl+Alt+].
7. 
8. Last login: Sun May  7 21:34:55 2023 from 10.0.0.61

3、IP映射

1. [root@Ansible ~]#  iptables -t nat -A PREROUTING  -d 10.0.0.62  -j DNAT  --to-destination 172.16.1.7
2. [root@Ansible ~]# iptables -nL -t nat 
3. Chain PREROUTING (policy ACCEPT)
4. target     prot opt source               destination
5. DNAT       tcp  --  0.0.0.0/0            10.0.0.61            tcp dpt:9000 to:172.16.1.7:22
6. DNAT       all  --  0.0.0.0/0            10.0.0.62            to:172.16.1.7
7. 
8. Chain INPUT (policy ACCEPT)
9. target     prot opt source               destination
10. 
11. Chain OUTPUT (policy ACCEPT)
12. target     prot opt source               destination
13. 
14. Chain POSTROUTING (policy ACCEPT)
15. target     prot opt source               destination
16. SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.61

4、NAT表简单总结

1、可以实现共享上网

2、可以实现端口转发

3、NAT功能在云服务器无法使用,但有替代品叫NAT网关

iptables简单练习

1、查看iptables当前所有规则的命令

1. iptables-save 
2. 
3. iptables -nL
4. 
5. iptables -nL -t nat

2、禁止来自10.0.0.188IP地址访问80端口的请求

iptables -I   INPUT   -s 10.0.0.188 -p tcp   --dport 80      -j  DROP

3、在命令行执行的iptables规则永久生效

iptables-save > /etc/sysconfig/iptables

4、实现把访问10.0.0.3:80请求转到172.16.1.17:80

iptables -t nat  -A PREROUTING  -d 10.0.0.3  -p tcp --dport 80    -j   DNAT  --to-destination  172.16.1.17:80

5、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网

1. iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  --to-source   123.32.54.26
2. 
3. iptables   -t nat  -A POSTROUTING    -s 172.16.1.0/24    -j  SNAT  MASQUERADE

6、iptables实现防止syn ddos和ping攻击

1. -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
2. -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
3. -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
4. 说明:第一行:每秒中最多允许5个新连接。第二行:防止各种端口扫描。第三行:Ping洪水攻击(Ping of Death),可以根据需要调整或关闭

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
3月前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
219 3
|
4月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
105 6
|
5月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
112 6
|
5月前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
94 1
|
7月前
|
运维 网络协议 网络安全
干货 | USG配置端口映射图解&amp;映射不通的排查
干货 | USG配置端口映射图解&amp;映射不通的排查
268 9
|
7月前
|
网络协议 Docker 容器
Docker——如何修改运行中容器的映射端口
Docker——如何修改运行中容器的映射端口
293 0
|
9月前
|
弹性计算 人工智能 供应链
云服务器 ECS产品使用问题之端口已加入安全组,但是端口不通,同时服务器已关闭防火墙,是什么导致的
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
9月前
|
网络协议 Java Linux
Linux常用操作命令、端口、防火墙、磁盘与内存
Linux常用操作命令、端口、防火墙、磁盘与内存
126 0
|
10月前
|
运维 程序员 Linux
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
|
3月前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要