1.iptables的介绍
iptables 是与Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
2.iptables : 修改火墙规则的工具
/etc/sysconfig/iptables ###主配置文件systemctl stop firewalld.service ###关闭火墙,使用iptables之前要关闭火墙
systemctl mask firewalld.service
systemctl start iptables.service
systemctl enable iptables.service
iptables -nL ##查看火墙列表信息
Chain INPUT (policy ACCEPT)
火墙动作 协议 源入口 目的地 数据包的状态
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
iptables -F ##清空火墙策略
service iptables save ##把编辑好的规则写入配置文件
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
3.iptables的信息
三张表:filter,nat,mangle
iptables -t mangle -nL
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
iptables -t filter -nL
INPUT
FORWARD
OUTPUT
iptables -t nat -nL
PREROUTING ###路由前 (DNAT:目的网络地址转换)
INPUT
OUTPUT
POSTROUTING ###路由后 (SNAT:源网路地址转换)
filter,这是默认的表,包含了内建的链INPUT(处理进入的包)、FORWARD(处理通过的包)和OUTPUT(处理本地生成的包)。nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。mangle 这个表用来对指定的包进行修改。它有两个内建规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由
4.iptables的使用规则
-t ##后面接表名称
-A ##添加
从172.25.254.204传来的数据包全部拒绝
测试:(客户端IP:172.25.254.204)
真机IP:172.25.254.4(成功访问samba服务共享目录,虽然拒绝了172.25.254.204的访问,也没有规定172.25.254.4的火墙规则,但是policy ACCEPT,默认是接受的,所以172.25.254.4也可以访问)
-P ##修改默认动作,只能有ACCEPT | DROP两种
iptables -P INPUT DROP ##修改默认动作为DROP,真机也不能连接samba服务,连接超时
-R ##修改
-I ##插入
iptables -R INPUT 2 ! -s 172.25.254.204 -p tcp --dport 22 -j ACCEPT ##除了204的ssh服务接收,别的请求都拒绝
客户端172.25.254.204不能通过ssh服务连接104
-E ##修改链的名称
iptables -t filter -N westos ###新建westos链
iptables -t filter -E westos redhat
iptables -t filter -X redhat ###删除redhat链
-D ##删除 iptables -D INPUT 1 ##删除第二条火墙规则
-s ##源地址
-d ##目的地址
-p ##协议
--dport ##端口
22 ##ssh服务使用
53 ##DNS
80 ##http
443 ##https
-i ##回环lo,匹配从网络接口eth0进来的
-o ##匹配从网络接口eth0出去的
-j ACCEPT | DROP| REJECT ##执行的动作
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
数据包的状态:
RELATED ##已经来过的数据包
ESTABLISHED ##已经确定的数据包
NEW ##新接受到的数据包
5.网络地址转换
服务端(中转站):
eth0: 172.25.254.104
eth1: 192.168. 0. 104
真机IP:172.25.254.4
客户端IP:192.168.0.204
在客户端要设置网关:192.168.0.104
vim /etc/sysctl.conf
:
net.ipv4.ip_forward = 1
sysctl -p ###激活内核路由
net.ipv4.ip_forward = 1
在server(中转站)把规则加入nat表
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.104 ###从eth0进来的数据包地址转到172.25.254.104
w ###查看连接自己的用户
ssh服务连接172.25.254.4,发现是172.25.254.104连接,而不是client IP:192.268.0.204连接,从192.268.0.204传来的数据包,通过自身网关传到中转站eth1,再通过中转站的内核路由从172.25.254.104转出,连接到真机,所以看到是172.25.254.104在连接
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 192.168.0.204 ###从eth1出去的数据包地址转到192.168.0.204
ssh服务连接172.25.254.104,但是连接到了192.168.0.204,数据包从真机传来,通过中转站的eth0经由中转站内核路由,转到192.168.0.204