IPTABLES
一,iptables的原理:
当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
二,iptables的四表五连:
iptables的结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成。
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter
iptables中定义有5条链,说白了就是上面说的5个钩子函数,因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包
103 systemctl disable firewalld.service 开机不启动火墙服务
104 systemctl start iptables.service 打开iptables 服务
105 systemctl enable iptables.service
106 iptables -nL n 解析 L 列出
107 iptables -F 刷新掉
108 iptables -nL
109 service iptables save 保存
110 vim /etc/sysconfig/iptables
104 iptables -nL
105 iptables -A INPUT -p --dport 80 -j REJECT
106 iptables -A INPUT -p tcp --dport 80 -j REJECT
107 iptables -nL
108 iptables -I INPUT 1 -s 172.25.254.250 -p tcp --dport 80 -j ACCEPT
109 iptables -nL
110 iptables -I INPUT 1 -s 172.25.254.250 -p tcp --dport 22 -j ACCEPT
111 iptables -D INPUT 2
112 iptables
113 iptables -nL
114 iptables -D INPUT 2
115 iptables -nL
可以看到 server的主机是连接不到的
当删除第二条 便可以登陆
1 iptables -F 刷掉
3 iptables -nL
4 iptables -A INPUT -p tcp --dport 22 -j ACCEPT 允许22端口
5 iptables -A INPUT -p tcp --dport 53 -j ACCEPT
6 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
7 iptables -A INPUT -p tcp --dport 3260 -j ACCEPT
8 iptables -A INPUT -i lo -j ACCEPT
9 iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT 允许正在连接和已经连接过的
10 iptables -nL
11 service iptables save
关于源地址转换和目的地址转换:
环境:实验主机配置双网卡,eth0(192.168.122.84),eth1(192.168.2.84),eth1相当于路由器,可以实现内网和外网之间通信的桥梁。
测试主机配置ip为(192.168.2.83),相当于内网主机,配置网关为(192.168.2.84)
源地址转换:
[root@ ~]# sysctl -p | grep ip_forward
net.ipv4.ip_forward = 1
要保证此项值为1,如果为0,则不能实现路由转发
在/etc/sysctl.conf重添加即可
[root@ ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 192.168.122.1 #在主机84上添加策略:从本机上路由的数据包的源地址转变为1
目的地址转换:
[root@ ~]# iptables -t nat -A PREROUTING -i eth0 -d 192.168.122.84 -j DNAT –to-dest 192.168.122.1 #将访问目的是84的连接转向1