iptables
1.iptables(linux的数据包过滤软件)基础概念:
会根据数据包的分析资料“比对”预先定义的规则内容,若数据包与规则内容相同则进行动作,否则就继续下一条规则的比对。
当一个网络数据包要进入主机之前,会先经过Netfilter进行检查,那就是iptables的规则。检查通过则接受(ACCEPT)进入本机获取资源,如果检查不通过,则可能予以丢弃(DROP),而且规则是有顺序的,如果比对结果符合Rule1,此时这个网络数据包就会进行Action1的 动作,而不会理会后续的Rule2,rule3等规则了。
默认情况下,iptables至少有三个表格,五条链:
Filter(过滤器):管理本机进出
INPUT:与想要进入linux的数据包有关
OUTPUT:与linux本机所要送出的数据包有关
FORWARD:与linux本机无关,它可以传递数据包到后端的计算机中,与NAT的table相关性较高
NAT(地址转换):管理后端主机,防火墙内部的其他计算机
PREROUTING:再进行路由判断之前所要进行的规则(DNAT)
POSTROUTING:再进行路由判断之后所要进行的规则(SNAT)
OUTPUT:与发出去的数据包有关
Mangle(破坏者):管理特殊标志
2.基本参数
iptables
-n ##不做解析
-t ##指定表名称
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
-dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许状态
REJECT ##拒绝状态
DROP ##丢弃状态
-N ##增加链
-E ##修改链名称
-F ##清除所有已经定制的规则
-X ##删除用户自定义的链
-D ##删除指定策略
-l ##插入策略
-R ##修改策略
-P ##修改默认策略
3.iptables的一些基本操作:
创建实验环境:
systemctl stop firewalld
systemctl start iptables
systemctl enable iptables
基本操作:
iptables -t table名称 -nL ##列出表格中的规则,当没有t时默认为filter表
iptables -F ##清除所有已经定制的规则
service iptables save ##保存当前策略
格式:iptables[-A 链名] [-io 网络接口] [-p 协议] [-s 来源ip/网络] [-d 目标ip/网络] [-jACCEPT|REJECT|DROP]
-A:新增一条链
-I:插入一条链
-i:数据包进入的那个网络接口
-o:数据包传出的那个网络接口
-p:设置此规则适用于哪种数据包格式。主要数据包格式有:tcp,udp,icmp,及all
-s:设置此规则之数据包的来源地
-d:设置目标的ip/网络
-j:后面接操作,主要有ACCEPT、REJECT、DROP
iptables -A INPUT -i lo -j ACCEPT ##允许lo
iptables -A INPUT -p tcp --dport 22 -iACCEPT ##允许访问22端口
iptables -A INPUT -s 172.25.254.61 -jACCEPT ##允许61主机访问本机所有端口
iptables -A INPUT -i REJECT ##拒绝所有主机的数据来源
iptables -N redhat ##增加redhat链
iptables -E redhat linux ##更改链名称
iptables -X linux ##删除linux链
iptables -D INPUT 2 ##删除INPUT链中的第二条策略
iptables -I INPUT -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第一条
iptables -R INPUT -p tcp --dport 25 -j ACCEPT ##修改为第一条策略
iptables -P INPUT DROP ##把input链的默认策略改为DROP
格式:iptables -A INPUT [-m state]
-m:一些iptables的外挂模块,主要常见的有:state和mac
state:状态模块
mac:网卡硬件地址
--state:一些数据包的状态
INVALID :无效数据包,例如数据破损的数据包状态
ESTABLISHED :已经连接成功的连接状态
NEW :想要新建立连接的数据包状态
RELATED :最常用,表示这个数据包是与主机发送出去的数据包有关
iptables -A INPUT -m stat --statRELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -m state--state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -mstate --state NEW -i ACCEPT
iptables -A INPUT -p tcp --dport 80 -mstate --state NEW -i ACCEPT
iptables -A INPUT -p tcp --dport 53 -mstate --state NEW -i ACCEPT
iptables -A INPUT -p tcp --dport 443-m state --state NEW -i ACCEPT
iptables -A INPUT -j REJECT
SNAT:修改数据包报头的来源项目
DNAT:修改数据包报头的目标项目
sysctl -a | grep forward
vim /etc/sysctl.conf
sysctl -p ##更改立即生效
iptables -t nat -A PREROUTING -i eth0-j DNAT --to-dest 172.25.22.11 ##修改目标ip
iptables -t nat -A POSTROUTING -o eth0-j SNAT --to-source 172.25.254.122 ##修改来源的ip