应用场景
1 2 3 |
1.主机安全 2.端口转发/ip转发 3.内部共享上网 |
iptables工作流程
1 2 3 4 5 6 |
1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的 2.匹配规则时是按照从上到下依次匹配 3.只要符合匹配到的规则,就不再往下匹配 4.如果都没有匹配上,则匹配默认规则 5.默认规则最后执行,默认规则是全部都允许 6.匹配次数越多的规则越往前放 |
iptables四表五链
1 2 3 4 5 6 7 8 9 10 11 12 |
#四表: 1.filter表 2.nat表 3.raw表 4.mangle表 #五链: 1.INPUT 2.OUTPUT 3.FORWARD 4.PREROUTING 5.POSTROUTING |
1.filter表
1 2 3 4 5 |
主要作用就是阻止和允许访问 #包含的链: 1.INPUT:过滤进入主机的数据包 2.OUTPUT:过滤从主机出去的数据包 3.FORWARD:转发经过主机的数据包 |
2.nat表
1 2 3 4 5 |
主要作用就是IP和端口转发 #包含的链: 1.PREROUTING:数据流入时,改写数据包地址 2.POSTROUTING:数据流出时,改写数据包地址 3.OUTPUT:过滤从主机出去的数据包 |
iptables安装
1.安装
1 |
[root@m01 ~]# yum install -y iptables-services |
2.安装iptables支持的内核模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@m01 ~]# modprobe ip_tables [root@m01 ~]# modprobe iptable_filter [root@m01 ~]# modprobe iptable_nat [root@m01 ~]# modprobe ip_conntrack [root@m01 ~]# modprobe ip_conntrack_ftp [root@m01 ~]# modprobe ip_nat_ftp [root@m01 ~]# modprobe ipt_state #查看加载的模块 [root@m01 ~]# lsmod | egrep 'filter|nat|ipt' modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state |
3.启动
1 2 3 |
[root@m01 ~]# systemctl stop firewalld.service [root@m01 ~]# systemctl start iptables.service |
4.iptables常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#常用参数 1.链管理: -N:new, 自定义一条新的规则链; -X:delete,删除自定义的规则链; 注意:仅能删除 用户自定义的 引用计数为0的 空的 链; -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有: ACCEPT:接受 DROP:丢弃 REJECT:拒绝 -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除; 2.规则管理: -A:append,追加规则; -I:insert, 插入,要指明位置,省略时表示第一条; -D:delete,删除; (1) 指明规则序号; (2) 指明规则本身; -R:replace,替换指定链上的指定规则; -F:flush,清空指定的规则链; -Z:zero,置零; iptables的每条规则都有两个计数器: (1) 匹配到的报文的个数; (2) 匹配到的所有报文的大小之和; 3.查看: -L:list, 列出指定鏈上的所有规则; -n:numberic,以数字格式显示地址和端口号; -v:verbose,详细信息; -vv, -vvv -x:exactly,显示计数器结果的精确值; --line-numbers:显示规则的序号; |
iptables常用操作
1.查看防火墙
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#默认是filter表 [root@m01 ~]# iptables -nL 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 Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination |
2.查看指定表
1 2 |
#-t: 指定表 [root@m01 ~]# iptables -nL -t nat |
3.清除防火墙规则
1 2 3 |
[root@m01 ~]# iptables -F [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z |
4.添加防火墙规则
1 2 3 4 5 6 |
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 |
5.删除防火墙规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#防火墙规则加序号 [root@m01 ~]# iptables -nL --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2 2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination #删除指定id的规则 [root@m01 ~]# iptables -D INPUT 3 |
防火墙配置实例
1.禁止访问22端口
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP iptables #防火墙命令 -t #指定表 filter #filter表 -A #追加规则到链 INPUT #指定链 -p #指定协议 tcp #tcp协议 --dport #指定端口 22 #端口号 -j #指定动作 DROP #丢弃 |
2.禁止IP访问
1 2 3 4 |
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -j DROP -s #指定IP 10.0.0.7 #IP地址或网段 |
3.禁止IP网段
1 2 3 |
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP -i #指定网卡 |
4.只允许某个IP访问
1 2 3 4 5 6 7 8 |
#方式一: [root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT [root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -j DROP #方式二: [root@m01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP ! #取反 |
5.拒绝端口范围
1 2 3 4 5 |
#如果端口是连续的 [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22:200 -j DROP #如果端口不是连续的 [root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 22:200,3000:4000 -j DROP |
6.防火墙规则永久生效
1 2 3 4 5 6 |
#防火墙配置文件,当重启防火墙时,会读取配置文件,配置文件中的配置才会永久生效 [root@m01 /home/lhd]# vim /etc/sysconfig/iptables #想要永久生效配置,配置好防火墙策略,测试成功 [root@m01 /home/lhd]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] |
iptables转发
1.端口转发
1 2 3 |
[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 5555 -j DNAT --to-destination 172.16.1.7:22 [root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 |
2.IP转发
1 2 3 4 5 6 |
[root@m01 ~]#iptables -t nat -A PREROUTING -d 10.0.1.61 -j DNAT --to-destination 172.16.1.7 iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 |
3.内部共享上网
1 2 3 4 5 6 7 8 |
[root@m01 ~]#echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 |