目录
[1. 什么是iptables?](#1. 什么是iptables?)
[2. iptables的作用是什么?](#2. iptables的作用是什么?)
[3. iptables和firewalld有什么区别?](#3. iptables和firewalld有什么区别?)
[4. 如何查看系统中已定义的iptables规则?](#4. 如何查看系统中已定义的iptables规则?)
[5. 如何添加一个新的iptables规则?](#5. 如何添加一个新的iptables规则?)
[6. 如何删除一个已定义的iptables规则?](#6. 如何删除一个已定义的iptables规则?)
[7. 如何保存和恢复iptables规则?](#7. 如何保存和恢复iptables规则?)
[8. 如何允许某个IP地址通过iptables访问本地的特定端口?](#8. 如何允许某个IP地址通过iptables访问本地的特定端口?)
[9. 如何拒绝某个IP地址通过iptables访问本地的特定端口?](#9. 如何拒绝某个IP地址通过iptables访问本地的特定端口?)
[10. 如何允许某个IP地址通过iptables访问本地的所有端口?](#10. 如何允许某个IP地址通过iptables访问本地的所有端口?)
[11. 如何阻止所有除特定IP地址之外的主机通过iptables访问本地的特定端口?](#11. 如何阻止所有除特定IP地址之外的主机通过iptables访问本地的特定端口?)
[12. 如何允许某个IP地址通过iptables访问外部的特定端口?](#12. 如何允许某个IP地址通过iptables访问外部的特定端口?)
[13. 如何设置iptables规则使指定端口只可接受来自特定IP地址的访问?](#13. 如何设置iptables规则使指定端口只可接受来自特定IP地址的访问?)
[14. 如何转发iptables规则?](#14. 如何转发iptables规则?)
[15. 如何在iptables中启用端口转发?](#15. 如何在iptables中启用端口转发?)
[16. 如何查看iptables的状态和计数器?](#16. 如何查看iptables的状态和计数器?)
[17. 如何限制同一IP地址对特定端口的连接数?](#17. 如何限制同一IP地址对特定端口的连接数?)
[18. 如何添加或删除一个iptables规则的注释?](#18. 如何添加或删除一个iptables规则的注释?)
[19. 如何实现网络地址转换(NAT)?](#19. 如何实现网络地址转换(NAT)?)
[20. 如何通过iptables实现端口转发?](#20. 如何通过iptables实现端口转发?)
[第二部分 案例](#第二部分 案例)
[1. 允许所有流量通过的基本规则:](#1. 允许所有流量通过的基本规则:)
[2. 禁止所有流量通过的基本规则:](#2. 禁止所有流量通过的基本规则:)
[3. 允许PING请求:](#3. 允许PING请求:)
[4. 允许SSH连接:](#4. 允许SSH连接:)
[5. 允许HTTP连接:](#5. 允许HTTP连接:)
[6. 允许HTTPS连接:](#6. 允许HTTPS连接:)
[7. 限制特定IP地址的访问:](#7. 限制特定IP地址的访问:)
[8. 限制特定端口的访问:](#8. 限制特定端口的访问:)
[9. 允许本地回环接口:](#9. 允许本地回环接口:)
[10. 允许已建立的连接通过:](#10. 允许已建立的连接通过:)
[11. 允许特定MAC地址的流量通过:](#11. 允许特定MAC地址的流量通过:)
[12. 根据源IP地址限制连接速率:](#12. 根据源IP地址限制连接速率:)
[13. 根据目标IP地址限制连接速率:](#13. 根据目标IP地址限制连接速率:)
[14. 屏蔽特定IP地址:](#14. 屏蔽特定IP地址:)
[15. 屏蔽特定端口:](#15. 屏蔽特定端口:)
[16. 允许从特定IP地址到特定端口的连接:](#16. 允许从特定IP地址到特定端口的连接:)
[17. 允许从特定IP地址范围到特定端口的连接:](#17. 允许从特定IP地址范围到特定端口的连接:)
[18. 允许特定协议的流量通过:](#18. 允许特定协议的流量通过:)
[19. 允许特定网络接口的流量通过:](#19. 允许特定网络接口的流量通过:)
[20. 屏蔽从特定IP地址或网络接口的流量:](#20. 屏蔽从特定IP地址或网络接口的流量:)
[21. 允许特定TCP标志的连接通过:](#21. 允许特定TCP标志的连接通过:)
[22. 允许特定报文大小的流量通过:](#22. 允许特定报文大小的流量通过:)
[23. 允许特定时间段的连接通过:](#23. 允许特定时间段的连接通过:)
[24. 允许来自特定国家或地区的流量通过:](#24. 允许来自特定国家或地区的流量通过:)
[25. 屏蔽特定国家或地区的流量:](#25. 屏蔽特定国家或地区的流量:)
[26. 屏蔽特定用户访问特定网站:](#26. 屏蔽特定用户访问特定网站:)
[27. 允许特定用户访问特定网站:](#27. 允许特定用户访问特定网站:)
[28. 阻止IPv6流量:](#28. 阻止IPv6流量:)
[29. 允许特定端口的IPv6流量通过:](#29. 允许特定端口的IPv6流量通过:)
[30. 屏蔽特定IPv6地址:](#30. 屏蔽特定IPv6地址:)
[31. 允许特定MAC地址的IPv6流量通过:](#31. 允许特定MAC地址的IPv6流量通过:)
[32. 允许特定IPv6地址范围的流量通过:](#32. 允许特定IPv6地址范围的流量通过:)
[33. 允许IPv6 ICMPv6请求通过:](#33. 允许IPv6 ICMPv6请求通过:)
[34. 屏蔽所有IPv6 ICMPv6流量:](#34. 屏蔽所有IPv6 ICMPv6流量:)
[35. 允许特定协议的IPv6流量通过:](#35. 允许特定协议的IPv6流量通过:)
[36. 允许来自特定IPv6地址的连接:](#36. 允许来自特定IPv6地址的连接:)
[37. 允许从特定IPv6地址范围的连接:](#37. 允许从特定IPv6地址范围的连接:)
[38. 允许从特定网络接口的IPv6流量通过:](#38. 允许从特定网络接口的IPv6流量通过:)
[39. 屏蔽从特定IPv6地址或网络接口的流量:](#39. 屏蔽从特定IPv6地址或网络接口的流量:)
[40. 允许特定TCP标志的IPv6连接通过:](#40. 允许特定TCP标志的IPv6连接通过:)
[41. 允许特定报文大小的IPv6流量通过:](#41. 允许特定报文大小的IPv6流量通过:)
[42. 允许特定时间段的IPv6连接通过:](#42. 允许特定时间段的IPv6连接通过:)
[43. 允许特定协议和端口的流量通过IPV6:](#43. 允许特定协议和端口的流量通过IPV6:)
[44. 允许特定ICMPv6类型的流量通过:](#44. 允许特定ICMPv6类型的流量通过:)
[45. 使用NAT转发流量:](#45. 使用NAT转发流量:)
[46. 设置端口映射:](#46. 设置端口映射:)
[47. 设置数据包转发:](#47. 设置数据包转发:)
iptables
第一部分
1. 什么是iptables?
iptables是一个Linux内核防火墙工具,用于管理系统的网络流量和安全策略。它允许管理员定义规则,以控制进出系统的网络数据包。
2. iptables的作用是什么?
iptables的主要作用是过滤和阻止网络流量,允许管理员定义规则以控制数据包的路由、转发和处理方式。它也可以用于实现网络地址转换(NAT)和端口转发等功能。
3. iptables和firewalld有什么区别?
iptables是一个传统的命令行工具,而firewalld是一个更高级的防火墙管理器,提供了更易用的接口和GUI工具。firewalld在内部使用iptables来实现具体的防火墙功能。
4. 如何查看系统中已定义的iptables规则?
可以使用iptables命令的`-L`选项或者`--list`选项来查看已定义的iptables规则。例如,`iptables -L`将显示当前的过滤规则。
5. 如何 添加 一个新的iptables规则?
可以使用iptables命令的`-A`选项或者`--append`选项来添加新的iptables规则。
例如,`iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
将允许通过TCP协议访问本地的80端口。
6. 如何 删除 一个已定义的iptables规则?
可以使用iptables命令的`-D`选项或者`--delete`选项来删除已定义的iptables规则。例如,`iptables -D INPUT -p tcp --dport 80 -j ACCEPT`将删除允许通过TCP协议访问本地的80端口的规则。
7. 如何 保存和恢复 iptables规则?
可以使用iptables-save命令将当前的iptables规则保存到文件中,并使用iptables-restore命令从文件中恢复iptables规则。
例如,`iptables-save > rules.txt` 将规则保存到文件中,
`iptables-restore < rules.txt` 将从文件中恢复规则。
8. 如何允许某个IP地址通过iptables访问本地的特定端口?
可以使用iptables命令的`-A`选项,并指定INPUT链和适当的规则来允许特定IP地址通过iptables访问本地的特定端口。例如,`iptables -A INPUT -p tcp -s 192.168.1.100 --dport 80 -j ACCEPT`将允许IP地址为192.168.1.100的主机通过TCP协议访问本地的80端口。
9. 如何拒绝某个IP地址通过iptables访问本地的特定端口?
可以使用iptables命令的`-A`选项,并指定INPUT链和适当的规则来拒绝特定IP地址通过iptables访问本地的特定端口。例如,`iptables -A INPUT -p tcp -s 192.168.1.100 --dport 80 -j DROP`将拒绝IP地址为192.168.1.100的主机通过TCP协议访问本地的80端口。
10. 如何允许某个IP地址通过iptables访问本地的所有端口?
可以使用iptables命令的`-A`选项,并指定INPUT链和适当的规则来允许特定IP地址通过iptables访问本地的所有端口。例如,`iptables -A INPUT -p tcp -s 192.168.1.100 -j ACCEPT`将允许IP地址为192.168.1.100的主机通过TCP协议访问本地的所有端口。
11. 如何阻止所有除特定IP地址之外的主机通过iptables访问本地的特定端口?
可以使用iptables命令的`-A`选项,并指定INPUT链和适当的规则来阻止所有除特定IP地址之外的主机通过iptables访问本地的特定端口。例如,`iptables -A INPUT -p tcp ! -s 192.168.1.100 --dport 80 -j DROP`将阻止除IP地址为192.168.1.100之外的主机通过TCP协议访问本地的80端口。
12. 如何允许某个IP地址通过iptables访问外部的特定端口?
可以使用iptables命令的`-A`选项,并指定OUTPUT链和适当的规则来允许特定IP地址通过iptables访问外部的特定端口。例如,`iptables -A OUTPUT -p tcp -d 192.0.2.1 --dport 80 -j ACCEPT`将允许通过TCP协议访问IP地址为192.0.2.1的外部主机的80端口。
13. 如何设置iptables规则使指定端口只可接受来自特定IP地址的访问?
可以使用iptables命令的`-A`选项,并同时指定INPUT链和适当的规则,以及适当的伪协议`-m`参数和源IP地址来设置这样的规则。例如,`iptables -A INPUT -p tcp -m tcp --dport 80 -s 192.168.1.100 -j ACCEPT`将允许只有IP地址为192.168.1.100的主机通过TCP协议访问本地的80端口。
14. 如何转发iptables规则?
可以使用iptables命令的`-A`选项,并同时指定FORWARD链和适当的规则,以及适当的伪协议`-m`参数和目标IP地址来设置这样的规则。例如,`iptables -A FORWARD -m tcp -p tcp -d 192.168.2.100 --dport 80 -j ACCEPT`将允许通过TCP协议转发数据包到IP地址为192.168.2.100的主机的80端口。
15. 如何在iptables中启用端口转发?
可以使用sysctl命令来启用IP转发功能,以便在iptables中实现端口转发。例如,`sysctl net.ipv4.ip_forward=1`将启用IP转发功能,使系统可以进行端口转发。
16. 如何查看iptables的状态和计数器?
可以使用iptables命令的`-L`选项和`-n`选项(可选)来查看iptables的状态和计数器。例如,`iptables -L -n`将显示未解析的IP地址和端口号。
17. 如何限制同一IP地址对特定端口的连接数?
可以使用iptables命令的`-A`选项,并指定INPUT链和适当的规则来限制同一IP地址对特定端口的连接数。例如,`iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT`将拒绝同一IP地址对SSH(端口22)的连接数超过3次。
18. 如何添加或删除一个iptables规则的注释?
可以使用iptables命令的`-m comment`选项并指定注释文本来添加或删除一个iptables规则的注释。例如,`iptables -A INPUT -p tcp --dport 80 -m comment --comment "Allow HTTP traffic" -j ACCEPT`将为允许HTTP流量的规则添加一个注释。
19. 如何实现网络地址转换(NAT)?
可以使用iptables命令的`-t nat`选项来操作iptables的NAT表,使用`-A`选项来添加新的NAT规则。例如,`iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE`将为通过eth0接口进行的流量添加一个源地址转换规则。
20. 如何通过iptables实现端口转发?
可以使用iptables命令的`-t nat`选项来操作iptables的NAT表,使用`-A`选项来添加新的端口转发规则
第二部分 案例
1. 允许所有流量通过的基本规则:
```
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
2. 禁止所有流量通过的基本规则:
```
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
```
3. 允许PING请求:
```
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
```
4. 允许SSH连接:
```
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
```
5. 允许HTTP连接:
```
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
```
6. 允许HTTPS连接:
```
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
```
7. 限制特定IP地址的访问:
```
iptables -A INPUT -s 192.168.0.100 -j DROP
```
8. 限制特定端口的访问:
```
iptables -A INPUT -p tcp --dport 8080 -j DROP
```
9. 允许本地回环接口:
```
iptables -A INPUT -i lo -j ACCEPT
```
10. 允许已建立的连接通过:
```
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
```
11. 允许特定MAC地址的流量通过:
```
iptables -A INPUT -m mac --mac-source 01:23:45:67:89:ab -j ACCEPT
```
12. 根据源IP地址限制连接速率:
```
iptables -A INPUT -p tcp -m limit --limit 10/minute -j ACCEPT
```
13. 根据目标IP地址限制连接速率:
```
iptables -A FORWARD -p tcp -d 192.168.0.100 --dport 80 -m limit --limit 100/minute -j ACCEPT
```
14. 屏蔽特定IP地址:
```
iptables -A INPUT -s 192.168.0.200 -j DROP
```
15. 屏蔽特定端口:
```
iptables -A INPUT -p tcp --dport 8080 -j DROP
```
16. 允许从特定IP地址到特定端口的连接:
```
iptables -A INPUT -s 192.168.0.100 -p tcp --dport 22 -j ACCEPT
```
17. 允许从特定IP地址范围到特定端口的连接:
```
iptables -A INPUT -m iprange --src-range 192.168.0.100-192.168.0.200 -p tcp --dport 80 -j ACCEPT
```
18. 允许特定协议的流量通过:
```
iptables -A INPUT -p udp --dport 53 -j ACCEPT
```
19. 允许特定网络接口的流量通过:
```
iptables -A INPUT -i eth0 -j ACCEPT
```
20. 屏蔽从特定IP地址或网络接口的流量:
```
iptables -A INPUT -s 192.168.0.100 -j DROP
iptables -A INPUT -i eth0 -j DROP
```
21. 允许特定TCP标志的连接通过:
```
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT
```
22. 允许特定报文大小的流量通过:
```
iptables -A INPUT -p tcp --dport 80 -m length --length 100:500 -j ACCEPT
```
23. 允许特定时间段的连接通过:
```
iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 --days Mon-Fri -j ACCEPT
```
24. 允许来自特定国家或地区的流量通过:
```
iptables -A INPUT -m geoip --source-country CN,JP -j ACCEPT
```
25. 屏蔽特定国家或地区的流量:
```
iptables -A INPUT -m geoip ! --source-country US,UK -j DROP
```
26. 屏蔽特定用户访问特定网站:
```
iptables -A OUTPUT -m owner --cmd-owner "/usr/sbin/apache2" -d www.example.com -j DROP
```
27. 允许特定用户访问特定网站:
```
iptables -A OUTPUT -m owner --cmd-owner "nginx" -d www.example.com -j ACCEPT
```
28. 阻止IPv6流量:
```
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
```
29. 允许特定端口的IPv6流量通过:
```
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
```
30. 屏蔽特定IPv6地址:
```
ip6tables -A INPUT -s 2001:db8::1 -j DROP
```
31. 允许特定MAC地址的IPv6流量通过:
```
ip6tables -A INPUT -m mac --mac-source 01:23:45:67:89:ab -j ACCEPT
```
32. 允许特定IPv6地址范围的流量通过:
```
ip6tables -A INPUT -m iprange --src-range 2001:db8::1-2001:db8::10 -j ACCEPT
```
33. 允许IPv6 ICMPv6请求通过:
```
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
```
34. 屏蔽所有IPv6 ICMPv6流量:
```
ip6tables -A INPUT -p icmpv6 -j DROP
```
35. 允许特定协议的IPv6流量通过:
```
ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
```
36. 允许来自特定IPv6地址的连接:
```
ip6tables -A INPUT -s 2001:db8::1 -j ACCEPT
```
37. 允许从特定IPv6地址范围的连接:
```
ip6tables -A INPUT -m iprange --src-range 2001:db8::1-2001:db8::10 -j ACCEPT
```
38. 允许从特定网络接口的IPv6流量通过:
```
ip6tables -A INPUT -i eth0 -j ACCEPT
```
39. 屏蔽从特定IPv6地址或网络接口的流量:
```
ip6tables -A INPUT -s 2001:db8::1 -j DROP
ip6tables -A INPUT -i eth0 -j DROP
```
40. 允许特定TCP标志的IPv6连接通过:
```
ip6tables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT
```
41. 允许特定报文大小的IPv6流量通过:
```
ip6tables -A INPUT -p tcp --dport 80 -m length --length 100:500 -j ACCEPT
```
42. 允许特定时间段的IPv6连接通过:
```
ip6tables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 --days Mon-Fri -j ACCEPT
```
43. 允许特定协议和端口的流量通过IPV6:
```
ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
```
44. 允许特定ICMPv6类型的流量通过:
```
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
```
45. 使用NAT转发流量:
```
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:8080
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
```
46. 设置端口映射:
```
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j REDIRECT --to-port 80
```
47. 设置数据包转发:
```
echo 1 > /proc/sys/net/