防火墙的工作原理
iptable也是用来管理配置火墙的一种工具,使用iptable管理火墙比使用firewalld管理火墙要复杂一些。
iptable的四个表五条链
对于iptable我们要先了解它四个表五条链。 4个表分别为filter,nat,mangle,raw。
filter:一般的过滤功能
nat:用于nat功能(端口映射,地址映射等)
mangle:用于对特定数据包的修改
raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
5条链分别为PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTIONG:发送到网卡接口之前。
iptable的常用管理命令
iptable
-t ##指定表名称
-n ##不作解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
--dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许
REJECT ##拒绝
DROP ##丢弃
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入
-R ##修改策略
-P ##修改默认策略
首先我们将前面的firewalld关闭在再打开iptable。
systemctl stop firewalld
systemctl enabled firewalld
systemctl start iptables.service
打开iptable。
iptables -nL
不解析列出表策略
iptable -F
刷掉filter表中的所有策略,当没有用-t指定表名称时默认时filter。
iptables -P INPUT DROP
设置网络连接为丢弃,任何接受的网络数据包都被丢弃,没有任何回复。
iptables -P INPUT ACCEPT
设置网络连接状态为允许,允许所有网络连接。
iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT
禁用22端口,此时使用22端口进行远程连接被拒绝了。
使用iptables -nL可以查看这条规则。
如果要使22端口对这台主机能使用的话,要添加这一条命令:
iptables -I INPUT 1 -p tcp --dport 22 -s 172.25.254.31 -j ACCEPT
表示允许这台主机使用22端口,并且将这条规则插入到第一条,因为iptable读取规则时是按照顺序的,所以要把规则插入到第一条。如果只是添加的话把-I参数改为-A就可以了,添加规则按照默认顺序排序。
iptables -D INPUT 2
删除规则第二条规则,可以先用查看有那些规则,再根据自己的需求删除。
iptables -N redhat
增加一条链
iptables -E redhat linux
更改链的名字
iptables -X linux
删除链
地址转换
1.源地址转换
源地址转换即内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址,这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.231
此时发起访问的内网ip通过这台主机向外传送数据时,ip地址转换为172.25.254.231。
2.目标地址转换
做完源地址转换之后,其他主机去访问172.25.254.231这台主机只能访问到这台真实主机,而访问不到向它发送数据的真实主机,所以172.25.254.231这台主机需要做目标地址转换,让外部主机能找到通过172.25.254.231访问它的真实主机。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.131
设置其他主机访问本机22端口时,将目标转为 1.1.1.131主机的22端口。
iptable对端口的控制
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -j REJECT
允许使用使用80端口连接,拒绝使用其他所有端口,注意这里使用的规则也是有顺序的。