Linux Commnad iptables 防火墙

[!NOTE|style:flat|lable:Mylable|iconVisibility:hidden] iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML

1. 默认的四张表

1、filter:用于防火墙,默认有INPUT/OUTPUT/FORWARD三条链
2、nat:网络地址转换,PREROUTING/POSTROUTING/OUTPUT三条链
3、mangle:流量整形,五条链
4、raw:用于状态跟踪

2. 默认的五条规则链

1、INPUT: 如果一个数据包的目的地址是LINUX本身,则进入INPUT链
2、OUTPUT: 源地址是LINUX本身
3、FORWARD: 数据包从一块网卡接收,从另一块网卡发出,经过LINUX的包,进入这条链
4、PREROUTING: 路由前
5、POSTROUTING: 路由后

3. 选项

-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。

# 通用匹配:源地址目标地址的匹配
-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。

# 查看管理命令
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

# 规则管理命令
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则

# 链管理命令(这都是立即生效的)
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。

-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h:显示帮助信息;
--state 匹配一组连接状态
--string 匹配应用层数据字节序列
--comment 注释数据
--probability 0.50000000000  -j KUBE-SEP-ID6YWIT3F6WNZ47P  使连接有50%的概率进入到KUBE-SEP-ID6YWIT3F6WNZ47P链

4. 规则

4.1 编写规则:

4.2 添加规则:

  • -A 在链的末尾追加一条规则
  • -I 在链的开头插入一条规则
  • -L 列出所有的规则条目

4.3 查看规则:

  • -n 以数字形式显示地址,端口等信息
  • -line-numbers 查看规则时,显示规则的序号

4.4 删除规则:

  • -D 删除链内指定序号的一条规则
  • -F 清空所有的规则
  • -P 为指定的链设置默认规则

5. iptables实例

1、拒绝PING防火墙本身

$ iptables  -F
$ iptables  -A  INPUT  -p  icmp  -j  DROP

2、ping linux的IP地址 3、把防火墙规则再清空,把拒绝ICMP的目标规则改为REJECT,再次ping测试,看结果。 4、查看防火墙规则

$  iptables  -nvL

5、允许指定IP地址的主机PING防火墙

$  iptables  -I  INPUT  1  -s  192.168.194.1  -p  icmp  -j  ACCEPT

6、查看防火墙规则,每个规则注明序号

$  iptables  -nL  --line-numbers

7、删除防火墙的INPUT链中第二条规则

$ iptables  –D  INPUT  2

8、把OUTPUT的默认规则改为DROP

$  iptables  -P  OUTPUT  DROP
# 限制syn并发数为每秒1次
$ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

# 限制单个IP在60秒新建立的连接数为10
$ iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT

5.1 规则的基本匹配条件

1、允许特定IP地址访问LINUX的telnet服务

$  yum  install  -y  telnet-server
$ service  xinetd  start
$ chkconfig  telnet  on
$ iptables  -P  INPUT  DROP
$ iptables  -A  INPUT  -s  192.168.194.1  -p  tcp  --dport  23  -j  ACCEPT

2、继续第1步。向INPUT链插入规则,作为第一条。从eth0网卡收到的、访问telnet服务的数据包,拒绝。

$ iptables  -I  INPUT  -i  eth0  -p  tcp  --dport  23  -j  REJECT

5.2 打开LINUX路由功能(转发功能)

IS: 中间系统,路由器。 ES: 终端系统,主机系统。 1、临时打开路由功能

$ echo  1  > /proc/sys/net/ipv4/ip_forward
$ cat  /proc/sys/net/ipv4/ip_forward
1

2、永久打开转发功能

$  echo  ‘echo  1  > /proc/sys/net/ipv4/ip_forward’  >>  /etc/rc.local
或
$  vim  /etc/sysctl.conf
net.ipv4.ip_forward = 1
$ sysctl  -p

5.3 使用FORWARD链

1、拓扑

2、拒绝192.168.195.0/24网段访问192.168.194.0/24网段的telnet服务

$ iptables -A FORWARD -s 192.168.195.0/24 -d 192.168.194.0/24 -p tcp --dport 23  -i  eth1  -o  eth0  -j  REJECT

3、从拒绝SSH协议通过防火墙

$ iptables  -A  FORWARD  -p  tcp  --dport  22  -j  REJECT

4、不是192.168.195.0/24网段的主机访问SSH服务,可通过

$ iptables  -I  FORWARD  !  -s  192.168.195.0/24  -p  tcp  --dport 22  -j  ACCEPT

5、防火墙拒绝icmp的请求

$ iptables  -A  INPUT  -p  icmp  --icmp-type  echo-request  -j  REJECT

6、允许192.168.195.0/24网段进行PING

$ iptables  -I  INPUT  -s  192.168.195.0/24  -p  icmp  --icmp-type  echo-request  -j ACCEPT

7、防火墙拒绝发送echo-reply

$ iptables  -A  OUTPUT  -p  icmp  --icmp-type  echo-reply  -j  REJECT

8、允许防火墙回应192.168.195.0/24网段的ping

$ iptables  -I  OUTPUT  -s  192.168.195.0/24  -p  icmp  --icmp-type  echo-reply  -j ACCEPT

9、防火墙拒绝192.168.195.0/24对其进行TCP连接。 检查SYN/ACK/RST/FIN四个位置,其中SYN被置位

$ iptables  -I  INPUT  -s  192.168.195.0/24  -p  tcp  --tcp-flags  SYN,ACK,RST,FIN  SYN  -j  REJECT

5.4 扩展匹配

5.5 按数据包速率和状态匹配

-m state --state <状态> ,网络连接的五种状态

  • NEW,请求建立连接的包、完全陌生的包
  • ESTABLISHED,将要或已经建立连接的包
  • RELATED,与已知某个连接相关联的包
  • INVALID,无对应连接,以及连接无效的包
  • UNTRACKED,未跟踪状态的包
-m limit --limit 匹配速率 如: -m limit --limit 50/s -j ACCEPT
-m state --state 状态 如: -m state --state INVALID,RELATED -j ACCEPT

2、192.168.194.0/24作为内网,192.168.195.0/24作为外网。从内到外的访问不受限制,从外到内的主动连接全部拒绝。

$ iptables  -A  FORWARD  -s  192.168.194.0/24  -j  ACCEPT
$ iptables  -A  FORWARD  -d  192.168.194.0/24  -j  REJECT
$ iptables  -I  FORWARD  2  -d  192.168.194.0/24  \
 -m  state  --state  ESTABLISHED,RELATED  -j  ACCEPT

3、减轻DOS(拒绝服务)攻击 4、免状态跟踪

4.6 还可以限制链接数

-m connlimit --connlimit-above n 限制为多少个

  //表示限制链接数最大为9个   
 iptables -I FORWARD -p tcp -m connlimit --connlimit-above 9 -j DROP      

//表示访问80端口服务最大为10个链接  
iptable -A INPUT -p tcp -- dport 80 -m connlimit --connlimit-above 10 -j REJECT

4.7 模拟随机丢包率

iptables -A FORWARD -p icmp -m statistic --mode random --probability 0.31  -j REJECT   //表示31%的丢包率

-m random --average 5 -j DROP 表示模拟丢掉5%比例的包

6. raw

追踪数据包

# 在宿主机上执行
$ iptables -t raw -A OUTPUT -p icmp -j TRACE
$ iptables -t raw -A PREROUTING -p icmp -j TRACE

更多阅读:

Copyright © ghostwritten 浙ICP备2020032454号 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-06-23 17:15:46

results matching ""

    No results matching ""