前提,iptables的安装
在线安装命令: yum install iptables-services -y
出现 autoreconf: command not found 的解决方法:yum install autoconf automake libtool ncurses-devel
查看iptables的状态 执行:systemctl status iptables
或者 service iptables status
一、iptables基础
①规则(rules):网络管理员预定义的条件
②链(chains): 是数据包传播的路径
③表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能
④filter表是系统默认的,INPUT表(进入的包),FORWORD(转发的包),OUTPUT(处理本地生成的包),filter表只能对包进行授受和丢弃的操作。
⑤nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包)
二、iptables命令格式
iptables [-t 表] -命令 匹配 操作 (大小写敏感)
动作选项
ACCEPT 接收数据包
DROP 丢弃数据包
REDIRECT 将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
SNAT 源地址转换
DNAT 目的地址转换
MASQUERADE IP伪装
LOG 日志功能
⑥mangle表,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT
三、查询iptables的运行状态
执行:service iptables status
四、查看本机关于IPTABLES的设置情况
执行:iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all – 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp – 0.0.0.0/0 0.0.0.0/0
ACCEPT ah – 0.0.0.0/0 0.0.0.0/0
ACCEPT udp – 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp – 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all – 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
五、清除原有规则.
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
执行: iptables -F 清除预设表filter中的所有规则链的规则
执行:iptables -X 清除预设表filter中使用者自定链中的规则
六、编辑配置文件:
执行:vi /etc/sysconfig/iptables
编辑完成后执行:service iptables restart
七、iptables配置示例
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# -A INPUT -s 124.233.222.222 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# -A INPUT -s 180.233.222.222 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
七、示例
1.-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
解释:-m state --state 状态>
有数种状态,状态有:
(1)INVAID:无效的封包,例如数据破损的封包状态
(2)ESTABLISHED :已经联机成功的联机状态
(3)NEW:想要建立联机的封包状态
(4)RELATED:这个最常用,表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包,这个状态很常被设定,因为设定了他之后,只要未来有本机发送出去的封包,即使我们没有设定封包的INPUT规则,该有关的封包还是可以进入我们主机,可以简化相当多的设定规则。
2.-A INPUT -p icmp -j ACCEPT
解释:允许ping通过防火墙
3.-A INPUT -i lo -j ACCEPT
解释:-i 后面跟网卡的名字
4.增加,插入,删除和替换规则
iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [–sport 源端口号] [-d 目的IP|目标子网] [–dport 目标端口号] [-j 动作]
参数:-A 增加
-I 插入
-D 删除
-R 替换
5.-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
解释:允许22端口访问该服务器
6.-A INPUT -s 124.233.222.222 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
解释:允许ip为124.233.222.222访问本机的22端口
八、配置端口映射
执行:
echo net.ipv4.ip_forward=1>>/etc/sysctl.conf
//开启系统路由模式功能
sysctl -p
//使内核修改生效
配置在开机启动里:vi /etc/rc.local
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.3.197:21
iptables-save > /etc/sysconfig/iptables
重启iptables,执行:service iptables restart
查看是否设置成功,执行:iptables -L -n -t nat
注意: 让你的linux支持ftp的端口转发
modprobe ip_nat_ftp
###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
modprobe ip_conntrack_ftp
###加载ip_conntrack_ftp模块