# iptables **Repository Path**: jf_linux/iptables ## Basic Information - **Project Name**: iptables - **Description**: CentOS7 iptables防火墙部署脚本 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-31 - **Last Updated**: 2022-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > Write by lyc at 2020-9-16: Write Modify by lyc at 2021-2-19: 优化 ``README.md`` # 1.CentOS6/7 iptables脚本 适用于CentOS6/7 iptables防火墙,支持 ``filter``, ``nat`` 表的操作。 ## 脚本原理 * ``bin/edit_ipt.sh`` 文件是脚本的入口,只需要 ``sh``这个文件即可。 * ``bin/iptables.sh`` 文件是一个临时文件,每次运行 ``bin/edit_ipt.sh`` 时它都会被清空再组合。其原理是对src目录下的文件进行顺序组合 ``src/head`` -> ``src/wholelinerule`` -> ``src/body`` -> ``src/configure`` -> ``src/foot`` ## 脚本运行 平时只需要配置好conf目录下的配置文件,最后运行 ``bin/edit_ipt.sh`` 入口文件即可。 ```bash # 下载脚本到应用程序路径 $ cd /opt $ git clone https://gitee.com/lyc7456/iptables.git # 运行脚本 $ cd iptables $ sh -x bin/edit_ipt.sh ``` # 2.配置文件说明 > 只需要修改以下两个配置文件,其他目录文件无需修改。 ## 2.1 conf/configure 端口放行配置 ``conf/configure`` 文件表示 ``FILTER`` 表 ``INPUT`` 链 ``ACCETP`` 的规则,每一类协议规则的末尾会添加一行 ``DROP``,只需要把允许放行的IP填入下行即可。 * ``SERVNAME`` 服务名,默认配置的服务字段有 SSHD,ZABBIX,RSYNCD,除默认的外也可以自定义,如MYSQLD,REDIS * ``PROCOTOL`` 协议名称,缺省默认值tcp,仅支持[tcp|udp] * ``PORT`` 端口号 * ``IPs`` 匹配的ip地址,多个空格隔开,支持IP段 ### 例: ``` SERVNAME PROCOTOL PORT IPs SSHD tcp 57321 192.168.28.138 192.168.0.0/16 ZABBIX 10050 192.168.100.104 MYQSLD 3306 192.168.99.171 192.168.99.170 ``` > 如果没有自定义规则,那么这个文件是空的。 ## 2.2 conf/wholelinerule 自定义配置 ``conf/wholelinerule`` 文件表示额外添加的自定义规则,比如要封禁某个IP、做NAT转发等,该文件只支持原生的iptables命令。 > 一般如果没有特殊的要求,这个文件也是空的。 ### 开启linux内核转发 使用 NAT功能首先要开启linux 内核转发。 ```bash # 临时配置 $ echo 1 > /proc/sys/net/ipv4/ip_forward $ cat /proc/sys/net/ipv4/ip_forward # 永久生效 $ echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf $ sysctl -p ``` ### 例1:封禁某个IP ```bash # 封禁某个恶意IP访问本机的所有行为 $ iptables -t filter -I INPUT -p tcp -s 1.1.1.1 -j DROP # 封禁某个恶意IP访问本机的80端口 $ iptables -t filter -I INPUT -p tcp -m tcp -s 2.2.2.2 --dport 80 -j DROP ``` ### 例2:NAT转发云主机SSH Port > 1. ipatbles NAT规则两条策略为一组DNAT+SNAT,数据包往返;DNAT:外部访问改写目的地址;SNAT:回包改写源地址 > 2. 注意云主机的IP都是内网eth0的IP,而不是EIP。EIP到云主机的eth0本身也经过了一层NAT。 从公司源访问通过云主机A(1.1.1.1:30001)的iptables NAT访问云主机B(2.2.2.2:22)的SSH端口 ```bash # DNAT $ iptables -t nat -I PREROUTING -p tcp -m tcp -s 175.42.20.0/26 -d 1.1.1.1 --dport 30001 -j DNAT --to-destination 2.2.2.2:22 # SNAT $ iptables -t nat -I POSTROUTING -d 2.2.2.2 -j SNAT --to-source 1.1.1.1 ``` ### 例3:NAT转发访问UDB 从公司源访问通过云主机A(1.1.1.1:30001)的iptables NAT访问UDB(3.3.3.3:3306)的SSH端口 ```bash $ iptables -t nat -I PREROUTING -p tcp -m tcp -s 175.42.20.0/26 -d 1.1.1.1 --dport 30001 -j DNAT --to-destination 3.3.3.3:3306 $ iptables -t nat -I POSTROUTING -d 3.3.3.3 -j SNAT --to-source 1.1.1.1 ```