[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# yum -y install iptables iptables-services.x86_64
...略
[root@localhost ~]# systemctl start iptables.service
使用 iptables 命令管理、编写防火墙规则时,基本的命令格式如下:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
注意事项:
选项名 | 功能及特点 |
---|---|
-A | 在指定链的末尾追加(--append)一条新的规则 |
-I | 在指定链的开头插入(--insert) 一条新的规则,未指定序号时默认作为第一条规则 |
-R | 修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容 |
-P | 设置指定链的默认策略(--policy) |
-D | 删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容 |
-F | 清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链 |
-L | 列出(--list)指定链中所有的规则,若未指定链名,则列出表中的所有链 |
-n | 使用数字形式(--numeric)显示输出结果,如显示IP地址而不是主机名 |
-v | 显示详细信息,包括每条规则的匹配包数量和匹配字节数 |
--line-numbers | 查看规则时,显示规则的序号 |
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
#基本格式:
iptables [-t 表名] -n -L [链名] [--line-numbers]
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
6 ACCEPT tcp -- anywhere anywhere
7 REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable
[root@localhost ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
#基本格式
iptables [-t 表名] -p <链名> <控制类型>
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
[root@localhost ~]# iptables -F INPUT
[root@localhost ~]# iptables -n -L
INPUT ##确认删除效果
Chain INPUT (policy ACCEPT)
target prot opt source destination
iptables -F
iptables -t nat -F
iptables -t mangle -F
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
[root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.11.1 -j REJECT
[root@localhost ~]# iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
[root@localhost ~]# iptables -I FORWARD -s 10.20.30.0/24 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT
--sport 1000 #匹配源端口是1000的数据包
--sport 1000: 3000 #匹配源端口是1000-3000的数据包
--sport : 3000 #匹配源端口是3000及以下的数据包
--sport 1000: #匹配源端口是1000及以上的数据包
注意: --sport 和--dport 必须配合-p <协议类型>使用
--tcp-flags TCP标记
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
iptables -A INPUT -p icmp - icmp-type 8 -j DROP #禁止其它主机ping本机
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允许本机ping其它主机
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其它主机时提示目标不可达
#此时其它主机需要配置关于icmp协议的控制类型为REJECT
iptables -A INPUT -p icmp -j REJECT
“-m multiport --dports 端口列表”
“-m multiport --sports 端口列表”
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
-m iprang --src-rang IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP(MAC地址)
#禁止来自某MAC地址的数据包通过本机转发
-m state --state 连接状态
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHD -j ACCEPT
iptables -P INPUT DROP