##########################
#########iptables#########
##########################
1.iptables 实际上就是一种ip信息包过滤型防火墙。就是通过书写一些接受哪些包,拒绝哪些包的规则,实现数据包的过滤。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
iptables由两部分组成:
1>framework:netfilter hooks function钩子函数,实现网络过滤器的基本框架。
2>rule utils:iptables 规则管理工具
总体说来,iptables就是由“四表五链”组成。
四表:
filter:过滤,防火墙
nat :network address translation 网络地址转换
mangle:拆解报文,作出修改,封装报文
raw: 关闭nat表上启用的链接追踪机制
五链:
PREROUTING 数据包进入路由之前
INPUT 目的地址为本机
FORWARD 实现转发
OUTPUT 原地址为本机,向外发送
POSTROUTING 发送到网卡之前
2.区分SNAT和DNAT
SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。
与 SNAT 和 DNAT所对应的两个链分别是 POSTROUTING和PREROUTING 。
-t ##指定表名称
-n ##不再解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
-P ##修改默认策略
--dport ##端口
-s ##数据来源
-j ##动作
-R ##修改策略
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入
ACCEPT ##允许
REJECT ##拒绝
DROP ##丢弃[root@localhost ~]# systemctl status firewalld.service
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service
iptables -t filter -nL ##查看filter表中的策略
iptables -F ##刷掉filter表中的所有策略,当没有用-t指定表名称时默认是filter
service iptables save ##保存当前策略
iptables -t filter -nL ##查看filter表中的策略
iptables -F ##刷掉filter表中的所有策略,当没有用-t指定表名称时默认是filter
service iptables save ##保存当前策略
iptables -A INPUT -i lo -j ACCEPT ##允许lo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允许访问22端口
iptables -A INPUT -s 172.25.254.60 -j ACCEPT ##允许60主机访问本机所有端口
iptables -A INPUT -j ACCEPT ##拒绝所有主机的数据来源
测试:60主机
iptables -N redhat ##增加链redhat
iptables -E redhat westos ##改变链名称
iptables -X westos ##删除westos链
iptables -D INPUT ##删除INPUT链中的第二条策略
iptables -I INPUT -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第一条
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT ##修改第一条策略
iptable -P INPUT DROP ##把INPUT表中的默认策略改为drop
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ##策略状态为RELATED ESTABLISHED 的策略不再读取,直接通过
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT ##添加策略的状态为NEW
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -j REJECT
iptables -t filter -nL
[root@localhost ~]# vim /etc/sysctl.conf ##内核路由功能开启 参数保存/proc/sys/net/ipv4/下
[root@localhost ~]# sysctl -p ##生效
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.100 ##从eth1出来的数据包做源地址伪装,伪装成172.25.254.100
[root@localhost ~]# iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-dest 172.25.0.11 ##从eth1进来的数据包做目的地址转换,转换成172.25.0.11
[root@localhost ~]# iptables -t nat -nL
测试:server端ping254网段和0网段均可ping通