近日将iptables防火墙捣弄了下,按以下链接每一条规则输一遍:
25个iptables常用示例 | 《Linux就该这么学》
其中知识点在这里分享下:
1、iptables是linux的内核,没有开启和关闭,一经保存就生效。
2、-A 和 -I 的区别
结论:-A 会将后执行的策略添加到已有策略后,而-I 则会插入到已有策略的前(既成为第一条策略)
-A参数
iptables是由上往下进行匹配
iptables -A INPUT -s 192.168.228.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.153.97.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
执行以上三条命令后,防火墙由上往下匹配,既从num 1开始匹配到num 3,则允许192.168.228.0/24和10.153.97.0/24这两个网段访问,其他不允许访问
[root@GDY-TEST07 etc]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.228.0/24 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 10.153.97.0/24 0.0.0.0/0 tcp dpt:22
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
对比 -I 参数
iptables -I INPUT -s 192.168.228.0/24 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s 10.153.97.0/24 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j DROP
执行以上三条命令后,防火墙由上往下匹配,既从num 1开始匹配,此时num 1的防火墙策略已将访问拒绝,num 2和num 3即使accept也不会生效
[root@GDY-TEST07 etc]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 192.168.228.0/24 0.0.0.0/0 tcp dpt:22
3 ACCEPT tcp -- 10.153.97.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
3、dport和sport的区别:
先来翻译一下dport和sport的意思:
dport:目的端口
sport:来源端口
dport 和sport字面意思来说很好理解,一个是数据要到达的目的端口,一个是数据来源的端口。
但是在使用的时候要分具体情况来对待,这个具体情况就是你的数据包的流动行为方式。(INPUT还是OUTPUT)
比如你的例子:iptables -A INPUT -p tcp –dport 80 -j ACCEPT
注意里面的INPUT参数,这个代表你的这条数据包的进行的 “进入” 操作!
那么你的这条数据包可以这么描述:
1.这是一条从外部进入内部本地服务器的数据。
2.数据包的目的(dport)地址是80,就是要访问我本地的80端口。
3.允许以上的数据行为通过。
总结:允许外部数据访问我的本地服务器80端口。
再看第2条列子:iptables -A INPUT -p tcp –sport 80 -j ACCEPT
1.这是一条从外部进入内部本地服务器的数据。
2.数据包的来源端口是(sport)80,就是对方的数据包是80端口发送过来的。
3.允许以上数据行为。
总结:允许外部的来自80端口的数据访问我的本地服务器。
input方式总结: dport指本地,sport指外部。
如果你的数据包是(OUTPUT)行为,那么就是另外一种理解方式:
比如: iptables -A OUTPUT -p tcp –dport 80 -j ACCEPT
1.这是一条从内部出去的数据。
2.出去的目的(dport)端口是80。
3.允许以上数据行为。
output行为总结:dport只外部,sport指本地。
4、端口转发:
以端口转发3389为例,远程桌面连接linux 192.168.0.1,通过端口转发,连接到另一个win主机192.168.0.5:
1)#目标地址端口为3389的,转换为 192.168.0.1:3389
iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to 192.168.0.1 :3389
2)#凡目标地址为192.168.0.1:3389的,把源地址转换为192.168.0.5
iptables -t nat -I POSTROUTING -p tcp -d 192.168.0.5 --dport 3389 -j SNAT --to 192.168.0.1
3)若发现新增出错,可删除FORWARD 规则:
1 2 | iptables -nL FORWARD --line-number iptables -D FORWARD 1 |
删除一条nat 规则 删除SNAT规则
1 3 | iptables -t nat -D POSTROUTING 1 iptables -t nat -D POSTROUTING 7 |
3)设置sysctl命令用于运行时配置内核参数,否则端口转发失效
nano /etc/sysctl.conf
删除 #net.ipv4.ip_forward=1 前的#号,开启ipv4 forward
sysctl -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载。