Linux之iptables实现防火墙策略

iptables含义

iptables是ip表的意思,iptables是由最基本的多个表组成,而且每个表用途都不一样,在每个表中,定义了多个链,通过这些链可以设置相应的规则和策略

iptables 命令

-nL查看火墙信息
-F 刷新策略,临时清空表的信息
-t 等同-nL
-t 指定操作的表
-P 默认规则
-A 自己添加的规则
从上到下依次读取策略,上面的满足了,就不读取下面的
-I 插入,可以指定添加所在位置
-R 修改策略
-n 表示不做解析
-L 查表的策略信息
-p 协议
-D 删除链上的制定规则
-N 自动以添加链名
-E 修改规则链名称
-X 删除自定义链

1、开启服务

[root@node1 Desktop]# systemctl stop firewalld  #关闭防火墙
[root@node1 Desktop]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
[root@node1 Desktop]# systemctl start iptables.service   #打开iptables
[root@node1 Desktop]# systemctl enable iptables.service 

2、相关命令的具体使用

2.1、清空规则并修改访问为接受模式
[root@node1 Desktop]# 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         
[root@node1 Desktop]# iptables -F  #清空策略
[root@node1 Desktop]# iptables -nL  #查看,已经清空
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@node1 Desktop]# service iptables save  #保存规则信息
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@node1 Desktop]# vim /etc/sysconfig/iptables   #查看iptables的配置文件

文件内容如下:
这里写图片描述

[root@node1 Desktop]# systemctl start httpd  #开启http服务
[root@node1 Desktop]# iptables -P INPUT ACCEPT  #将访问设置为接受模式

测试:所有主机浏览器都可以看到httpd页面
这里写图片描述
这里写图片描述

2.2、默认添加访问http为拒绝模式
[root@node1 Desktop]# iptables -A INPUT -p tcp --dport 80 -j REJECT  #默认添加访问httpd为拒绝模式
[root@node1 Desktop]# iptables -nL  #查看已经添加规则
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

测试:所有主机都访问不到服务端http
这里写图片描述
这里写图片描述

2.3、指定添加内容
[root@node1 Desktop]# iptables -A INPUT -s 172.25.254.69 -p tcp --dport 80 -j ACCEPT 
#默认指定添加172.25.254.69主机可以访问到本机httpd
[root@node1 Desktop]# iptables -nL  #查看指定添加的规则
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable
ACCEPT     tcp  --  172.25.254.69        0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@node1 Desktop]# iptables -D INPUT 2  
#因为读取时是从第一条开始读取,当第一条满足时不再读取第二条规则,所以删除第二条规则,将其插入到第一条,这样172.25.254.69主机就可以访问到本机httpd
[root@node1 Desktop]# iptables -I INPUT 1 -s 172.25.254.69 -p tcp --dport 80 -j ACCEPT  #指定在第一行添加指定ip的主机可以访问httpd
[root@node1 Desktop]# iptables -nL  #查看已经添加
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.69        0.0.0.0/0            tcp dpt:80
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

测试:ip为172.25.254.69的主机可以访问到http,其他主机不能访问
这里写图片描述
这里写图片描述

2.4、修改内容
[root@node1 Desktop]# iptables -nL  #查看规则
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.69        0.0.0.0/0            tcp dpt:80
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@node1 Desktop]# iptables -R INPUT 2 -s 172.25.254.11 -p tcp --dport 80 -j ACCEPT   
#指定修改表的第二行内容
[root@node1 Desktop]# iptables -nL  #查看规则已经将第二行内容修改
Chain INPUT (policy ACCEPT) 
target     prot opt source               destination         
ACCEPT     tcp  --  172.25.254.69        0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  172.25.254.11        0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
2.5、自定义链

这里写图片描述
这里写图片描述
这里写图片描述

2.6、

对第一次访问的请求读取允许连接的策略,当第二次访问或者之后访问的直接接受请求,不读取允许连接的策略,以便节省时间
NEW:表示第一次访问
ESTABLISHED :表示第二次访问
RELATED :表示关闭访问后再次访问

[root@node1 Desktop]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@node1 Desktop]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#将第二次访问和关闭访问后再次访问添加为接收模式,并添加在第一条,以便第二次访问时不用进行读取其他策略
[root@node1 Desktop]# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
#添加ssh的端口为接受
[root@node1 Desktop]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
#添加http端口为接受
[root@node1 Desktop]# iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
#添加dns端口为接受
[root@node1 Desktop]# iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
#HTTPS端口为接受
[root@node1 Desktop]# iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT
#iscsi端口为接受
[root@node1 Desktop]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
#本机回环
[root@node1 Desktop]# 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     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3260
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state NEW

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@node1 Desktop]# service iptables save  #保存规则
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@node1 Desktop]# cat /etc/sysconfig/iptables  #查看规则配置文件内容
# Generated by iptables-save v1.4.21 on Wed Jun 13 05:52:59 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [12:720]
:OUTPUT ACCEPT [12:1056]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3260 -j ACCEPT
-A INPUT -i lo -m state --state NEW -j ACCEPT
COMMIT
# Completed on Wed Jun 13 05:52:59 2018

地址伪装

做路由的主机:

[root@node1 Desktop]# iptables -F
[root@node1 Desktop]# iptables -nL -t nat  #查看nat策略
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
[root@node1 Desktop]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.169
#在路由后,通过SNAT的方式将其转换为源地址

这里写图片描述
客户主机:
这里写图片描述
这里写图片描述

端口转发

被添加为转发端口的主机:

[root@server Desktop]# ifconfig eth0 172.25.254.196/24  
#因为本机yum源是254网段的主机共享的,所以需要临时修改ip
[root@server Desktop]# yum install httpd  #下载http
[root@server Desktop]# systemctl restart network  #重启网络,ip恢复
[root@server Desktop]# systemctl start httpd  #打开http服务
[root@server Desktop]# echo 172.25.0.196 > /var/www/html/index.html  
#给http的默认发布文件写入内容172.25.0.196

添加端口转发的主机(路由主机):

[root@node1 Desktop]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-dest 172.25.0.196
#在路由前,通过DNAT的方式将其转换为目标地址172.25.0.196
[root@node1 Desktop]# iptables -nL -t nat  #查看添加规则
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.25.0.196

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  0.0.0.0/0            0.0.0.0/0            to:172.25.254.169

在真机测试:
访问路由主机的http时,查看到的是客户主机的http默认发布文件的内容
这里写图片描述

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭