iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。
1、iptables语法格式
iptables 命令的基本语法格式如下:
[root@l ~]# iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
命令全景图如下:
2、具体使用场景
1)查看规则
对规则的查看需要使用如下命令:
[root@~]# iptables -nvL --line-number
各参数的含义为:
-L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。
-n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。
-v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。
--line-number 表示显示序号
其他链表查看规则,依此类推,比如查看nat表规则,同时删除POSTROUTING 链表的第1条规则:
iptables -t nat -nL --line-number
iptables -t nat -D POSTROUTING 1
2)添加/清除默认规则
#拒绝全部input(过滤除iptables规则之外的所有请求)
iptables -P INPUT DROP
#接受全部input
iptables -P INPUT ACCEPT
其他链表的默认规则,依此类推,
比如添加OUTPUT的默认规则就改成iptables -P OUTPUT DROP
比如添加FORWARD的默认规则就改成iptables -P FORWARD DROP
iptables -F //安装完成基本配置-清空所有默认规则
iptables -X //安装完成基本配置-清空所有自定义规则
iptables -Z //安装完成基本配置-所有计数器归0
iptables -D INPUT 8 //要删除INPUT里序号为8的规则
3) 添加ssh规则
添加规则有两个参数分别是 -A 和 -I。其中
-A 是添加到规则的末尾;
-I 可以插入到指定位置,
默认:没有指定位置的话插入到规则的首部。
eg:添加一条拒绝22端口的规则到尾部。 :
iptables -A INPUT -p tcp --dport 22 -j REJECT
eg:添加一条放通某个IP地址的22端口
iptables -A INPUT -s 10.245.182.10 -p tcp --dport 22 -j ACCEPT
由于最后一条总是生效,先将所有22端口失效,再允许某个IP有效就行。
4)放通samba文件服务器端口
samba新版的已不再使用137.138.139等端口,仅使用445端口。而且仅允许192.168.1网段可以访问。
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 445 -j ACCEPT
5)放通mysql数据库3306端口:
仅允许192.168.1网段可以访问3306端口
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
6)端口转发
首先开启系统的转发功能
vi /etc/sysctl.conf
将net.ipv4.ip_forward=0修改成net.ipv4.ip_forward=1
#编辑后使用命令让配置马上生效
sysctl -p
其次需要配2条规则:
#目标地址端口为3389的,转换为 192.168.1.1:3389
iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to 192.168.1.1:3389
#凡目标地址为192.168.1.1:3389的,把源地址转换为192.168.1.2
iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.1 --dport 3389 -j SNAT --to 192.168.1.2
mstsc远程访问地址192.168.1.2,iptables就会帮你转换成192.168.1.1的桌面了。
3、归档备存
最后建议建一个excel表,将各个规则写一写,包括 放通的客户机是在哪些位置啦,以及放通的原因是哪些啦。后续方便查看放通的原因。好记性不如笔头嘛。相信对于一堆iptables配置规则,如果没有文档辅助记忆,我会很抓狂。