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

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介: 【运维知识进阶篇】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天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
13 2
|
2月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
223 73
|
20天前
|
安全 Linux 网络安全
centos7中firewall防火墙的常用命令总结
以上命令集覆盖了 `firewalld`的基本操作,是维护CentOS 7系统安全不可或缺的工具。对于更高级的配置需求或遇到特定问题
18 3
|
1月前
|
开发框架 缓存 Ubuntu
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
36 2
|
1月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
|
3月前
|
Linux 网络安全
linux关闭方防火墙的命令
linux关闭方防火墙的命令
77 2
|
3月前
|
网络协议 Linux 网络安全
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
|
3月前
|
安全 网络安全 数据安全/隐私保护
手把手教你用eNSP模拟器配置防火墙源NAT
手把手教你用eNSP模拟器配置防火墙源NAT
351 4
|
3月前
|
网络协议 Linux 应用服务中间件
如何使用Iptables在Linux网关上转发端口
如何使用Iptables在Linux网关上转发端口
106 5
|
3月前
|
网络协议 Ubuntu Linux
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
在Linux中,如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。