(1)理论基础:当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、 raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter。
若为本地数据的传输,则数据进来内核的接口为input;出去的时候接口为output;
若目的地址不是本地时,数据传输的时候没有经过内核而出去的接口为postouting;响应的时候出去的接口叫做preouting.
1、首先关闭firewalld火墙
systemctl stop firewalld.server
systemc mask firewalld.server
2、安装iptables火墙
yum install iptables-services.x86_64
systemctl start iptables
二、 iptables的用法
1)iptables的主配置文件:/etc/sysconfig/iptabls
2)iptables -F ##刷新
iptables -nL ##查看iptables中的策略(默认为filter表)
iptanles -t nat -nL ##查看nat表中的策略;-t 指向表名
service iptables save ##保存已有的策略(会保存在iptables的主配置文件中)
iptables -N xniu ##添加自定义链名
iptables -A INPUT -s 172.25.254.21 -p tcp --dport 22 -j REJECT ##-A为添加一条策略到INPUT表;-s源地址;-p协议;--dport目的端口;-j 执行拒绝
在21端口进行测试:
iptables -D INPUT -s 172.25.254.21 -p tcp --dport 22 -j REJECT ##删除已有的策略
iptables -P INPUT DROP ## 修改input表的状态为drop
iptables -R INPUT 2 -s 172.25.254.21 -p tcp --dport 22 -j DROP ## 修改第二条的记录,把REJECT修改为DROP
3 ) 常用操作命令:
-D 删除匹配的规则
-R 替换匹配的规则
-I 在指定位置插入规则
DNAT(目标地址转换),就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B
iptables -F ##首先清空
iptables -nL ##查看
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state new -i lo -j ACCEPT
iptables -A INPUT -m state --state new -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state new -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state new -i lo -j ACCEPT
示例二:目的地址的转换 (在nat表上)
测试结果:
1、 首先把服务端要有两个物理网卡。ip分别为eth0:172.25.254.121 、eth1:192.168.0.2
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.121 ##此时eth0为172.25.254.121
iptables -t filter -F ##刷新filter表
2、 在192.168.0.111主机上测试结果如下: