一、iptables的认识
1、iptables和firewalld一样,都是一种动态控制防火墙的工具,通过设定一系列的策略从而保证在与其他主机进行数据传输时系统的安全性。
2、iptables具有filter、nat、mangle、raw四种内建表,各个表中又有内建链,有各自不同的功能。
二、iptables常用内建表
1、filter表:filter表示iptables的默认表,如果没有自定义表,则默认为filter表,具有三种内建链
INPUT:
处理来自外部的数据;
OUTPUT:
处理往外发送的数据;
FORWARD链:
将数据转发至本机的其他网卡上。
2、nat表:nat表中有三种内建链:
PREROUTING:
处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址、
POSTROUTING:
处理即将离开本机的数据包。它会转换数据包中的源IP地址
OUTPUT:
处理本机产生的数据包
3、mangle表:Mangle表用于指定如何处理数据包。有五个内建表
PREROUTING
、OUTPUT
、POSTROUTING
、FORWARD
、INPUT
4、raw表:用于处理异常,有两个内建表:PREROUTING
、OUTPUT
三、iptables的基本使用
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
[root@localhost ~]# iptables -nL ##列出所有策略
[root@localhost ~]# iptables -F ##清空所有策略
[root@localhost ~]# 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@localhost ~]# service iptables save ##保存
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@localhost ~]# vim /etc/sysconfig/iptables ##保存位置所在文件
四、iptables的策略
-t
后面接内建表的名称
-A
添加一个策略
-I
插入一个策略
-D
删除一个策略
-s
来源(策略所指定的ip)
-d
目的
-p
协议
--dport
端口(策略所指定的接口)
-i
匹配从什么接口进来 lo(回环接口)
-P
修改默认规则
-R
修改某一条规则
-N
增加自定的链
-E
修改链名称
-X
删除自定义链
-j
ACCEPT|DROP(不回应)|REJECT 执行的动作
【例题:只允许172.25.254.66用ssh连接】
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT ##拒绝所有人用ssh连接
[root@localhost ~]# iptables -nL ##查看
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
[root@localhost ~]# iptables -I INPUT 1 -s 172.25.254.66 -p tcp --dport 22 -j ACCEPT ##在第一行插入允许250连接ssh
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 172.25.254.66 0.0.0.0/0 tcp dpt:22
REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
链中策略的读取是有顺序的,如果靠前的策略的设定对于数据包有处理,则不读取靠后的策略
[root@desktop ~]# iptables -nL ##查看所有策略均允许,在真机和server虚拟机测试可以看到阿帕其测试界面
真机测试:
虚拟机测试:
[root@desktop ~]# iptables -t filter -nL 查看filter表策略
[root@desktop ~]# iptables -t nat -nL 查看nat表策略
[root@desktop ~]# iptables -t mangle -nL 查看mangle表策略
[root@desktop ~]# iptables -P INPUT DROP 设置为丢弃状态
[root@desktop ~]# iptables -nL ##用真机和虚拟机测试一直转圈,因为丢弃状态不返回值
真机测试:
虚拟机测试:
[root@desktop ~]# iptables -P INPUT ACCEPT 重新改到接受
[root@desktop ~]# iptables -nL 查看策略
[root@desktop ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT 将80端口设置为拒绝
[root@desktop ~]# iptables -nL 查看策略
[root@desktop ~]# iptables -D INPUT 1 删除策略
[root@desktop ~]# iptables -A INPUT -s 172.25.254.84 -p tcp --dport 80 -j ACCEPT 设置84主机可以访问,用真机和虚拟机测试发现均可以连接,80端口为http的端口
[root@desktop ~]# iptables -nL 查看策略
真机测试:
虚拟机测试:
root@desktop ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT 拒绝其他用户访问,iptables从上到下读取,不拒绝的话其他用户还可以访问
[root@desktop ~]# iptables -nL 查看策略
真机可以访问,虚拟机测试不可以访问:
五、iptables的常规配置:
1)该策略表示新建自定义链westos
[root@desktop ~]# iptables -N westos
2)该策略表示修改自定义链的名称
[root@desktop ~]# iptables -E westos WESTOS ##更改名字为大写
3)该策略表示删除自定义链
[root@desktop ~]# iptables -X WESTOS 删除WESTOS表
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允许访问22端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT ##允许访问53端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT ##允许访问80端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 3260 -j ACCEPT ##允许访问3260端口
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT ##允许访问回环端口
[root@localhost ~]# iptables -nL
[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ##将已经建立的和正在进行的设置允许访问
[root@localhost ~]# iptables -nL
-m,--state:
表示iptables的状态机制,共有四种状态机制
NEW:
该数据包想要开始一个新的连接
ESTABLISHED:
已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包,即只要发送并接到应答
RELATED:
该包是属于已经建立的某个连接所建立的新连接
INVALID:
该包不匹配于任何连接,通常这些被DROP
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT ##允许22端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT ##允许53端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT ##允许80端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT ##允许3260端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT ##允许443端口
[root@localhost ~]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT ##允许回环端口
[root@localhost ~]# iptables -A INPUT -j REJECT ##拒绝其他
[root@localhost ~]# iptables -nL
[root@localhost ~]# service iptables save 保存策略
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@localhost ~]# cat /etc/sysconfig/iptables 查看策略文件
[root@desktop Desktop]# iptables -F 刷新
[root@desktop Desktop]# iptables -nL 查看策略
[root@desktop Desktop]# rpm -e httpd 卸载阿帕其
六、iptables的地址伪装:
[root@localhost ~]# iptables -F 刷新策略
[root@localhost ~]# iptables -t nat -nL 查看nat策略
[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.129
在nat表中添加若ip为172.25.4.229的主机连接172.25.254.66的主机时,通过本台主机的eth1网卡路由转换伪装为172.25.254.129这个ip去连接的策略.
[root@localhost ~]# iptables -t nat -nL 查看策略
[root@localhost yum.repos.d]# sysctl -a | grep ip_forward 打开路由协议
net.ipv4.ip_forward = 1
[root@localhost yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1
在server单网卡中ping 172.25.254.66可以ping通,ssh root@172.25.254.66
[root@localhost ~]# w -i ##则会出现172.25.254.129 登陆 伪装成功
继续上面,现在想要用172.25.254.66去连接172.25.4.229,怎么实现在双网卡主机端,输入策略
[root@localhost ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to-dest 172.25.4.229 ##在nat表中添加若ip为172.25.254.66的主机发现连接自己的主机ip为172.25.254.129,主动去连接时直接显示server主机的IP
[root@localhost ~]# iptables -t nat -nL 查看策略
策略里的PREROUTING表示路由前转发,即在访问前进行转换
-i:
表示数据包从eth0网卡进来
-d:
表示目的地址
DNAT
表示目的地址转换
在再主机172.25.254.66中ping172.25.254.129可以通 ssh 连接上 ifconfig 出现的是server单网卡的IP 172.25.4.229
此时,server 单网卡的IP成了主机的IP 172.25.254.66