配置rc.local

不同的操作系统,自启动文件rc.local位置不一样,建议先百度再继续,这里是ubuntu18.04的配置方法

ubuntu18.04不再使用initd管理系统,改用systemd。

然而systemd很难用,改变太大,跟之前的完全不同。

使用systemd设置开机启动
为了像以前一样,在/etc/rc.local中设置开机启动程序,需要以下几步:

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
cat  /etc/systemd/system/rc-local.service

在得到的rc-local.service文件中,末尾加上

[Install]  
WantedBy=multi-user.target  
Alias=rc-local.service

先检查/etc/rc.local是否有执行权限(直接赋予权限也没有问题)

ls -l /etc/rc.local

然后赋予权限(+x如果不行,可以试试777,全部权限)

chmod +x  /etc/rc.local

rc.local测试一下,重启看看/home/你的用户名/test.log是否有数据

#!/bin/sh  
echo "test rc " > /home/你的用户名/test.log

备份与还原

备份iptables规则,将规则文件保存到当前用户目录下。

iptables-save > ~/iptables.bak

还原iptables规则:

iptables-restore < ~/iptables.bak

常用语法

iptables命令的语法一般如下:

iptables [-flags] [chain] [options[extensions]]    [ACTION]

iptables标志项与命令

-t table:制定要操作的表
-A:将一条或多条规则附加到指定链的末尾
-D:从链中删除某个规则
-P:设置链的缺省目标
-L:查看规则设置
-F:清除规则

iptables选项:

-p:指定协议                       
-d:指定目标地址                                    
-s:指定源地址
--dport 端口号:指定目标端口
--sport 端口号:指定源端口
-i 接口名: 指定输入接口
-o 接口名:指定输出接口

iptables事件项:

ACCEPT:允许数据包通过
DROP:将数据包丢弃掉,这种方式会导致源端误认为数据包丢失,而不断发送新包,直到连接Timeout为止;
REJECT:将数据包丢弃,并回送一个destination unreachable的ICMP数据包给发送端,发送端收到这个数据包后,会立即终止连接动作。

iptables 可以操纵表:

filter 表
nat 表
mangle 表
raw 表
如果不指定,则默认操作filter表
每个表由若干 “链”(chains)组成
每条链由一条或数条 “规则” 组成

系统缺省的表为“filter”,该表中包含了3 个链:

INPUT:网络上其他主机发给本机的数据包;
FORWARD:由本机转发的数据包;
OUTPUT:本机发送出去的数据包;

每一条规则都是这样定义的:
如果数据包头符合这样的条件,就这样处理这个数据包。
当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件
如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则
如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包

iptables操作实例

  1. 列出防火墙当前的规则:
iptables -t filter [表名] -L [链名]
  1. 清除table中的规则
iptables -t filter -F
  1. 设定默认策略
iptables  -t filter[表名] -P INPUT[链名] DROP
  1. 添加规则—最简单的方式
iptables -t filter [表名] -A INPUT[链名] -p icmp[协议名] -j ACCEPT[动作]
  1. 删除规则
iptables -t filter [表名] -D  INPUT[链名] -p icmp[协议名] -j ACCEPT[动作]
  1. 限制访问
iptables -t filter -A INPUT -p icmp -s  192.168.0.193 -j DROP

-s后接的地址可以为某台主机的IP地址、某一个网段的网络地址,也可以是某个网站的域名
-d同上,不过改为了输出端口
--dport:限制目的端口
--sport:限制源端口

防火墙管理办法

当我们通过iptables添加完后规则后,规则就被存储在各个不同的链表中,但是机器重启后,这些规则通通都会消失。

解决方法:

1、将规则存储到规则文件中,然后将防火墙设置为自动启动

service iptables save
setup 或 chkconfig  iptables on

2、通过将规则的设置命令编写为shell文件的形式;

shell脚本

在linux分区上编写,如

vi  /路径/iptest.sh

iptest.sh

#!/bin/sh
XXXXXXX

赋予权限,启动(进入到你的iptest.sh文件目录下)

chmod +x iptest.sh
./iptest.sh

添加到末尾rc.localexit 0不添加会报错(至少我会qwq)

#! /bin/sh
/路径/iptest.sh
exit 0

练习参考

注意:icmp可以单向关闭,也就是说你可以ping别人,别人ping不到你。

脚本一:
1、编写脚本iptest.sh,功能如下:
   1)iptest.sh清空所有存在的规则;
   2)只开放22号端口(ssh、tcp);
   3)禁止发送icmp包;
   4)禁止发送DNS查询包;
   5)INPUT默认规则为DROP;
   6)OUTPUT默认规则为ACCEPT;
   7)FORWARD默认规则为DROP ;
2、iptest.sh能随系统启动。

脚本二:

编写脚本iptest2.sh,功能如下:
1、不清空执行iptest.sh后所有存在的规则的情况下;
2、只允许icmp包发送出去;
3、禁止已开启的22号服务。

ANS

sh1
#!/bin/sh
iptables -t filter -F
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j DROP
iptables -t filter -A OUTPUT -p udp --sport 53 -j DROP
iptables  -t filter -P INPUT DROP
iptables  -t filter -P OUTPUT ACCEPT
iptables  -t filter -P FORWARD DROP


sh2
#!/bin/sh
iptables -t filter -D OUTPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -t filter -D INPUT -p tcp --dport 22 -j ACCEPT